# Docker Setup для Shop Platform ## Быстрый старт ### 1. Использование готовых образов из registry (рекомендуется для production) ```bash # Копируем пример файла с переменными окружения cp .env.example .env # Редактируем .env файл и укажите образы из registry: # FRONTEND_IMAGE=your-registry.com/shop-platform-frontend:latest # BACKEND_IMAGE=your-registry.com/shop-platform-backend:latest # POSTGRES_IMAGE=postgres:15-alpine # MINIO_IMAGE=minio/minio:latest # Особенно важно изменить JWT_SECRET для продакшена! # Если registry требует аутентификацию, выполните: # docker login your-registry.com # Запускаем все сервисы (образы будут скачаны из registry) docker-compose up -d # Просмотр логов docker-compose logs -f backend ``` ### 2. Локальная сборка образов ```bash # Собираем образы локально docker-compose -f docker-compose.build.yml build # Помечаем образы для registry (опционально) docker tag shop-platform-frontend:latest your-registry/shop-platform-frontend:latest docker tag shop-platform-backend:latest your-registry/shop-platform-backend:latest # Отправляем в registry (опционально) docker push your-registry/shop-platform-frontend:latest docker push your-registry/shop-platform-backend:latest # Затем используйте docker-compose.yml с указанием образов в .env ``` ### 3. Только бэкенд (если PostgreSQL и MinIO уже запущены) ```bash # Сборка образа docker build -t shop-platform-backend . # Запуск контейнера docker run -d \ --name shop-platform-backend \ -p 80:80 -p 443:443 \ -e POSTGRES_HOST=your-postgres-host \ -e POSTGRES_PASSWORD=your-password \ -e MINIO_ENDPOINT=your-minio-host \ -e JWT_SECRET=your-secret-key \ -v ./tsl:/app/tsl:ro \ shop-platform-backend ``` ## Переменные окружения Все переменные окружения описаны в файле `.env.example`. Основные: ### Backend: - **POSTGRES_*** - настройки подключения к PostgreSQL - **MINIO_*** - настройки подключения к MinIO - **WEB_*** - настройки веб-сервера (порты, TLS) - **TSL_*** - настройки SSL/TLS сертификатов - **JWT_SECRET** - секретный ключ для JWT (ОБЯЗАТЕЛЬНО измените!) ### Frontend: - **FRONTEND_IMAGE** - имя образа фронтенда из registry (по умолчанию: `shop-platform-frontend:latest`) - **VITE_API_URL** - URL бэкенда для клиентского приложения (по умолчанию: `/api/v1` - относительный путь, проксируется через nginx) - **BACKEND_URL** - URL бэкенда для nginx proxy (по умолчанию: `http://backend:443`) - **BACKEND_SSL_VERIFY** - настройка SSL проверки для бэкенда (по умолчанию: `# proxy_ssl_verify off;` - проверка отключена) - **FRONTEND_PORT** - порт для фронтенда (по умолчанию: `3000`) ### Образы из registry: - **FRONTEND_IMAGE** - образ фронтенда (например: `registry.example.com/shop-platform-frontend:v1.0.0`) - **BACKEND_IMAGE** - образ бэкенда (например: `registry.example.com/shop-platform-backend:v1.0.0`) - **POSTGRES_IMAGE** - образ PostgreSQL (по умолчанию: `postgres:15-alpine`) - **MINIO_IMAGE** - образ MinIO (по умолчанию: `minio/minio:latest`) ## Структура сервисов Docker Compose включает: 1. **frontend** - React приложение (Vite + Nginx) 2. **backend** - основное приложение на Fastify 3. **postgres** - база данных PostgreSQL 4. **minio** - объектное хранилище для изображений ## Сертификаты TLS Если вы используете HTTPS (WEB_TSL=true), поместите сертификаты в папку `tsl/`: - `tsl/key.pem` - приватный ключ - `tsl/cert.pem` - сертификат Если сертификатов нет, приложение автоматически создаст самоподписанные сертификаты при первом запуске. ## Healthcheck Приложение имеет встроенный healthcheck endpoint: - HTTP: `http://localhost:80/health` - HTTPS: `https://localhost:443/health` ## Логи Логи сохраняются в папку `logs/` (если FILE_LOG_LEVEL задан) или выводятся в stdout. ## Миграции базы данных SQL скрипты из папки `sql/` автоматически выполняются при первом запуске PostgreSQL контейнера (благодаря монтированию в `/docker-entrypoint-initdb.d`). ## Полезные команды ```bash # Остановить все сервисы docker-compose down # Остановить и удалить volumes (ОСТОРОЖНО: удалит данные!) docker-compose down -v # Пересобрать образы локально (используя docker-compose.build.yml) docker-compose -f docker-compose.build.yml build --no-cache # Отправить образы в registry (после сборки) docker tag shop-platform-frontend:latest ${REGISTRY_URL}/shop-platform-frontend:latest docker tag shop-platform-backend:latest ${REGISTRY_URL}/shop-platform-backend:latest docker push ${REGISTRY_URL}/shop-platform-frontend:latest docker push ${REGISTRY_URL}/shop-platform-backend:latest # Просмотр логов конкретного сервиса docker-compose logs -f frontend docker-compose logs -f backend docker-compose logs -f postgres docker-compose logs -f minio # Выполнить команду в контейнере docker-compose exec backend sh # Проверить статус docker-compose ps ``` ## Production рекомендации 1. **Измените JWT_SECRET** на сложный случайный ключ 2. **Используйте сильные пароли** для PostgreSQL и MinIO 3. **Настройте правильные TLS сертификаты** (не самоподписанные) 4. **Используйте secrets** для хранения паролей (Docker Secrets или внешний менеджер) 5. **Настройте резервное копирование** для PostgreSQL 6. **Ограничьте доступ** к портам через firewall 7. **Используйте reverse proxy** (nginx) перед приложением