version: '3.8' services: # PostgreSQL Database postgres: image: postgres:15-alpine environment: POSTGRES_DB: sprintforge POSTGRES_USER: sprintforge POSTGRES_PASSWORD: sprintforge_dev ports: - "5432:5432" volumes: - postgres_data:/var/lib/postgresql/data networks: - sprintforge_network # Redis Cache redis: image: redis:7-alpine ports: - "6379:6379" volumes: - redis_data:/data networks: - sprintforge_network # FastAPI Backend backend: build: context: ./backend dockerfile: Dockerfile ports: - "8000:8000" environment: - DATABASE_URL=postgresql+asyncpg://sprintforge:sprintforge_dev@postgres:5432/sprintforge - REDIS_URL=redis://redis:6379 - SECRET_KEY=dev-secret-key-change-in-production - ENVIRONMENT=development - DEBUG=true volumes: - ./backend:/app - backend_uploads:/app/uploads depends_on: - postgres - redis networks: - sprintforge_network develop: watch: - action: sync path: ./backend target: /app ignore: - __pycache__ - "*.pyc" # Next.js Frontend frontend: build: context: ./frontend dockerfile: Dockerfile ports: - "3000:3000" environment: - NEXT_PUBLIC_API_URL=http://localhost:8000/api/v1 - NEXTAUTH_URL=http://localhost:3000 - NEXTAUTH_SECRET=dev-nextauth-secret volumes: - ./frontend:/app - /app/node_modules depends_on: - backend networks: - sprintforge_network develop: watch: - action: sync path: ./frontend target: /app ignore: - node_modules - .next volumes: postgres_data: redis_data: backend_uploads: networks: sprintforge_network: driver: bridge