Files
ludikevent_crm/docker-compose.yml
Serreau Jovann 662bb0bcc6 ```
[+] chore(root): Initialise le projet avec une structure de base

Crée la structure de base du projet Symfony, incluant les entités,
services, formulaires, et templates nécessaires pour la gestion des
comptes utilisateurs, la sécurité, et la gestion des mots de passe
oubliés. Ajoute également la configuration pour la gestion des assets
avec Vite, la gestion des fichiers avec Flysystem, et la
génération de sitemaps.
```
2025-12-11 17:22:26 +01:00

178 lines
5.9 KiB
YAML

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: crm_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:
- crm_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: crm_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:
- crm_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: crm_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:
- crm_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: crm_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:
- crm_network # Assignation au réseau commun
# --- Service Base de Données principale (PostgreSQL) ---
db:
image: postgres:16-alpine
container_name: crm_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:
- crm_network # Assignation au réseau commun
# --- Service Cache/Messenger (Redis) ---
redis:
image: redis:7-alpine
container_name: crm_redis
networks:
- crm_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: crm_mailhog
ports:
# Port 1025 pour le serveur SMTP factice
- "1025:1025"
# Port 8025 pour l'interface web de MailHog
- "8025:8025"
networks:
- crm_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: crm_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:
- crm_network # Assignation au réseau commun
# --- Service de Gestion des Secrets (HashiCorp Vault) ---
vault:
image: hashicorp/vault:latest
container_name: crm_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
- "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:
- crm_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:
crm_network: # Définition du réseau commun
driver: bridge # Le type de driver le plus courant