Files
e-cosplay/docker-compose.yml

178 lines
6.0 KiB
YAML
Raw Normal View History

services:
# --- Service PHP ---
# Conteneur pour exécuter l'application Symfony (requêtes web)
php:
build:
context: .
dockerfile: ./docker/php/Dockerfile
args:
# Utilise l'UID/GID de l'hôte pour éviter les problèmes de permissions
UID: ${UID:-1000}
GID: ${GID:-1000}
container_name: mainframe_php
environment:
- XDEBUG_MODE=coverage
volumes:
# Monte le code source de l'application dans le conteneur
- ./:/srv/app
# Monte le socket Docker pour permettre l'exécution de commandes docker depuis le conteneur
- /var/run/docker.sock:/var/run/docker.sock
- ./coverage:/opt/phpstorm-coverage
- ./.coverage:/opt/phpstorm-coverage
depends_on:
# S'assure que la base de données et Redis sont démarrés avant PHP
- db
- redis
networks:
- mainframe_network # Assignation au réseau commun
# --- Service Worker pour Symfony Messenger ---
# Conteneur dédié à l'exécution des messages en arrière-plan
messenger-worker:
build:
context: .
dockerfile: ./docker/php/Dockerfile
args:
UID: ${UID:-1000}
GID: ${GID:-1000}
container_name: mainframe_messenger_worker
# Commande pour lancer le worker. 'async' est le nom du transport par défaut.
command: php bin/console messenger:consume async --memory-limit=128M --time-limit=3600
volumes:
- ./:/srv/app
# Monte aussi le socket Docker ici pour la cohérence
- /var/run/docker.sock:/var/run/docker.sock
depends_on:
- db
- redis
networks:
- mainframe_network # Assignation au réseau commun
# --- Service Frontend (Bun + Vite) ---
# Conteneur pour compiler les assets JS/CSS en développement
bun:
image: oven/bun:1-slim
container_name: mainframe_bun
# Exécute les commandes avec l'utilisateur de l'hôte pour éviter les problèmes de permissions sur node_modules
user: "${UID:-1000}:${GID:-1000}"
working_dir: /usr/src/app
volumes:
- ./:/usr/src/app
ports:
# Port par défaut du serveur de développement Vite
- "5173:5173"
# Lance le serveur de développement Vite défini dans package.json
command: bun run dev
networks:
- mainframe_network # Assignation au réseau commun
# --- Service Serveur Web (Caddy) ---
# Serveur web moderne qui sert l'application et gère le PHP-FPM
caddy:
image: caddy:2-alpine
container_name: mainframe_caddy
ports:
# Mappe le port 8000 de l'hôte au port 80 du conteneur
- "8000:80"
volumes:
# Monte le fichier de configuration de Caddy
- ./docker/caddy/Caddyfile:/etc/caddy/Caddyfile
# Monte le code source pour servir les fichiers statiques
- ./:/srv/app
depends_on:
- php
networks:
- mainframe_network # Assignation au réseau commun
# --- Service Base de Données principale (PostgreSQL) ---
db:
image: postgres:16-alpine
container_name: mainframe_db
ports:
- "5432:5432"
environment:
POSTGRES_DB: app_db
POSTGRES_USER: symfony_user
POSTGRES_PASSWORD: ChangeMeInProd!
volumes:
# Volume nommé pour la persistance des données
- db_data:/var/lib/postgresql/data
networks:
- mainframe_network # Assignation au réseau commun
# --- Service Cache/Messenger (Redis) ---
redis:
image: redis:7-alpine
container_name: mainframe_redis
networks:
- mainframe_network # Assignation au réseau commun
# --- Service de Test d'Emails (MailHog) ---
# Intercepte tous les emails envoyés en développement
mailhog:
image: mailhog/mailhog:latest
container_name: mainframe_mailhog
ports:
# Port 1025 pour le serveur SMTP factice
- "1025:1025"
# Port 8025 pour l'interface web de MailHog
- "8025:8025"
networks:
- mainframe_network # Assignation au réseau commun
# --- Service de Stockage Fichiers (MinIO) ---
# Fournit une API compatible S3 pour le stockage de fichiers
minio:
image: minio/minio:RELEASE.2025-02-03T21-03-04Z
container_name: mainframe_minio
ports:
# Port 9000 pour l'API S3
- "9000:9000"
# Port 9001 pour la console web de MinIO
- "9001:9001"
environment:
MINIO_ROOT_USER: minio_user
MINIO_ROOT_PASSWORD: ChangeMeInProd!
volumes:
# Volume nommé pour la persistance des fichiers
- minio_data:/data
# Commande pour démarrer MinIO et lancer la console sur le bon port
command: server /data --console-address ":9001"
networks:
- mainframe_network # Assignation au réseau commun
# --- Service de Gestion des Secrets (HashiCorp Vault) ---
vault:
image: hashicorp/vault:latest
container_name: mainframe_vault
ports:
- "8210:8200" # Mappe le port 8210 de l'hôte au port 8200 du conteneur Vault
- "8211:8201" # Mappe le port 8210 de l'hôte au port 8200 du conteneur Vault
✨ feat(Mailer): Ajoute la fonction d'envoi multiple d'emails. 🐛 fix(Mailer): Supprime le dd() de débogage. ✨ feat(templates): Ajoute un template pour les erreurs de logger. ✨ feat(LoggerService): Ajoute un service de journalisation centralisé. ✨ feat(services): Ajoute un listener Doctrine pour le LoggerService. ✨ feat(security): Ajoute une page pour modifier le mot de passe admin. ✨ feat(Form): Ajoute un formulaire pour modifier le mot de passe admin. ✨ feat(VaultClient): Ajoute un client Vault pour le chiffrement. ✨ feat(HomeController): Ajoute une route de déconnexion. ✨ feat(artemis): Ajoute une page pour gérer les comptes administrateurs. ✨ feat(security): Ajoute un UserChecker pour vérifier l'état du compte. ✨ feat(Exception): Ajoute une exception pour les champs immuables du logger. ✨ feat(AccountLoginRegisterRepository): Ajoute une fonction pour récupérer la dernière connexion. ✨ feat(artemis): Ajoute une page pour lister les serveurs. ✨ feat(artemis): Ajoute une option dans le menu pour les administrateurs. ✨ feat(AccountRepository): Ajoute une fonction pour récupérer les comptes. ✨ feat(settings): Ajoute une page pour les logs d'un compte admin. ✨ feat(EventListener): Ajoute un listener pour la double authentification. ✨ feat(Account): Ajoute un champ pour activer ou désactiver un compte. ✨ feat(AdminFormType): Ajoute un formulaire pour modifier un compte admin. ✨ feat(settings): Ajoute une page globale pour modifier un compte admin. ✨ feat(VaultExtensions): Ajoute des extensions Twig pour Vault.
2025-07-23 09:15:11 +02:00
- "8212:8202" # Mappe le port 8212 de l'hôte au port 8200 du conteneur Vault
volumes:
# Volume pour la persistance des données
- vault_data:/vault
# Volume pour monter notre fichier de configuration
environment:
VAULT_DEV_ROOT_TOKEN_ID: myroot
VAULT_DEV_LISTEN_ADDRESS: 0.0.0.0:8201
VAULT_LOCAL_CONFIG: '{"storage": {"file": {"path": "/vault/file"}}, "listener": [{"tcp": { "address": "0.0.0.0:8200", "tls_disable": true}}], "default_lease_ttl": "168h", "max_lease_ttl": "720h", "ui": true,"disable_mlock": false}'
# Lance Vault en mode serveur avec notre fichier de configuration
cap_add:
- IPC_LOCK
command: "server -dev"
networks:
- mainframe_network # Assignation au réseau commun
# Définition des volumes pour la persistance des données
volumes:
db_data: # Pour la base de données principale de Symfony
minio_data: # Pour le stockage de fichiers MinIO
vault_data: # Pour les données de HashiCorp Vault
# Définition des réseaux
networks:
mainframe_network: # Définition du réseau commun
driver: bridge # Le type de driver le plus courant