65 lines
2.5 KiB
YAML
65 lines
2.5 KiB
YAML
# docker-compose.yml (in project root)
|
|
version: '3.8'
|
|
|
|
services:
|
|
db:
|
|
image: postgres:15 # Use a specific PostgreSQL version
|
|
container_name: postgres_db
|
|
environment:
|
|
POSTGRES_USER: dev_user # Define DB user
|
|
POSTGRES_PASSWORD: dev_password # Define DB password
|
|
POSTGRES_DB: dev_db # Define Database name
|
|
volumes:
|
|
- postgres_data:/var/lib/postgresql/data # Persist data using a named volume
|
|
ports:
|
|
- "5432:5432" # Expose PostgreSQL port to host (optional, for direct access)
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 5
|
|
start_period: 10s
|
|
restart: unless-stopped
|
|
|
|
backend:
|
|
container_name: fastapi_backend
|
|
build:
|
|
context: ./be # Path to the directory containing the Dockerfile
|
|
dockerfile: Dockerfile
|
|
volumes:
|
|
# Mount local code into the container for development hot-reloading
|
|
# The code inside the container at /app will mirror your local ./be directory
|
|
- ./be:/app
|
|
ports:
|
|
- "8000:8000" # Map container port 8000 to host port 8000
|
|
environment:
|
|
# Pass the database URL to the backend container
|
|
# Uses the service name 'db' as the host, and credentials defined above
|
|
# IMPORTANT: Use the correct async driver prefix if your app needs it!
|
|
- DATABASE_URL=postgresql+asyncpg://dev_user:dev_password@db:5432/dev_db
|
|
# Add other environment variables needed by the backend here
|
|
# - SOME_OTHER_VAR=some_value
|
|
depends_on:
|
|
db: # Wait for the db service to be healthy before starting backend
|
|
condition: service_healthy
|
|
command: ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000", "--reload"] # Override CMD for development reload
|
|
restart: unless-stopped
|
|
|
|
pgadmin: # Optional service for database administration
|
|
image: dpage/pgadmin4:latest
|
|
container_name: pgadmin4_server
|
|
environment:
|
|
PGADMIN_DEFAULT_EMAIL: admin@example.com # Change as needed
|
|
PGADMIN_DEFAULT_PASSWORD: admin_password # Change to a secure password
|
|
PGADMIN_CONFIG_SERVER_MODE: 'False' # Run in Desktop mode for easier local dev server setup
|
|
volumes:
|
|
- pgadmin_data:/var/lib/pgadmin # Persist pgAdmin configuration
|
|
ports:
|
|
- "5050:80" # Map container port 80 to host port 5050
|
|
depends_on:
|
|
- db # Depends on the database service
|
|
restart: unless-stopped
|
|
|
|
volumes: # Define named volumes for data persistence
|
|
postgres_data:
|
|
pgadmin_data: |