Avancé65 min45 XP
Objectifs de cette leçon
- Conteneuriser une application Laravel
- Configurer PHP-FPM et Nginx dans Docker
- Gérer la base de données MySQL conteneurisée
Dockeriser Laravel 🐘
Architecture d'une stack Laravel Dockerisée
┌─────────────────────────────────────────────────┐ │ Docker Compose │ ├─────────────────┬───────────────┬────────────────┤ │ Nginx │ PHP-FPM │ MySQL │ │ (port 80) │ (port 9000) │ (port 3306) │ │ │ │ │ │ Sert les │ Exécute │ Base de │ │ fichiers │ le code │ données │ │ statiques │ PHP │ │ └────────┬────────┴───────┬───────┴───────┬────────┘ │ │ │ └────────────────┼───────────────┘ │ Réseau bridge
Structure du projet
laravel-docker/ ├── docker/ │ ├── nginx/ │ │ └── default.conf │ └── php/ │ └── Dockerfile ├── src/ # Code Laravel │ ├── app/ │ ├── routes/ │ ├── database/ │ └── ... ├── docker-compose.yml ├── .env └── .dockerignore
docker-compose.yml
version: '3.8' services: # Nginx - Sert les fichiers statiques nginx: image: nginx:alpine ports: - "80:80" volumes: - ./src:/var/www/html - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf depends_on: - php networks: - laravel-network # PHP-FPM - Exécute le code Laravel php: build: context: . dockerfile: docker/php/Dockerfile volumes: - ./src:/var/www/html depends_on: - mysql networks: - laravel-network # MySQL - Base de données mysql: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD} MYSQL_DATABASE: ${DB_DATABASE} MYSQL_USER: ${DB_USERNAME} MYSQL_PASSWORD: ${DB_PASSWORD} ports: - "3306:3306" volumes: - mysql-data:/var/lib/mysql networks: - laravel-network # Composer - Installation des dépendances composer: image: composer:latest volumes: - ./src:/app command: install --no-dev --optimize-autoloader networks: - laravel-network volumes: mysql-data: networks: laravel-network: driver: bridge
Dockerfile PHP-FPM
FROM php:8.2-fpm-alpine # Installer les extensions nécessaires RUN apk add --no-cache \ libzip-dev \ oniguruma-dev \ libpng-dev \ icu-dev \ && docker-php-ext-install \ pdo_mysql \ mbstring \ zip \ bcmath \ gd \ intl # Installer Composer COPY --from=composer:latest /usr/bin/composer /usr/bin/composer WORKDIR /var/www/html # Copier les fichiers d'abord COPY . . # Installer les dépendances Laravel RUN composer install --no-dev --optimize-autoloader # Permissions RUN chown -R www-data:www-data /var/www/html/storage /var/www/html/bootstrap/cache EXPOSE 9000 CMD ["php-fpm"]
Configuration Nginx
# docker/nginx/default.conf server { listen 80; server_name localhost; root /var/www/html/public; index index.php index.html; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { fastcgi_pass php:9000; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; include fastcgi_params; } location ~ /\. { deny all; } }
.env
APP_NAME=Laravel APP_ENV=local APP_KEY=base64:xxx APP_DEBUG=true APP_URL=http://localhost DB_CONNECTION=mysql DB_HOST=mysql DB_PORT=3306 DB_DATABASE=laravel_db DB_USERNAME=laravel_user DB_PASSWORD=secret DB_ROOT_PASSWORD=rootsecret
Commandes essentielles
# Démarrer la stack docker compose up -d # Installer les dépendances docker compose run --rm composer install # Créer la base de données docker compose run --rm php artisan migrate # Générer la clé APP_KEY docker compose run --rm php artisan key:generate # Créer un controller docker compose run --rm php artisan make:controller UserController # Voir les logs docker compose logs -f nginx docker compose logs -f php # Accéder au shell PHP docker compose exec php sh
Stockage et cache
# Créer le lien symbolique de stockage docker compose run --rm php artisan storage:link # Vider le cache docker compose run --rm php artisan cache:clear docker compose run --rm php artisan config:clear docker compose run --rm php artisan route:clear
Exercices 🎯
- Stack complète : Créez une stack Laravel + MySQL + Nginx avec Docker Compose.
- Migrations : Exécutez les migrations dans le conteneur.
- API : Créez une route API test et vérifiez-la avec
curl. - Stockage : Configurez le stockage des fichiers uploadés avec un volume.
Prochaine leçon : Dockeriser React et Next.js.
Dockeriser Laravel
Cliquez sur chaque étape📄Code source
Application Laravel avec Eloquent, routes, contrôleurs
Technologie
Laravel 11 + PHP-FPM + Nginx1/5