Files
store-platform/docker-compose.yml
T
2025-12-11 21:47:42 +03:00

147 lines
4.9 KiB
YAML

version: '3.8'
services:
frontend:
image: ${FRONTEND_IMAGE:-allexd2010/shop-platform-frontend:0.1}
container_name: shop-platform-frontend
ports:
- "${FRONTEND_PORT:-3000}:80"
environment:
# URL бэкенда для nginx proxy (используется в nginx.conf.template)
# Если бэкенд использует HTTPS (WEB_TSL=true), используйте https://backend:443
- BACKEND_URL=${BACKEND_URL:-https://backend:443}
# Настройка SSL проверки для бэкенда ("on" = проверка включена, "off" = проверка отключена)
- BACKEND_SSL_VERIFY=${BACKEND_SSL_VERIFY:-off}
# URL бэкенда для клиентского приложения (используется в runtime через import.meta.env.VITE_API_URL)
# Если не задан, используется относительный путь /api/v1 (проксируется через nginx)
- VITE_API_URL=${VITE_API_URL:-/api/v1}
depends_on:
- backend
restart: unless-stopped
networks:
- shop-network
backend:
image: ${BACKEND_IMAGE:-allexd2010/shop-platform-backend:0.1}
container_name: shop-platform-backend
ports:
- "${WEB_HTTP_PORT:-80}:80"
- "${WEB_HTTPS_PORT:-443}:443"
environment:
# PostgreSQL настройки
- POSTGRES_HOST=${POSTGRES_HOST:-postgres}
- POSTGRES_PORT=${POSTGRES_PORT:-5432}
- POSTGRES_USER=${POSTGRES_USER:-postgres}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-postgres}
- POSTGRES_DB=${POSTGRES_DB:-shop_platform}
# Web настройки
- WEB_HTTP_PORT=${WEB_HTTP_PORT:-80}
- WEB_HTTPS_PORT=${WEB_HTTPS_PORT:-443}
- WEB_TSL=${WEB_TSL:-true}
- WEB_HOST=${WEB_HOST:-0.0.0.0}
# TLS/SSL настройки
- TSL_PATH=${TSL_PATH:-./tsl}
- TSL_KEY=${TSL_KEY:-key.pem}
- TSL_CERT=${TSL_CERT:-cert.pem}
- TSL_HOST=${TSL_HOST:-localhost}
- TSL_C=${TSL_C:-RU}
- TSL_ST=${TSL_ST:-Moscow}
- TSL_L=${TSL_L:-Moscow}
- TSL_O=${TSL_O:-Softline}
- TSL_OU=${TSL_OU:-Digital}
# MinIO настройки
- MINIO_ENDPOINT=${MINIO_ENDPOINT:-minio}
- MINIO_PORT=${MINIO_PORT:-9000}
- MINIO_USE_SSL=${MINIO_USE_SSL:-false}
- MINIO_ACCESS_KEY=${MINIO_ACCESS_KEY:-administrator}
- MINIO_SECRET_KEY=${MINIO_SECRET_KEY:-123QWEasd}
- MINIO_REGION=${MINIO_REGION:-us-east-1}
- MINIO_BUCKET_NAME=${MINIO_BUCKET_NAME:-store-images}
# Логирование
- LOG_LEVEL=${LOG_LEVEL:-info}
- STDOUT_LOG_LEVEL=${STDOUT_LOG_LEVEL:-info}
- FILE_LOG_LEVEL=${FILE_LOG_LEVEL:-}
# JWT Secret (важно для безопасности!)
- JWT_SECRET=${JWT_SECRET:-your-secret-key-change-in-production}
volumes:
# Монтируем сертификаты (если они есть на хосте)
- ./tsl:/app/tsl:ro
# Монтируем логи (опционально)
- ./logs:/app/logs
depends_on:
- postgres
- minio
restart: unless-stopped
networks:
- shop-network
postgres:
image: ${POSTGRES_IMAGE:-postgres:15-alpine}
container_name: shop-platform-postgres
environment:
- POSTGRES_USER=${POSTGRES_USER:-postgres}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-postgres}
- POSTGRES_DB=${POSTGRES_DB:-shop_platform}
volumes:
- postgres_data:/var/lib/postgresql/data
# Можно монтировать SQL скрипты для инициализации
- ./sql:/docker-entrypoint-initdb.d:ro
ports:
- "${POSTGRES_PORT:-5432}:5432"
restart: unless-stopped
networks:
- shop-network
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-postgres}"]
interval: 10s
timeout: 5s
retries: 5
minio:
image: ${MINIO_IMAGE:-minio/minio:latest}
container_name: shop-platform-minio
command: server /data --console-address ":9001"
environment:
- MINIO_ROOT_USER=${MINIO_ACCESS_KEY:-administrator}
- MINIO_ROOT_PASSWORD=${MINIO_SECRET_KEY:-123QWEasd}
volumes:
- minio_data:/data
ports:
- "${MINIO_PORT:-9000}:9000"
- "9001:9001" # MinIO Console
restart: unless-stopped
networks:
- shop-network
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 20s
retries: 3
cloudbeaver:
image: ${CLOUDBEAVER_IMAGE:-dbeaver/cloudbeaver:latest}
container_name: shop-platform-cloudbeaver
ports:
- "${CLOUDBEAVER_PORT:-8978}:8978"
volumes:
- cloudbeaver_data:/opt/cloudbeaver/workspace
depends_on:
- postgres
restart: unless-stopped
networks:
- shop-network
volumes:
postgres_data:
minio_data:
cloudbeaver_data:
networks:
shop-network:
driver: bridge