GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Dockeriser Laravel avec Nginx MySQL et Docker Compose sur Ubuntu 18.04 LTS

Laravel est un framework PHP gratuit et open source qui implémente le modèle de conception MVC (Model-View-Controller). Il est conçu avec une facilité d'utilisation et permet aux développeurs de créer des applications simples et complexes en un rien de temps. Laravel a été créé par Taylor Otwell en 2011, dans le but de fournir une alternative avancée au framework CodeIgniter (CI). En 2011, Laravel a publié les versions 1 et 2, et la dernière version 5.6 est livrée avec des fonctionnalités supplémentaires et améliorées telles que la prise en charge de la ligne de commande (CLI) nommée "artisan", la prise en charge de différents systèmes de base de données, des améliorations de routage, etc.

Dans ce guide, nous allons vous montrer comment Dockeriser le projet Laravel avec PHP-FPM, la base de données MySQL et le serveur Web Nginx à l'aide de Docker Compose sur le serveur Ubuntu 18.04. Nous allons créer une nouvelle image docker pour le projet Laravel, puis créer le script docker-compose.yml qui contient certains services, notamment l'application/Laravel elle-même, le serveur Web Nginx et la base de données MySQL.

Prérequis

  • Ubuntu 18.04
  • Privilèges root

Ce que nous allons faire :

  1. Installer Docker et Docker Compose
  2. Télécharger Laravel et installer les dépendances
  3. Dockeriser le projet Laravel
    • Définir le service d'application Laravel
    • Définir le service HTTP Nginx
    • Définir le service de base de données MySQL
    • Créer un hôte virtuel Nginx pour Laravel
    • Créer Dockerfile pour l'application Laravel
  4. Créer le projet Laravel
  5. Post-installation de Laravel

Étape 1 - Installer Docker et Docker Compose

Tout d'abord, nous allons installer les packages Docker et Docker Compose sur le système Ubuntu. Et nous utiliserons les packages Docker du référentiel officiel Ubuntu.

Avant d'aller plus loin, nous devons mettre à jour les référentiels sur le système Ubuntu. Simplement en exécutant la commande suivante.

mise à jour sudo apt

Installez maintenant les packages Docker et Docker Compose à l'aide de la commande apt ci-dessous.

sudo apt install docker.io -y
sudo apt install docker-compose -y

Les packages Docker et Docker Compose doivent maintenant être installés sur le système, vérifiez-le à l'aide des commandes suivantes.

version docker
version docker-compose

En conséquence, vous obtiendrez la version de Docker et Docker Compose sur le système.

Ensuite, nous devons affecter l'utilisateur non root au groupe docker afin d'exécuter le conteneur Docker pour les utilisateurs non root.

Dans ce cas, nous allons ajouter l'utilisateur appelé 'hakase' au groupe docker en exécutant la commande suivante.

usermod -a -G docker hakase

Et après cela, connectez-vous au shell utilisateur 'hakase' et exécutez la commande docker 'hello-world'.

su - hakase
docker run hello-world

Le message "Hello World" de Docker s'affiche maintenant et l'installation de Docker est terminée.

Étape 2 - Télécharger Laravel et installer les dépendances

Dans cette étape, nous allons télécharger le framework Web Laravel dans le répertoire d'accueil "hakase", puis installer les dépendances Laravel à l'aide de l'image docker PHP "composer". Assurez-vous donc que vous êtes connecté au serveur en tant qu'utilisateur non root.

Téléchargez le projet Laravel dans le répertoire 'myapp' et allez-y.

git clone https://github.com/laravel/laravel.git myapp/
cd myapp/

Exécutez maintenant la commande docker suivante afin d'installer les dépendances Laravel.

docker run --rm -v $(pwd):/app composer install

Avec la commande ci-dessus, nous allons exécuter un nouveau conteneur docker temporaire et monter le répertoire du projet 'myapp' dans le répertoire '/app' du conteneur. Le conteneur est basé sur l'image docker 'composer' et nous installons les dépendances Laravel à l'aide de la commande 'composer' dans ce conteneur temporaire.

Une fois l'installation des dépendances Laravel terminée, nous devons changer le propriétaire du répertoire 'myapp' en notre propre utilisateur en utilisant la commande sudo ci-dessous.

