services:
backend:
build:
context: ./backend
dockerfile: ../Dockerfile.backend
target: prod # Development mode with hot reload
restart: unless-stopped
container_name: cover-letter-backend
env_file:
- .env
environment:
# - GIN_MODE=release # For production
- GIN_MODE=release
# - POSTGRES_DB=postgresql://username:password@host:port/database_name
- POSTGRES_DB=postgresql://postgres:postgres@db:5432/cover-letter
# - Environment=prod # For production
- Environment=prod
networks:
- cover-letter-network
depends_on:
db: # Wait for database to be ready (Pass healthcheck)
condition: service_healthy
frontend:
context: .
dockerfile: Dockerfile.frontend
target: prod # Development stage
container_name: cover-letter-frontend
ports:
- 8000:8080
db:
image: postgres:13.21-alpine3.22
container_name: cover-letter-db
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
# - POSTGRES_HOST_AUTH_METHOD=trust # No password needed
- POSTGRES_DB=cover-letter
- 5432:5432
volumes:
- ./data/db:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 2s
timeout: 2s
retries: 5
cover-letter-network:
driver: bridge