diff --git a/Install-Docker.-.md b/Install-Docker.-.md new file mode 100644 index 0000000..07288b9 --- /dev/null +++ b/Install-Docker.-.md @@ -0,0 +1,143 @@ +# Установка через Docker Compose + +Полный стек в контейнерах: **PostgreSQL 17** + **приложение Shop** (+ опционально **Caddy** для HTTPS). + +## 1. Требования + +- Docker Engine 24 или новее +- Docker Compose v2 (`docker compose`) +- Git +- Порты: **3000** (сайт) или **80/443** (с Caddy) + +Проверка: + +```bash +docker --version +docker compose version +``` + +## 2. Получение кода + +```bash +git clone https://git.evilfox.cc/test/shop10.git +cd shop10 +git checkout v0.10.0 +``` + +## 3. Настройка переменных + +```bash +cp .env.docker.example .env +nano .env +``` + +| Переменная | Описание | Пример | +|------------|----------|--------| +| `POSTGRES_USER` | Пользователь БД | `shop` | +| `POSTGRES_PASSWORD` | Пароль БД | смените в production | +| `POSTGRES_DB` | Имя базы | `shop` | +| `SESSION_SECRET` | Секрет сессий | `openssl rand -hex 32` | +| `APP_PORT` | Порт на хосте | `3000` | +| `TRUST_PROXY` | За Caddy: `1`, иначе `0` | `0` | + +## 4. Запуск + +```bash +docker compose up -d --build +``` + +Первый запуск: сборка образа `app`, скачивание `postgres:17-alpine`, создание таблиц и демо-товаров. + +Статус: + +```bash +docker compose ps +docker compose logs -f app +``` + +## 5. Проверка + +```bash +curl -s http://127.0.0.1:3000/health +``` + +В браузере: **http://IP_СЕРВЕРА:3000** или **http://localhost:3000** + +## 6. HTTPS с Caddy (опционально) + +1. В `.env` установите `TRUST_PROXY=1` +2. Отредактируйте `caddy/Caddyfile.docker.example`: + - укажите свой домен вместо `shop.example.com` + - или оставьте блок `:80` для доступа по IP +3. Запуск: + +```bash +docker compose --profile proxy up -d --build +``` + +Открыты порты **80** и **443**. Контейнер `caddy` проксирует на `app:3000`. + +## 7. Полезные команды + +| Команда | Действие | +|---------|----------| +| `docker compose logs -f app` | Логи приложения | +| `docker compose logs -f postgres` | Логи БД | +| `docker compose restart app` | Перезапуск приложения | +| `docker compose down` | Остановить контейнеры | +| `docker compose down -v` | Остановить и **удалить данные БД** | +| `docker compose up -d --build` | Пересборка после `git pull` | + +## 8. Обновление версии + +```bash +cd shop10 +git fetch --tags +git checkout v0.10.0 # или новый тег +docker compose up -d --build +``` + +## 9. Только PostgreSQL (разработка) + +Приложение на хосте (`npm run dev`), БД в Docker: + +```bash +docker compose -f docker-compose.dev.yml up -d +cp .env.example .env +``` + +В `.env`: + +```env +DATABASE_URL=postgresql://shop:shop@127.0.0.1:5432/shop +HOST=0.0.0.0 +``` + +```bash +npm install +npm run dev +``` + +## 10. Архитектура + +``` +┌─────────────┐ ┌──────────────┐ ┌─────────────┐ +│ Браузер │────▶│ Caddy :443 │────▶│ app :3000 │ +│ │ │ (опционально)│ │ Node.js │ +└─────────────┘ └──────────────┘ └──────┬──────┘ + │ + ┌──────▼──────┐ + │ postgres:17 │ + └─────────────┘ +``` + +## 11. Типичные ошибки + +| Симптом | Решение | +|---------|---------| +| `port is already allocated` | Смените `APP_PORT` в `.env` или освободите порт 3000 | +| `app` unhealthy | `docker compose logs app` — часто нет связи с postgres | +| Пустой каталог | Подождите seed; `docker compose logs app` | +| 502 с Caddy | `TRUST_PROXY=1`, проверьте `docker compose ps` | + +Подробнее: [Решение проблем](Troubleshooting)