160 lines
5.4 KiB
YAML
160 lines
5.4 KiB
YAML
version: '3.8'
|
|
|
|
# Docker Compose для локальной сборки образов
|
|
# Используйте: docker-compose -f docker-compose.build.yml build
|
|
# Затем: docker-compose up -d
|
|
|
|
services:
|
|
frontend:
|
|
build:
|
|
context: ./client
|
|
dockerfile: Dockerfile
|
|
args:
|
|
# URL бэкенда для сборки (используется в runtime через import.meta.env.VITE_API_URL)
|
|
VITE_API_URL: ${VITE_API_URL:-/api/v1}
|
|
image: ${FRONTEND_IMAGE:-shop-platform-frontend:latest}
|
|
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:
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile
|
|
image: ${BACKEND_IMAGE:-shop-platform-backend:latest}
|
|
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
|