feat: Initialisation du projet mainframe
Ajout de la configuration docker, gitlab CI et autres fichiers. Suppression des fichiers compose et importmap obsolètes.
This commit is contained in:
184
docker-compose.yml
Normal file
184
docker-compose.yml
Normal file
@@ -0,0 +1,184 @@
|
||||
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: ecosplay_php
|
||||
restart: unless-stopped
|
||||
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
|
||||
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: ecosplay_messenger_worker
|
||||
restart: unless-stopped
|
||||
# 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: ecosplay_bun
|
||||
restart: unless-stopped
|
||||
# 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: ecosplay_caddy
|
||||
restart: unless-stopped
|
||||
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: ecosplay_db
|
||||
restart: unless-stopped
|
||||
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: ecosplay_redis
|
||||
restart: unless-stopped
|
||||
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: ecosplay_mailhog
|
||||
restart: unless-stopped
|
||||
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: ecosplay_minio
|
||||
restart: unless-stopped
|
||||
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: ecosplay_vault
|
||||
restart: unless-stopped
|
||||
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
|
||||
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
|
||||
Reference in New Issue
Block a user