# Установка через 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)