services: # PostgreSQL Database postgres: image: postgres:15-alpine container_name: finance-postgres environment: POSTGRES_USER: financeuser POSTGRES_PASSWORD: financepass POSTGRES_DB: postgres ports: - "5434:5432" volumes: - postgres_data:/var/lib/postgresql/data - ./scripts/init_db.sql:/docker-entrypoint-initdb.d/init_db.sql healthcheck: test: ["CMD-SHELL", "pg_isready -U financeuser"] interval: 10s timeout: 5s retries: 5 networks: - finance-network # Redis Cache redis: image: redis:7-alpine container_name: finance-redis ports: - "6380:6379" command: redis-server --appendonly yes volumes: - redis_data:/data healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 5s retries: 5 networks: - finance-network # Auth Service auth-service: build: context: ./services/auth-service dockerfile: Dockerfile container_name: auth-service ports: - "8001:8001" env_file: - .env environment: DATABASE_URL: postgresql://financeuser:financepass@postgres:5432/finance_auth SECRET_KEY: your-secret-key-change-in-production depends_on: postgres: condition: service_healthy networks: - finance-network # Transaction Service transaction-service: build: context: ./services/transaction-service dockerfile: Dockerfile container_name: transaction-service ports: - "8002:8002" env_file: - .env environment: DATABASE_URL: postgresql://financeuser:financepass@postgres:5432/finance_transactions REDIS_URL: redis://redis:6379 depends_on: postgres: condition: service_healthy redis: condition: service_healthy networks: - finance-network # Budget Service budget-service: build: context: ./services/budget-service dockerfile: Dockerfile container_name: budget-service ports: - "8003:8003" env_file: - .env environment: DATABASE_URL: postgresql://financeuser:financepass@postgres:5432/finance_budgets depends_on: postgres: condition: service_healthy networks: - finance-network # Analytics Service analytics-service: build: context: ./services/analytics-service dockerfile: Dockerfile container_name: analytics-service ports: - "8004:8004" env_file: - .env environment: REDIS_URL: redis://redis:6379 TRANSACTION_SERVICE_URL: http://transaction-service:8002 depends_on: redis: condition: service_healthy transaction-service: condition: service_started networks: - finance-network # Nginx Load Balancer nginx: build: context: ./nginx dockerfile: Dockerfile container_name: finance-nginx ports: - "80:80" - "443:443" depends_on: - auth-service - transaction-service - budget-service - analytics-service networks: - finance-network volumes: postgres_data: redis_data: networks: finance-network: driver: bridge