File size: 1,533 Bytes
1941764 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | version: '3.8'
services:
# PostgreSQL Database
db:
image: postgres:15-alpine
container_name: todo-db
environment:
POSTGRES_USER: todouser
POSTGRES_PASSWORD: todopassword
POSTGRES_DB: tododb
volumes:
- postgres_data:/var/lib/postgresql/data
ports:
- "5432:5432"
healthcheck:
test: ["CMD-SHELL", "pg_isready -U todouser"]
interval: 10s
timeout: 5s
retries: 5
# FastAPI Backend
api:
build:
context: .
dockerfile: Dockerfile
container_name: todo-api
environment:
DATABASE_URL: postgresql://todouser:todopassword@db:5432/tododb
JWT_SECRET_KEY: ${JWT_SECRET_KEY:-your-super-secret-key-change-this-min-32-characters-long}
JWT_ALGORITHM: HS256
ACCESS_TOKEN_EXPIRE_MINUTES: 30
CORS_ORIGINS: http://localhost:3000,http://localhost:3001
SMTP_HOST: ${SMTP_HOST:-smtp.gmail.com}
SMTP_PORT: ${SMTP_PORT:-587}
SMTP_USERNAME: ${SMTP_USERNAME}
SMTP_PASSWORD: ${SMTP_PASSWORD}
SMTP_USE_TLS: ${SMTP_USE_TLS:-true}
EMAIL_FROM: ${EMAIL_FROM}
EMAIL_FROM_NAME: ${EMAIL_FROM_NAME:-Todo Application}
FRONTEND_URL: ${FRONTEND_URL:-http://localhost:3000}
PASSWORD_RESET_TOKEN_EXPIRY_MINUTES: 15
PASSWORD_RESET_MAX_REQUESTS_PER_HOUR: 3
COHERE_API_KEY: ${COHERE_API_KEY}
ports:
- "8000:8000"
depends_on:
db:
condition: service_healthy
volumes:
- ./src:/app/src
restart: unless-stopped
volumes:
postgres_data:
|