services: postgres: image: timescale/timescaledb:latest-pg16 container_name: invest-copilot-postgres environment: POSTGRES_DB: invest_copilot POSTGRES_USER: dev POSTGRES_PASSWORD: dev_password POSTGRES_HOST_AUTH_METHOD: md5 ports: - "5433:5432" volumes: - pgdata:/var/lib/postgresql/data - ./docker/init.sql:/docker-entrypoint-initdb.d/01-init.sql healthcheck: test: ["CMD-SHELL", "pg_isready -U dev -d invest_copilot"] interval: 10s timeout: 5s retries: 5 command: > postgres -c max_connections=200 -c shared_buffers=256MB -c effective_cache_size=768MB -c work_mem=4MB -c maintenance_work_mem=64MB redis: image: redis:7-alpine container_name: invest-copilot-redis ports: - "6380:6379" volumes: - redisdata:/data healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 5s retries: 5 minio: image: minio/minio container_name: invest-copilot-minio command: server /data --console-address ":9001" environment: MINIO_ROOT_USER: dev MINIO_ROOT_PASSWORD: dev_password ports: - "9000:9000" - "9001:9001" volumes: - miniodata:/data healthcheck: test: ["CMD", "mc", "ready", "local"] interval: 10s timeout: 5s retries: 5 backend: build: context: ./src/backend dockerfile: Dockerfile container_name: invest-copilot-backend ports: - "8000:8000" environment: DATABASE_URL: postgresql+asyncpg://dev:dev_password@postgres:5432/invest_copilot REDIS_URL: redis://redis:6379 CELERY_BROKER_URL: redis://redis:6379 CELERY_RESULT_BACKEND: redis://redis:6379 depends_on: - redis - postgres celery-worker: build: context: ./src/backend dockerfile: Dockerfile container_name: invest-copilot-celery-worker command: celery -A celery_app worker --loglevel=info --concurrency=4 environment: DATABASE_URL: postgresql+asyncpg://dev:dev_password@postgres:5432/invest_copilot REDIS_URL: redis://redis:6379 CELERY_BROKER_URL: redis://redis:6379 CELERY_RESULT_BACKEND: redis://redis:6379 depends_on: - redis - postgres celery-beat: build: context: ./src/backend dockerfile: Dockerfile container_name: invest-copilot-celery-beat command: celery -A celery_app beat --loglevel=info environment: DATABASE_URL: postgresql+asyncpg://dev:dev_password@postgres:5432/invest_copilot REDIS_URL: redis://redis:6379 CELERY_BROKER_URL: redis://redis:6379 CELERY_RESULT_BACKEND: redis://redis:6379 depends_on: - redis - postgres flower: build: context: ./src/backend dockerfile: Dockerfile container_name: invest-copilot-flower command: celery -A celery_app flower --port=5555 ports: - "5555:5555" environment: CELERY_BROKER_URL: redis://redis:6379 depends_on: - celery-worker volumes: pgdata: redisdata: miniodata: