```
[+] 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. ```
This commit is contained in:
177
docker-compose.yml
Normal file
177
docker-compose.yml
Normal file
@@ -0,0 +1,177 @@
|
||||
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
|
||||
Reference in New Issue
Block a user