sudo chown -R $USER:$USER ~/myapp

Étape 3 - Dockeriser le projet Laravel

Après avoir téléchargé Laravel et installé ses dépendances, nous allons créer un nouveau script docker-compose.yml et créer un nouveau Dockerfile pour le projet Laravel.

cd myapp/
vim docker-compose.yml

- Définir le service d'application Laravel

Tout d'abord, nous allons définir le projet Laravel lui-même et créer l'image docker du projet Laravel à l'aide du Dockerfile.

Collez-y le script de composition docker.

version :'3'
services :

  #Laravel App
  app :
    build :
      contexte :.
      dockerfile :Dockerfile
    image :hakase-labs/laravel
    nom_conteneur :app
    redémarrage :sauf si arrêté
    tty :vrai
    environnement :
      SERVICE_NAME :app
      SERVICE_TAGS :dev
    working_dir :/var/www/html
    volumes :
      - ./:/var/www/html
    réseaux :
      - mynet

Détails du service de conteneur Laravel :

  • Le service de conteneur Laravel sera nommé "app". Il est basé sur notre image docker personnalisée qui sera créée avec notre "Dockerfile", et la nouvelle image sera nommée "hakase-labs/laravel".
  • Nous voulons monter le répertoire du projet "myapp" sur "/var/www/html" à l'intérieur du service de conteneur.
  • Nous utilisons le réseau docker personnalisé pour notre configuration, le réseau sera nommé "mynet".

- Définir le service HTTP Nginx

Nous allons maintenant définir le service de conteneur nginx.

Collez la configuration suivante après la ligne de service de conteneur 'app'.

  #Nginx Service
  nginx :
    image :nginx:alpine
    container_name :nginx
    redémarrage :sauf si arrêté
    tty :vrai
    ports :
      - "80:80"
      - "443:443"
    volumes :
      - ./:/var/www/html
      - ./nginx/conf .d/:/etc/nginx/conf.d/
      - ./nginx/ssl/:/etc/nginx/ssl/
    réseaux :
      - mynet

Détails de configuration du service de conteneur nginx :

  • Nous souhaitons créer un nouveau conteneur nommé "nginx" basé sur l'image docker "nginx:alpine".
  • Le service de conteneur ouvrira les ports HTTP et HTTPS.
  • Le conteneur montera trois volumes différents. Le répertoire du projet 'myapp' dans le répertoire '/var/www/html', la configuration de l'hôte virtuel nginx 'nginx/conf.d/' dans le répertoire '/etc/nginx/conf.d' et les fichiers de certificat de montage ' nginx/ssl/' dans le répertoire '/etc/nginx/ssl' sur le conteneur.
  • Le service de conteneur utilisera le même réseau appelé "mynet".

- Définir le service de base de données MySQL

Et le dernier, nous définissons le service de base de données MySQL.

Collez la configuration suivante après la ligne de service de conteneur 'nginx'.

  #MySQL Service
  db :
    image :mysql:5.7
    nom_du_conteneur :db
    redémarrage :sauf si arrêté
    tty :vrai
    ports :
      - "3306:3306"
    environnement :
      MYSQL_DATABASE :laraveldb
      MYSQL_USER :laravel
      MYSQL_PASSWORD :laravelpassworddb
      MYSQL_ROOT_PASSWORD :rootpasswordmysql volumes :     
      - mysqldata :/var/lib/mysql/
    réseaux :
      - mynet

#Docker Networks
networks :
  mynet :
    pilote :pont
#Volumes
volumes :
  mysqldata :
    pilote :local

Enregistrez et fermez la configuration.

Détails du service de conteneur MySQL :

  • Le service de conteneur MySQL sera nommé 'db', basé sur l'image docker 'mysql:5.7'.
  • Le service 'db' ouvrira le port MySQL par défaut '3306'.
  • Le projet Laravel utilisera la base de données, l'utilisateur et le mot de passe basés sur la variable d'environnement du service 'db'.
  • Le service "db" de MySQL montera le volume nommé "mysqldata" et aura le même réseau "mynet".
  • Et nous définissons le réseau personnalisé 'mynet' avec le pilote 'bridge', et le volume 'mysqldata' utilisera le pilote 'local'.

