DevOps

Configuration Laravel avec Docker Compose

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 :

yaml
version: '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:

  1. 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é.
  2. 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.
  3. 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 :

nginx
server { 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:

  1. listen 80: Définit le port sur lequel Nginx écoutera les connexions HTTP.

  2. 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.

  3. root: Indique le répertoire racine de l’application Laravel.

  4. index: Définit les fichiers index pris en charge.

  5. location /: Configure les règles de redirection pour les URL.

  6. location ~ .php$: Gère les requêtes PHP et les redirige vers le service Laravel.

  7. 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 :

bash
docker-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 :

bash
docker 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 :

bash
composer 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, et index.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.

Bouton retour en haut de la page