version: '3.8' services: nginx: image: nginx:latest container_name: cert-gestion-nginx ports: - "980:80" - "9443:443" # Optionnel: Pour HTTPS si vous décidez d'ajouter un certificat à Nginx volumes: - ./nginx:/etc/nginx/conf.d:ro # Fichiers de configuration Nginx - ./app/public:/var/www/html:ro # Contenu statique et point d'entrée de l'application - ./tls:/opt/tls:rw # Accès en lecture aux certificats pour Nginx si besoin (par ex. pour OCSP) - ./storage/nginx_logs:/var/log/nginx:rw # Volume pour les logs de Nginx depends_on: - php-fpm # Nginx dépend de PHP-FPM pour servir l'application networks: - cert-gestion-network restart: unless-stopped # Nouvelle ligne: Redémarre Nginx si le service s'arrête de manière inattendue php-fpm: build: context: ./php # Construit l'image à partir du dossier ./php dockerfile: Dockerfile container_name: cert-gestion-php-fpm volumes: - ./app:/var/www/html:rw # Code source de l'application PHP (lecture/écriture pour logs, sessions) - ./scripts:/opt/scripts:rw # Scripts shell pour la gestion des certificats (lecture seule) - ./tls:/opt/tls:rw # Dossier pour les certificats et clés (lecture/écriture pour création/révocation) - ./storage/php_logs:/var/log/app:rw # Volume pour les logs de l'application PHP environment: # Variables d'environnement pour PHP (par exemple, pour la connexion DB) # Il est recommandé d'utiliser un fichier .env avec un outil comme phpdotenv en production DB_HOST: mysql DB_NAME: cert_gestion DB_USER: user DB_PASSWORD: password_secret # À CHANGER POUR LA PRODUCTION depends_on: - mysql # PHP-FPM dépend de MySQL networks: - cert-gestion-network restart: unless-stopped # Nouvelle ligne: Redémarre Nginx si le service s'arrête de manière inattendue command: > bash -c "chown -R www-data:www-data /var/log/app /var/www/html/storage && chmod -R 775 /var/log/app /var/www/html/storage && chmod +x /opt/scripts/*.sh && php-fpm" mysql: image: mysql:8.0 container_name: cert-gestion-mysql environment: MYSQL_ROOT_PASSWORD: root_password_secret # À CHANGER POUR LA PRODUCTION MYSQL_DATABASE: cert_gestion MYSQL_USER: user MYSQL_PASSWORD: password_secret # À CHANGER POUR LA PRODUCTION volumes: - mysql_data:/var/lib/mysql # Volume persistant pour les données de la base de données - ./mysql/init.sql:/docker-entrypoint-initdb.d/init.sql:ro # Script exécuté au premier démarrage pour créer la DB et les tables networks: - cert-gestion-network restart: unless-stopped # Nouvelle ligne: Redémarre Nginx si le service s'arrête de manière inattendue volumes: mysql_data: # Définition du volume nommé pour MySQL # Ces volumes sont définis implicitement par les chemins de montage bind mounts: # ./storage/nginx_logs # ./storage/php_logs networks: cert-gestion-network: driver: bridge # Réseau bridge pour la communication interne entre les conteneurs