Vous trouverez ci-dessous la configuration "docker-compose.yml" terminée :

version :'3'services :#Laravel App app :build :contexte :. dockerfile :image Dockerfile :hakase-labs/laravel nom_conteneur :redémarrage de l'application :sauf si arrêté tty :vrai environnement :SERVICE_NAME :application SERVICE_TAGS :dev working_dir :/var/www/html volumes : - ./:/var/www/html réseaux :- mynet #Nginx Service nginx :image :nginx:alpine container_name :nginx restart :until-stopped tty : true ports :- "80:80" - "443:443" volumes :- ./:/var/www/html - ./nginx/conf.d/:/etc/nginx/conf.d/ - ./nginx/ssl/:/etc/nginx/ssl/ networks :- mynet #MySQL Service db :image :mysql:5.7 container_name :redémarrage de la base de données :tty à moins d'être arrêté :vrais ports :- "3306:3306" environnement :MYSQL_DATABASE :laraveldb MYSQL_USER :laravel MYSQL_PASSWORD :laravelpassworddb MYSQL_ROOT_PASSWORD :rootpassword volumes mysql :- mysqldata:/var/lib/mysql/ réseaux :- mynet#Docker Networksnetworks :mynet:driver:bridge#Volumesvolumes:mysqldata:pilote :local

- Créer un hôte virtuel Nginx pour Laravel

Dans le répertoire du projet 'myapp', créez un nouveau répertoire nommé 'nginx' qui contiendra deux autres répertoires 'conf.d' et 'ssl'. Créez ensuite une nouvelle configuration d'hôte virtuel nginx 'laravel.conf' dans le répertoire 'conf.d'.

Exécutez la commande suivante.

mkdir -p nginx/{conf.d,ssl}
vim nginx/conf.d/laravel.conf
serveur { écoute 80 ; nom_serveur laravel.hakase-labs.io ; retour 301 https://laravel.hakase-labs.io$request_uri;}serveur { écouter 443 ssl http2; nom_serveur laravel.hakase-labs.io ; certificat_ssl /etc/nginx/ssl/fullchain.pem ; ssl_certificate_key /etc/nginx/ssl/privkey.pem ; # Fichiers journaux pour Debug error_log /var/log/nginx/error.log ; access_log /var/log/nginx/access.log ; # racine du répertoire racine Web Laravel /var/www/html/public; index index.php index.html; location / { try_files $uri $uri/ /index.php?$query_string; gzip_static activé ; } # Requêtes Nginx Pass à l'emplacement PHP-FPM ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; application fastcgi_pass :9000 ; fastcgi_index index.php ; inclure fastcgi_params ; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name ; fastcgi_param PATH_INFO $fastcgi_path_info ; }}

Enregistrez et fermez.

Après cela, copiez votre fichier de certificat ssl dans le répertoire 'nginx/ssl/'.

sudo cp /path/to/ssl/fullchain.pem nginx/ssl/
sudo cp /path/to/ssl/privkey.pem nginx/ssl/

- Créer Dockerfile pour l'application Laravel

Ensuite, créez un nouveau Dockerfile pour le projet Laravel.

Exécutez la commande suivante.

vim Dockerfile

Collez la configuration ci-dessous.

# Définir l'image principaleFROM php:7.2-fpm-alpine# Copier composer.lock et composer.jsonCOPY composer.lock composer.json /var/www/html/# Définir le répertoire de travailWORKDIR /var/www/html# Installer les dépendances supplémentairesRUN apk update &&apk add --no-cache \ build-base shadow vim curl \ php7 \ php7-fpm \ php7-common \ php7-pdo \ php7-pdo_mysql \ php7-mysqli \ php7-mcrypt \ php7-mbstring \ php7- xml \ php7-openssl \ php7-json \ php7-phar \ php7-zip \ php7-gd \ php7-dom \ php7-session \ php7-zlib# Ajouter et activer les extensions PHP-PDORUN docker-php-ext-install pdo pdo_mysqlRUN docker-php-ext-enable pdo_mysql# Installer PHP ComposerRUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer# Supprimer CacheRUN rm -rf /var/cache/apk/*# Ajouter l'UID '1000' à www-dataRUN usermod -u 1000 www- data# Copiez les autorisations de répertoire d'application existantes COPY --chown=www-data:www-data . /var/www/html# Changer l'utilisateur actuel en wwwUSER www-data# Expose le port 9000 et démarre le serveur php-fpmEXPOSE 9000CMD ["php-fpm"]

Enregistrez et fermez la configuration.

Et nous sommes prêts à créer le projet Laravel "myapp" et à exécuter les services de conteneur que nous avons définis.

Étape 4 - Construire Laravel avec les services Nginx et MySQL

Créez l'image docker personnalisée pour notre projet Laravel à l'aide de la commande suivante.

construction docker-compose

Puis relancez la commande suivante.

docker-composer jusqu'à -d

Il téléchargera toutes les images Docker dont nous avons besoin, puis créera des services de conteneur basés sur la configuration "docker-compose.yml".

Une fois terminé, vérifiez à l'aide de la commande docker-compose ci-dessous.

docker-composer ps

Et par conséquent, vous obtiendrez les trois services de conteneurs opérationnels. L''application' qui s'exécute sur le port par défaut '9000' PHP-FPM, le service 'nginx' est sur les ports HTTP et HTTPS, et le service MySQL 'db' sur le port MySQL par défaut '3306'.

Après cela, vérifiez à nouveau toutes les images Docker disponibles et les ports ouverts sur le système.

images de composition docker
netstat -plntu

Vous obtiendrez l'image docker personnalisée 'hakase-labs/laravel' dans la liste, et les ports HTTP et HTTPS sont à l'état 'LISTEN'.

Étape 5 - Post-installation de Laravel

Jusqu'à ce stade, le projet Laravel est opérationnel en tant que conteneur Docker. Et maintenant, nous allons créer un nouveau fichier '.env', générer la clé et migrer les données Laravel à l'aide de la ligne de commande Laravel 'artisan'.

Copiez l'exemple de fichier '.env' et modifiez-le dans le conteneur.

cp .env.example .env
docker-compose exec app vim .env

Modifiez la configuration de la base de données comme ci-dessous.

DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=laraveldb
DB_USERNAME=laravel
DB_PASSWORD=laravelpassworddb

Enregistrez et fermez.

Ensuite, générez la clé d'application Laravel et effacez la configuration du cache.

docker-compose exec app php artisan key:generate
docker-compose exec app php artisan config:cache

Après cela, migrez la base de données à l'aide de la commande suivante.

docker-compose exec app php artisan migrate

Assurez-vous qu'il n'y a pas d'erreur.

Ouvrez maintenant votre navigateur Web et saisissez le nom de domaine de votre projet.

http://laravel.hakase-labs.io/

Et vous serez redirigé vers la connexion HTTPS sécurisée et la page d'accueil par défaut de Laravel s'affichera comme ci-dessous.

Enfin, le projet Dockerizing de Laravel avec le serveur Web Nginx et la base de données MySQL a été achevé avec succès.


Ubuntu
  1. Ubuntu 20.04 :WordPress avec l'installation de Nginx

  2. Configurer l'environnement de développement Ruby on Rails avec Docker et Docker Compose sur Ubuntu

  3. Dockeriser Wordpress avec Nginx et PHP-FPM sur Ubuntu 16.04

  4. Comment installer Phorum avec Nginx sur Ubuntu 18.04 LTS

  5. Comment installer Nginx avec PHP5 et MySQL sur Ubuntu 11.10

Hébergement virtuel avec Proftpd et MySQL (incl. Quota) sur Ubuntu 8.04 LTS

Installation de Nginx avec PHP5 (et PHP-FPM) et le support MySQL (LEMP) sur Ubuntu 12.04 LTS

Installation de Nginx avec PHP5 (et PHP-FPM) et le support MySQL (LEMP) sur Ubuntu 13.04

Installation de Nginx avec prise en charge de PHP5 et MySQL sur Ubuntu 8.10

Comment installer et configurer Laravel avec Docker Compose sur Ubuntu 22.04

Comment installer et configurer Laravel avec Docker Compose sur Ubuntu 20.04