# Déploiement production — stack complète (app + db + nginx) # Pas de Redis — cache/sessions/queue utilisent la base de données # Usage : docker compose -f docker-compose.prod.yml up -d services: app: build: context: . dockerfile: docker/Dockerfile container_name: mesreleves_app restart: unless-stopped environment: APP_ENV: production APP_KEY: ${APP_KEY} DB_CONNECTION: ${DB_CONNECTION:-pgsql} DB_HOST: db DB_PORT: ${DB_PORT:-5432} DB_DATABASE: ${DB_DATABASE:-mesreleves} DB_USERNAME: ${DB_USERNAME:-mesreleves} DB_PASSWORD: ${DB_PASSWORD} CACHE_STORE: database SESSION_DRIVER: database QUEUE_CONNECTION: database depends_on: db: condition: service_healthy volumes: - .:/var/www/html - app_storage:/var/www/html/storage networks: - internal nginx: image: nginx:alpine container_name: mesreleves_nginx restart: unless-stopped ports: - "80:80" - "443:443" volumes: - ./docker/nginx.conf:/etc/nginx/conf.d/default.conf:ro - ./public:/var/www/html/public:ro - app_storage:/var/www/html/storage:ro depends_on: - app networks: - internal db: image: ${DB_IMAGE:-postgres:18-alpine} container_name: mesreleves_db restart: unless-stopped environment: # PostgreSQL POSTGRES_DB: ${DB_DATABASE:-mesreleves} POSTGRES_USER: ${DB_USERNAME:-mesreleves} POSTGRES_PASSWORD: ${DB_PASSWORD} # MySQL (ignoré par PostgreSQL) MYSQL_DATABASE: ${DB_DATABASE:-mesreleves} MYSQL_USER: ${DB_USERNAME:-mesreleves} MYSQL_PASSWORD: ${DB_PASSWORD} MYSQL_ROOT_PASSWORD: ${DB_PASSWORD} volumes: - dbdata:/var/lib/postgresql # PostgreSQL # Pour MySQL, remplacer par : - dbdata:/var/lib/mysql healthcheck: test: ["CMD-SHELL", "pg_isready -U ${DB_USERNAME:-mesreleves} || mysqladmin ping -h localhost -u${DB_USERNAME:-mesreleves} -p${DB_PASSWORD}"] interval: 10s timeout: 5s retries: 5 networks: - internal volumes: dbdata: app_storage: networks: internal: driver: bridge