⚙️ Développement
Stack Docker complète — Symfony + Next.js + Nginx + MariaDB + Redis
Série : Stack Docker WSL
#5 Stack Docker complète — Symfony + Next.js + Nginx + MariaDB + Redisvous êtes ici
#1 Installer Docker sur WSL Debian#2 Créer une CA locale et gérer ses certificats SSL#3 Configurer un accès SSH sécurisé sur WSL Debian#4 Installer et configurer Traefik v3 avec Docker Rootless#6 Configurer PhpStorm en Remote Development sur WSLArchitecture réseau
Traefik (HTTPS)
↓ traefik-network
Nginx (port 80)
↓ ignis-network
├── /api/* → ignis_php (PHP-FPM)
└── /* → ignis_node (Next.js)
Réseaux :
traefik-network (bridge) → Traefik ↔ Nginx
ignis-network (bridge) → Nginx ↔ PHP ↔ Node (accès internet OK)
ignis-db-network (bridge --internal)→ PHP ↔ MariaDB ↔ Redis (isolé)Pourquoi 3 réseaux ? PHP a besoin d'internet pour Composer — ignis-network n'est pas --internal. MariaDB et Redis n'ont jamais besoin d'internet — ignis-db-network est --internal.
Créer les réseaux Docker
# Réseau public — Traefik ↔ Nginx
docker network create \
--driver bridge \
--subnet 172.247.193.0/24 \
--gateway 172.247.193.254 \
--opt com.docker.network.bridge.name=traefik-br \
traefik-network
# Réseau applicatif — Nginx ↔ PHP ↔ Node
docker network create \
--driver bridge \
--subnet 172.247.194.0/24 \
--gateway 172.247.194.254 \
--opt com.docker.network.bridge.name=ignis-br \
ignis-network
# Réseau données — PHP ↔ MariaDB ↔ Redis (isolé)
docker network create \
--driver bridge --internal \
--subnet 172.247.195.0/24 \
--gateway 172.247.195.254 \
--opt com.docker.network.bridge.name=ignis-db-br \
ignis-db-networkStructure du projet
/opt/docker-data/ignis/
├── docker-compose.yml
├── .env
├── backend/ ← code Symfony
├── frontend/ ← code Next.js
└── docker/
├── php/
│ ├── Dockerfile
│ ├── entrypoint.sh
│ ├── conf.d/custom.ini
│ └── php-fpm/zz-custom.conf
├── nginx/
│ ├── Dockerfile
│ ├── nginx.conf
│ └── default.conf
├── node/
│ ├── Dockerfile
│ └── init-nextjs.sh
├── redis/
│ ├── Dockerfile
│ └── config/redis.conf
└── mariadb/
├── Dockerfile
└── config/my.cnfInitialisation automatique
Le script init-ignis.sh crée toute la structure. À lancer une seule fois :
# Donner les droits à admin_docker
sudo sh 01-setup-ignis.sh
# Basculer et initialiser
sudo machinectl shell admin_docker@
sh /opt/docker-data/init-ignis.shConfiguration .env
cp /opt/docker-data/ignis/.env.example /opt/docker-data/ignis/.env
nano /opt/docker-data/ignis/.envCOMPOSE_PROJECT_NAME=ignis
DOMAIN_NAME=ignis-fox.fr
MYSQL_ROOT_PASSWORD=mot_de_passe_fort
MYSQL_DATABASE=ignis
MYSQL_USER=ignis_user
MYSQL_PASSWORD=mot_de_passe_db
REDIS_PASSWORD=mot_de_passe_redis
APP_ENV=dev
APP_SECRET=chaine_aleatoire_32_caracteres
JWT_PASSPHRASE=passphrase_jwtGénérer des valeurs sécurisées openssl rand -hex 32 pour APP_SECRET
openssl rand -base64 24 pour les mots de passe
Permissions
À lancer avec sudo après le premier démarrage des conteneurs :
sudo sh /opt/docker-data/ignis/setup-permissions.sh| Dossier | Propriétaire | Mode | Pourquoi |
|---|---|---|---|
backend/ | admin_docker:developers | 2775 | IDE + www-data écrit var/ |
backend/var/ | www-data:developers | 2775 | PHP runtime files |
frontend/ | admin_docker:developers | 2775 | IDE + node écrit |
docker/ | admin_docker:developers | 2775 | IDE modifie les configs |
.env | admin_docker:developers | 660 | Secrets — non lisible par autres |
Démarrage de la stack
cd /opt/docker-data/ignis
docker compose up -d
# Suivre les logs du premier démarrage
docker compose logs -f ignis_php
docker compose logs -f ignis_nodePremier démarrage PHP installe Symfony + bundles (2-3 min). Node installe les dépendances npm. Les démarrages suivants sont quasi instantanés.
✅ Vérification
docker compose ps
# Tous les services doivent être "Up (healthy)"Migrations et fixtures
# Générer la migration depuis les entités
docker compose exec ignis_php php bin/console make:migration
# Appliquer les migrations
docker compose exec ignis_php php bin/console doctrine:migrations:migrate
# Charger les données de test
docker compose exec ignis_php php bin/console doctrine:fixtures:loadCommandes utiles
docker compose up -d # Démarrer
docker compose down # Arrêter
docker compose down -v # Arrêter + supprimer volumes (⚠️ efface la BDD)
# Shells
docker compose exec ignis_php sh
docker compose exec ignis_mariadb mariadb -u ignis_user -p ignis
# Symfony
docker compose exec ignis_php php bin/console cache:clear
docker compose exec ignis_php php bin/console make:entity
docker compose exec ignis_php php bin/console debug:router
# Rebuild après modif Dockerfile
docker compose build ignis_php
docker compose up -d ignis_phpErreurs fréquentes
| Erreur | Cause | Solution |
|---|---|---|
vendor/autoload.php not found | Composer pas encore terminé | Attendre la fin des logs PHP |
Connection refused MariaDB | MariaDB pas encore prête | L'entrypoint attend automatiquement |
next: not found | node_modules absent ou corrompu | Supprimer frontend/node_modules et redémarrer |
| Page blanche Next.js | Erreur de compilation | Voir docker compose logs ignis_node |
| No route found Symfony | Routes non chargées | Vérifier config/routes.yaml et php bin/console debug:router |