pounce/docker-compose.yml

77 lines
1.9 KiB
YAML

version: '3.8'
services:
# PostgreSQL Database
db:
image: postgres:16-alpine
container_name: pounce-db
restart: unless-stopped
environment:
POSTGRES_USER: pounce
POSTGRES_PASSWORD: ${DB_PASSWORD:-changeme}
POSTGRES_DB: pounce
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U pounce"]
interval: 10s
timeout: 5s
retries: 5
# FastAPI Backend
backend:
build:
context: ./backend
dockerfile: Dockerfile
container_name: pounce-backend
restart: unless-stopped
ports:
- "8000:8000"
environment:
DATABASE_URL: postgresql+asyncpg://pounce:${DB_PASSWORD:-changeme}@db:5432/pounce
SECRET_KEY: ${SECRET_KEY:-change-this-in-production}
CORS_ORIGINS: ${CORS_ORIGINS:-http://localhost:3000}
ENABLE_SCHEDULER: "false"
depends_on:
db:
condition: service_healthy
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
interval: 30s
timeout: 10s
retries: 3
# Scheduler (APScheduler) - runs background jobs in a separate process
scheduler:
build:
context: ./backend
dockerfile: Dockerfile
container_name: pounce-scheduler
restart: unless-stopped
environment:
DATABASE_URL: postgresql+asyncpg://pounce:${DB_PASSWORD:-changeme}@db:5432/pounce
SECRET_KEY: ${SECRET_KEY:-change-this-in-production}
ENABLE_SCHEDULER: "true"
depends_on:
db:
condition: service_healthy
command: ["python", "run_scheduler.py"]
# Next.js Frontend
frontend:
build:
context: ./frontend
dockerfile: Dockerfile
container_name: pounce-frontend
restart: unless-stopped
ports:
- "3000:3000"
environment:
NEXT_PUBLIC_API_URL: ${API_URL:-http://localhost:8000}
depends_on:
- backend
volumes:
postgres_data: