Files
store-platform/DOCKER.md
abakumov-a-a d6ea4314b0 add docker
2025-12-11 21:47:42 +03:00

6.9 KiB
Raw Permalink Blame History

Docker Setup для Shop Platform

Быстрый старт

1. Использование готовых образов из registry (рекомендуется для production)

# Копируем пример файла с переменными окружения
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. Локальная сборка образов

# Собираем образы локально
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 уже запущены)

# Сборка образа
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).

Полезные команды

# Остановить все сервисы
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) перед приложением