Files
BUT2/DragonBank/docker-compose.yml
2026-03-27 10:20:35 +01:00

140 lines
3.6 KiB
YAML

version: '3.8'
services:
# ============================================
# BASE DE DONNÉES POSTGRES
# ============================================
db:
build:
context: ./db
dockerfile: Dockerfile
container_name: dragonbank-db
environment:
POSTGRES_DB: dragonbank
POSTGRES_USER: dragonadmin
POSTGRES_PASSWORD_FILE: /run/secrets/db_password
secrets:
- db_password
volumes:
- postgres_data:/var/lib/postgresql/data
- ./db/init.sql:/docker-entrypoint-initdb.d/init.sql
networks:
- dragonbank-backend-net
ports:
- "5432:5432"
healthcheck:
test: ["CMD-SHELL", "pg_isready -U dragonadmin -d dragonbank"]
interval: 10s
timeout: 5s
retries: 5
start_period: 30s
restart: unless-stopped
# ============================================
# BACKEND API PYTHON (FLASK)
# ============================================
backend:
build:
context: ./backend
dockerfile: Dockerfile
container_name: dragonbank-backend
environment:
DATABASE_URL: postgresql://dragonadmin:dragonpass@db:5432/dragonbank
SECRET_KEY: dragonbank-super-secret-key-2024
FLASK_ENV: production
depends_on:
db:
condition: service_healthy
networks:
- dragonbank-backend-net
- dragonbank-frontend-net
ports:
- "5000:5000"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:5000/api/health"]
interval: 15s
timeout: 5s
retries: 3
start_period: 20s
restart: unless-stopped
# ============================================
# FRONTEND PYTHON (FLASK)
# ============================================
frontend:
build:
context: ./frontend
dockerfile: Dockerfile
container_name: dragonbank-frontend
environment:
BACKEND_URL: http://backend:5000
SECRET_KEY: frontend-secret-key-2024
depends_on:
backend:
condition: service_healthy
networks:
- dragonbank-frontend-net
ports:
- "8080:8080"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/"]
interval: 15s
timeout: 5s
retries: 3
start_period: 15s
restart: unless-stopped
# ============================================
# SERVICE D'INTÉRÊTS (BONUS)
# ============================================
interests:
build:
context: ./interests
dockerfile: Dockerfile
container_name: dragonbank-interests
environment:
DATABASE_URL: postgresql://dragonadmin:dragonpass@db:5432/dragonbank
INTEREST_RATE_LIVRET_A: 0.03
INTEREST_RATE_ASSURANCE_VIE: 0.02
INTERVAL_SECONDS: 86400
depends_on:
db:
condition: service_healthy
networks:
- dragonbank-backend-net
healthcheck:
test: ["CMD", "python", "-c", "import psycopg2; psycopg2.connect('postgresql://dragonadmin:dragonpass@db:5432/dragonbank')"]
interval: 30s
timeout: 10s
retries: 3
start_period: 15s
restart: unless-stopped
# ============================================
# SECRETS
# ============================================
secrets:
db_password:
file: ./secrets/db_password.txt
# ============================================
# VOLUMES
# ============================================
volumes:
postgres_data:
driver: local
# ============================================
# NETWORKS
# ============================================
networks:
dragonbank-backend-net:
driver: bridge
ipam:
config:
- subnet: 172.20.0.0/16
dragonbank-frontend-net:
driver: bridge
ipam:
config:
- subnet: 172.21.0.0/16