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