Docker Compose : Stack Web Simple (Web App + BDD)
Description
Ce fichier docker-compose.yml
fournit une structure de base pour lancer une application web (par exemple en PHP, Node.js, Python...) avec une base de données PostgreSQL associée. Il utilise des volumes nommés pour la persistance et des réseaux Docker pour isoler la communication.
Points Clés : Pensez à remplacer les placeholders (YOUR_SECURE_PASSWORD
, your_app_image:latest
) et à adapter les chemins des volumes si nécessaire. L'utilisation de secrets Docker est recommandée pour gérer les mots de passe en production.
Code
version: '3.8'
services:
# Service Base de Données
database:
image: postgres:15-alpine # Utilisation d'une image Alpine légère
container_name: myapp_db
restart: always
volumes:
# Monter un volume nommé pour la persistance des données
- app_db_data:/var/lib/postgresql/data
environment:
# Utiliser des secrets ou des variables d'environnement pour les mots de passe en production
POSTGRES_PASSWORD: YOUR_SECURE_PASSWORD
POSTGRES_USER: app_user
POSTGRES_DB: app_db
networks:
- backend_network # Isoler la BDD sur un réseau interne
# Service Application Web (ex: PHP, Node, Python...)
webapp:
# Remplacer par votre image ou utilisez 'build: .' si vous avez un Dockerfile
image: your_app_image:latest
# build: .
container_name: myapp_web
restart: always
ports:
# Exposer le port 80 de l'application sur le port 8080 de l'hôte
- "8080:80"
volumes:
# Monter le code source de l'application (si développement)
# - ./app_code:/var/www/html
# Monter un volume pour les données persistantes de l'application (uploads, etc.)
- app_web_data:/var/www/data
environment:
# Variables nécessaires pour se connecter à la BDD
DB_HOST: database # Nom du service BDD défini ci-dessus
DB_NAME: app_db
DB_USER: app_user
DB_PASSWORD: YOUR_SECURE_PASSWORD
# Autres variables d'environnement pour l'application...
APP_ENV: production
depends_on:
- database # S'assurer que la BDD démarre avant l'application
networks:
- frontend_network # Réseau pour l'exposition externe (via reverse proxy par ex.)
- backend_network # Réseau pour la communication avec la BDD
# Définition des réseaux
networks:
frontend_network:
driver: bridge
backend_network:
driver: bridge
# Définition des volumes nommés
volumes:
app_db_data:
app_web_data: