6.9 KiB
6.9 KiB
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 включает:
- frontend - React приложение (Vite + Nginx)
- backend - основное приложение на Fastify
- postgres - база данных PostgreSQL
- 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 рекомендации
- Измените JWT_SECRET на сложный случайный ключ
- Используйте сильные пароли для PostgreSQL и MinIO
- Настройте правильные TLS сертификаты (не самоподписанные)
- Используйте secrets для хранения паролей (Docker Secrets или внешний менеджер)
- Настройте резервное копирование для PostgreSQL
- Ограничьте доступ к портам через firewall
- Используйте reverse proxy (nginx) перед приложением