La mise en place de Laravel avec un serveur Nginx et une base de données MySQL à l’aide de Docker Compose est une approche moderne et efficace pour le développement web. Cette méthode offre un environnement de développement isolé, reproductible et facile à gérer. Dans cette explication détaillée, nous allons explorer les étapes nécessaires pour configurer ce stack technologique.
Docker Compose et son rôle dans le développement web:
Docker Compose est un outil qui permet de définir et de gérer des applications Docker multi-conteneurs. Il utilise un fichier YAML pour configurer les services, les réseaux et les volumes, offrant ainsi une solution simple pour orchestrer des environnements de développement complets. Grâce à Docker Compose, vous pouvez définir tous les aspects de votre infrastructure dans un seul fichier, facilitant ainsi la collaboration et le déploiement.

Configuration du fichier docker-compose.yml:
Le fichier docker-compose.yml
est au cœur de cette configuration. Il définit les services nécessaires, les réseaux, et les volumes pour votre application Laravel. Voici un exemple de configuration de base :
yamlversion: '3'
services:
app:
image: laravel:latest
container_name: my-laravel-app
volumes:
- ./app:/var/www/html
depends_on:
- db
networks:
- my_network
db:
image: mysql:latest
container_name: my-mysql-db
environment:
MYSQL_DATABASE: laravel_db
MYSQL_ROOT_PASSWORD: root_password
MYSQL_USER: laravel_user
MYSQL_PASSWORD: user_password
volumes:
- ./mysql_data:/var/lib/mysql
networks:
- my_network
networks:
my_network:
driver: bridge
Explication de la configuration Docker Compose:
-
Service Laravel (app):
image
: Spécifie l’image Docker à utiliser pour le service Laravel. Vous pouvez utiliser une image officielle Laravel ou créer la vôtre.container_name
: Définit le nom du conteneur pour une référence facile.volumes
: Montre le chemin vers le code source Laravel local et le répertoire dans le conteneur où il sera hébergé.depends_on
: Indique que le service dépend du service de base de données.networks
: Connecte le service au réseau spécifié.
-
Service de base de données MySQL (db):
image
: Utilise l’image officielle MySQL.container_name
: Attribue un nom au conteneur MySQL.environment
: Configure les variables d’environnement pour définir le nom de la base de données, le mot de passe root, le nom d’utilisateur, et le mot de passe de l’utilisateur Laravel.volumes
: Associe le répertoire local pour stocker les données MySQL.networks
: Connecte le service au même réseau que le service Laravel.
-
Réseau (networks):
- Définit un réseau personnalisé pour que les services puissent communiquer entre eux.
Configuration du serveur Nginx:
Pour servir votre application Laravel via Nginx, vous pouvez utiliser un fichier de configuration Nginx. Créez un fichier nginx.conf
avec le contenu suivant :
nginxserver { listen 80; server_name my-laravel-app.local; root /var/www/html/public; index index.php index.html index.htm; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass app:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } error_log /var/log/nginx/error.log; access_log /var/log/nginx/access.log; }
Explication de la configuration Nginx:
-
listen 80: Définit le port sur lequel Nginx écoutera les connexions HTTP.
-
server_name: Spécifie le nom du serveur. Dans cet exemple, il est défini sur
my-laravel-app.local
, mais vous devriez l’ajouter à votre fichier hosts pour qu’il pointe vers l’adresse IP du conteneur Nginx. -
root: Indique le répertoire racine de l’application Laravel.
-
index: Définit les fichiers index pris en charge.
-
location /: Configure les règles de redirection pour les URL.
-
location ~ .php$: Gère les requêtes PHP et les redirige vers le service Laravel.
-
error_log et access_log: Définissent les fichiers journaux d’erreurs et d’accès pour Nginx.
Exécution de l’environnement Docker:
Une fois que vous avez configuré les fichiers docker-compose.yml
et nginx.conf
, exécutez les commandes suivantes pour démarrer l’environnement Docker :
bashdocker-compose up -d
Cette commande va construire les images Docker, créer les conteneurs et démarrer l’ensemble de l’infrastructure.
Installation des dépendances Laravel et configuration de la base de données:
Accédez au conteneur Laravel en utilisant la commande suivante :
bashdocker exec -it my-laravel-app bash
À l’intérieur du conteneur, exécutez les commandes suivantes pour installer les dépendances Laravel et configurer la base de données :
bashcomposer install
cp .env.example .env
php artisan key:generate
php artisan migrate
Accès à l’application:
Ouvrez votre navigateur et accédez à l’URL définie dans le fichier de configuration Nginx, par exemple, http://my-laravel-app.local
. Vous devriez voir votre application Laravel fonctionnant avec Nginx et utilisant la base de données MySQL via Docker Compose.
Conclusion:
En résumé, la mise en place de Laravel avec un serveur Nginx et une base de données MySQL à l’aide de Docker Compose offre un environnement de développement puissant et portable. Cette approche facilite la gestion des dépendances, la configuration de l’infrastructure, et assure une isolation totale entre les différents services. En adoptant cette méthode, les développeurs peuvent bénéficier d’un processus de développement plus fluide et d’une gestion plus efficace de leur stack technologique.
Plus de connaissances
Bien sûr, plongeons davantage dans les détails de chaque composant de cette configuration Laravel avec Nginx et MySQL à l’aide de Docker Compose.
Docker Compose:
Docker Compose simplifie la gestion des conteneurs Docker en permettant la définition de tous les services, réseaux et volumes nécessaires dans un seul fichier YAML. Cela favorise la portabilité des applications et facilite le partage de configurations entre les membres de l’équipe de développement.
-
version ‘3’: Indique la version de la syntaxe Docker Compose utilisée.
-
services: C’est la section principale où chaque service nécessaire est défini. Dans notre cas, nous avons deux services – le service Laravel (
app
) et le service MySQL (db
). -
app service (Laravel):
-
image: Spécifie l’image Docker à utiliser. Vous pouvez utiliser l’image officielle Laravel, ou créer la vôtre selon les besoins spécifiques du projet.
-
container_name: Attribue un nom au conteneur pour une identification facile.
-
volumes: Montre le chemin local vers le code source Laravel et le répertoire dans le conteneur où il sera hébergé. Cela permet des modifications locales en temps réel.
-
depends_on: Indique que ce service dépend du service de base de données (
db
), garantissant ainsi que la base de données est prête avant que l’application ne démarre. -
networks: Connecte le service au réseau personnalisé (
my_network
) pour faciliter la communication entre les services.
-
-
db service (MySQL):
-
image: Utilise l’image officielle MySQL.
-
container_name: Donne un nom au conteneur MySQL.
-
environment: Configure les variables d’environnement, définissant ainsi le nom de la base de données, le mot de passe root, le nom d’utilisateur et le mot de passe de l’utilisateur Laravel.
-
volumes: Associe le répertoire local pour stocker les données MySQL, assurant ainsi la persistance des données entre les redémarrages du conteneur.
-
networks: Connecte le service au réseau commun pour la communication avec le service Laravel.
-
-
networks: Cette section définit un réseau personnalisé (
my_network
) utilisé par les deux services. Cela permet une communication efficace entre eux.
Configuration Nginx:
Le fichier nginx.conf
est crucial pour le serveur web Nginx. Il prend en charge la configuration du serveur virtuel qui dirigera les requêtes HTTP vers l’application Laravel.
-
listen 80: Spécifie le port sur lequel Nginx écoute les connexions HTTP, le port standard pour les connexions non sécurisées.
-
server_name: Définit le nom du serveur. Dans notre cas,
my-laravel-app.local
. Pour que cela fonctionne, vous devez ajouter cette entrée dans votre fichier hosts avec l’adresse IP du conteneur Nginx. -
root: Indique le répertoire racine de l’application Laravel, pointant vers le répertoire public.
-
index: Définit les fichiers index pris en charge, dans cet exemple, il s’agit de
index.php
,index.html
, etindex.htm
. -
location /: Configure les règles de redirection pour les URL. La directive
try_files
permet de tester différents chemins avant de renvoyer une erreur. -
location ~ .php$: Gère les requêtes PHP en les redirigeant vers le service Laravel. Le bloc
fastcgi_pass
pointe vers le service Laravel (app
) sur le port 9000, où PHP-FPM est généralement en écoute. -
error_log et access_log: Définissent les fichiers journaux d’erreurs et d’accès pour Nginx, facilitant le suivi des problèmes et l’analyse des journaux.
Exécution de l’environnement Docker:
La commande docker-compose up -d
est utilisée pour construire les images Docker, créer les conteneurs et démarrer l’ensemble de l’infrastructure. L’option -d
permet d’exécuter les conteneurs en arrière-plan.
Installation des dépendances Laravel et configuration de la base de données:
Une fois les conteneurs en cours d’exécution, nous accédons au conteneur Laravel avec docker exec -it my-laravel-app bash
. Cela ouvre un terminal interactif dans le conteneur.
-
composer install: Installe les dépendances PHP définies dans le fichier
composer.json
. -
cp .env.example .env: Copie le fichier
.env.example
pour créer le fichier de configuration.env
. Ce dernier est utilisé pour définir les paramètres spécifiques à l’environnement, tels que les informations de la base de données. -
php artisan key:generate: Génère une clé d’application Laravel unique.
-
php artisan migrate: Exécute les migrations pour créer les tables de base de données spécifiées dans le code Laravel.
Accès à l’application:
Après avoir suivi ces étapes, l’application Laravel devrait être accessible via l’URL configurée dans le fichier Nginx. Assurez-vous que l’adresse utilisée correspond à celle définie dans server_name
et qu’elle est résolue correctement dans votre système.
En conclusion, cette configuration Docker Compose offre un moyen robuste de développer des applications Laravel avec Nginx et MySQL. Elle facilite la gestion des dépendances, assure la portabilité des applications, et offre une isolation entre les services. L’utilisation de conteneurs Docker rend le déploiement et la collaboration plus simples, tout en garantissant une cohérence entre les environnements de développement. Ce stack technologique modernisé offre une base solide pour le développement web avec Laravel.