version: '3.8' services: # PostgreSQL Database postgres: image: postgres:15-alpine container_name: devpocket_postgres_dev environment: POSTGRES_DB: devpocket_warp_dev POSTGRES_USER: devpocket_user POSTGRES_PASSWORD: devpocket_password POSTGRES_INITDB_ARGS: "--encoding=UTF-8 --lc-collate=C --lc-ctype=C" ports: - "5432:5432" volumes: - postgres_data:/var/lib/postgresql/data - ./scripts/init_db.sql:/docker-entrypoint-initdb.d/init_db.sql networks: - devpocket_network restart: unless-stopped healthcheck: test: ["CMD-SHELL", "pg_isready -U devpocket_user -d devpocket_warp_dev"] interval: 10s timeout: 5s retries: 5 # Redis Cache redis: image: redis:7-alpine container_name: devpocket_redis_dev ports: - "6379:6379" volumes: - redis_data:/data - ./docker/redis.conf:/usr/local/etc/redis/redis.conf command: redis-server /usr/local/etc/redis/redis.conf networks: - devpocket_network restart: unless-stopped healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 5s retries: 5 # FastAPI Application (Development) api: build: context: . dockerfile: Dockerfile target: production container_name: devpocket_api_dev ports: - "8000:8000" environment: - DATABASE_URL=postgresql+asyncpg://devpocket_user:devpocket_password@postgres:5432/devpocket_warp_dev - REDIS_URL=redis://redis:6379/0 - APP_DEBUG=true - RELOAD=true - LOG_LEVEL=DEBUG volumes: # Mount source code for hot reload in development - .:/app - ./logs:/app/logs depends_on: postgres: condition: service_healthy redis: condition: service_healthy networks: - devpocket_network restart: unless-stopped command: > sh -c " echo 'Waiting for database to be ready...' && python -c 'import asyncio; from app.db.database import check_database_connection; asyncio.run(check_database_connection())' && echo 'Running database migrations...' && alembic upgrade head && echo 'Starting development server with hot reload...' && python -m uvicorn main:app --host 0.0.0.0 --port 8000 --reload --log-level debug " healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8000/health"] interval: 30s timeout: 10s retries: 3 start_period: 10s volumes: postgres_data: driver: local redis_data: driver: local networks: devpocket_network: driver: bridge ipam: config: - subnet: 172.20.0.0/16