version: '3.8' services: # PostgreSQL для логов, метрик, аналитики postgres: image: postgres:16-alpine container_name: erv_postgres restart: unless-stopped environment: POSTGRES_DB: erv_platform POSTGRES_USER: erv_user POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-erv_secure_pass_2024} POSTGRES_INITDB_ARGS: "--encoding=UTF8 --locale=C" ports: - "5433:5432" # 5433 чтобы не конфликтовать с системным PostgreSQL volumes: - postgres_data:/var/lib/postgresql/data - ./backend/db/init.sql:/docker-entrypoint-initdb.d/init.sql networks: - erv_network healthcheck: test: ["CMD-SHELL", "pg_isready -U erv_user -d erv_platform"] interval: 10s timeout: 5s retries: 5 # Redis для кеширования, сессий, rate limiting redis: image: redis:7-alpine container_name: erv_redis restart: unless-stopped command: redis-server --requirepass ${REDIS_PASSWORD:-redis_secure_pass_2024} --appendonly yes ports: - "6380:6379" # 6380 чтобы не конфликтовать с системным Redis volumes: - redis_data:/data networks: - erv_network healthcheck: test: ["CMD", "redis-cli", "--raw", "incr", "ping"] interval: 10s timeout: 3s retries: 5 # pgAdmin для управления PostgreSQL (опционально) pgadmin: image: dpage/pgadmin4:latest container_name: erv_pgadmin restart: unless-stopped environment: PGADMIN_DEFAULT_EMAIL: ${PGADMIN_EMAIL:-admin@erv.local} PGADMIN_DEFAULT_PASSWORD: ${PGADMIN_PASSWORD:-admin} PGADMIN_LISTEN_PORT: 80 ports: - "5050:80" volumes: - pgadmin_data:/var/lib/pgadmin networks: - erv_network depends_on: - postgres # FastAPI Backend backend: build: context: ./backend dockerfile: Dockerfile container_name: erv_backend restart: unless-stopped env_file: - .env environment: # Database POSTGRES_HOST: postgres POSTGRES_PORT: 5432 POSTGRES_DB: erv_platform POSTGRES_USER: erv_user POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-erv_secure_pass_2024} # Redis REDIS_HOST: redis REDIS_PORT: 6379 REDIS_PASSWORD: ${REDIS_PASSWORD:-redis_secure_pass_2024} # RabbitMQ (внешний) RABBITMQ_HOST: ${RABBITMQ_HOST:-185.197.75.249} RABBITMQ_PORT: ${RABBITMQ_PORT:-5672} RABBITMQ_USER: ${RABBITMQ_USER:-admin} RABBITMQ_PASSWORD: ${RABBITMQ_PASSWORD:-tyejvtej} # API URLs OCR_SERVICE_URL: ${OCR_SERVICE_URL:-http://147.45.146.17:8001} ports: - "8100:8000" volumes: - ./backend/app:/app/app - ./backend/logs:/app/logs - uploads:/app/uploads networks: - erv_network depends_on: postgres: condition: service_healthy redis: condition: service_healthy # React Frontend frontend: build: context: ./frontend dockerfile: Dockerfile container_name: erv_frontend restart: unless-stopped ports: - "5173:3000" environment: - VITE_API_URL=http://147.45.146.17:8100 networks: - erv_network depends_on: - backend networks: erv_network: driver: bridge volumes: postgres_data: driver: local redis_data: driver: local pgadmin_data: driver: local uploads: driver: local