GNU/Linux >> Tutoriels Linux >  >> Linux

Comment déployer une application PHP avec Nginx et MySQL à l'aide de Docker et Docker Compose

Docker est un outil de conteneurisation open source qui vous permet de créer, déployer et exécuter des applications à l'aide de conteneurs. Les conteneurs vous permettent de conditionner une application avec toutes les parties requises et de la déployer en tant que package unique. Les conteneurs sont portables et vous pouvez les déployer n'importe où. Un conteneur offre aux développeurs un environnement de travail uniforme et rationalisé qui peut être facilement partagé.

Dans ce guide, nous allons vous montrer comment déployer une application PHP avec Nginx et MySQL en utilisant Docker et Docker Compose.

Prérequis

  • Un nouveau serveur Ubuntu 20.04 sur la plate-forme cloud Atlantic.Net
  • Un mot de passe root configuré sur votre serveur

Étape 1 - Créer un serveur cloud Atlantic.Net

Tout d'abord, connectez-vous à votre serveur Atlantic.Net Cloud. Créez un nouveau serveur en choisissant Ubuntu 20.04 comme système d'exploitation avec au moins 4 Go de RAM. Connectez-vous à votre serveur cloud via SSH et connectez-vous à l'aide des informations d'identification mises en évidence en haut de la page.

Une fois que vous êtes connecté à votre serveur Ubuntu 20.04, exécutez la commande suivante pour mettre à jour votre système de base avec les derniers packages disponibles.

apt-get update -y

Étape 2 - Installer Docker et Docker Compose

Tout d'abord, installez les dépendances requises à l'aide de la commande suivante :

apt-get install apt-transport-https ca-certificates curl tree software-properties-common -y

Ensuite, ajoutez le référentiel Docker à l'aide de la commande suivante :

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"

Ensuite, installez Docker et Docker Compose avec la commande suivante :

apt-get install docker-ce docker-compose -y

Une fois que vous avez terminé, vous pouvez passer à l'étape suivante.

Étape 3 - Structure du répertoire

Pour les besoins de ce didacticiel, nous utiliserons la structure de répertoires suivante :

/root/docker-project/├── docker-compose.yml├── nginx│   ├── default.conf│   └── Dockerfile├── php│   └── Dockerfile└── www └── html └── index.php

Étape 4 - Créer un conteneur Nginx

Avant de commencer, vous devrez créer et lancer un conteneur Nginx pour héberger l'application PHP.

Commencez par créer un répertoire pour votre projet avec la commande suivante :

mkdir ~/docker-project

Ensuite, changez le répertoire de votre projet et créez un fichier docker-compose.yml pour lancer le conteneur Nginx.

cd ~/docker-projectnano docker-compose.yml

Ajoutez les lignes suivantes :

 nginx :image :nginx:latest container_name :nginx-container ports :- 80:80 

Enregistrez et fermez le fichier lorsque vous avez terminé.

Le fichier ci-dessus téléchargera la dernière image Nginx, créera un conteneur nginx et l'exposera sur le port 80.

Ensuite, lancez le conteneur Nginx avec la commande suivante :

docker-composer jusqu'à -d

Vous pouvez vérifier le conteneur en cours d'exécution avec la commande suivante :

docker ps

Vous devriez voir le résultat suivant :

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESc6641e4d5bbf nginx:latest "/docker-entrypoint.…" Il y a 5 secondes Jusqu'à 3 secondes 0.0.0.0:80->80/tcp, :::80->80/tcp nginx- conteneur

Maintenant, ouvrez votre navigateur Web et accédez à votre conteneur Nginx en utilisant l'URL http://your-server-ip . Vous devriez voir la page de test Nginx sur l'écran suivant :

Étape 5 - Créer un conteneur PHP

Commencez par créer un nouveau répertoire dans votre projet avec la commande suivante :

mkdir -p ~/docker-project/www/html

Ensuite, créez un fichier index.php pour vérifier votre version de PHP.

nano ~/docker-project/www/html/index.php

Ajoutez les lignes suivantes :

   Bonjour le monde !   

Bonjour le monde !

Enregistrez et fermez le fichier, puis créez un répertoire pour Nginx dans le répertoire de votre projet :

mkdir ~/docker-project/nginx

Ensuite, créez un fichier de configuration par défaut Nginx pour exécuter votre application PHP :

nano ~/docker-project/nginx/default.conf

Ajoutez les lignes suivantes :

serveur { écouter 80 default_server ; racine /var/www/html; index index.html index.php; jeu de caractères utf-8 ; location / { try_files $uri $uri/ /index.php?$query_string; } location =/favicon.ico { access_log off ; log_not_found désactivé ; } location =/robots.txt { access_log off ; log_not_found désactivé ; } access_log off ; error_log /var/log/nginx/error.log erreur ; sendfile désactivé ; client_max_body_size 100 m ; emplacement ~ .php$ { fastcgi_split_path_info ^(.+.php)(/.+)$; fastcgi_pass php:9000; fastcgi_index index.php ; inclure fastcgi_params ; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name ; fastcgi_intercept_errors désactivé ; fastcgi_buffer_size 16k; fastcgi_buffers 4 16k; } emplacement ~ /.ht { refuser tout ; } } 

Enregistrez et fermez le fichier.

Ensuite, créez un Dockerfile dans le répertoire nginx. Cela copiera le fichier de configuration par défaut de Nginx dans le conteneur Nginx.

nano ~/docker-project/nginx/Dockerfile

Ajoutez les lignes suivantes :

 DE nginx :dernière COPIE ./default.conf /etc/nginx/conf.d/default.conf 

Ensuite, modifiez le fichier docker-compose.yml :

nano ~/docker-project/docker-compose.yml

Supprimez l'ancien contenu et ajoutez le contenu suivant :

---
nginx:
build: ./nginx/
container_name: nginx-container
ports:
- 80:80
links:
- php
volumes:
- ./www/html/:/var/www/html/

php :
image :php:7.0-fpm
container_name :php-container
expose :
– 9 000
volumes :
– ./www/html /:/var/www/html/

 

Enregistrez et fermez le fichier lorsque vous avez terminé.

Le fichier ci-dessus créera un nouveau conteneur php, exposera PHP-FPM sur le port 9000, liera nginx-container à php-container, créera un volume et le montera sur le conteneur afin que tout le contenu soit synchronisé avec le répertoire du conteneur /var/www/html/.

Maintenant, lancez le conteneur avec la commande suivante :

cd ~/docker-projectdocker-compose up -d

Vous pouvez vérifier les conteneurs en cours d'exécution avec la commande suivante :

docker ps

Vous devriez voir le résultat suivant :

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES82c8baf15221 docker-project_nginx "/docker-entrypoint.…" Il y a 23 secondes Jusqu'à 22 secondes 0.0.0.0:80->80/tcp, :::80->80/tcp nginx- container10778c6686d8 php:7.0-fpm "docker-php-entrypoi…" Il y a 25 secondes Jusqu'à 23 secondes 9000/tcp php-container

Maintenant, ouvrez votre navigateur Web et accédez à l'URL http://your-server-ip . Vous devriez voir votre page Hello World :

Ensuite, nous vérifierons si notre volume monté fonctionne ou non. Pour cela, éditez le fichier index.php :

nano ~/docker-project/www/html/index.php

Changez la ligne "Hello World ! Les modifications sont appliquées :

   Bonjour le monde !   

Bonjour le monde ! Les modifications sont appliquées

Maintenant, actualisez votre page Web. Vous devriez voir votre page modifiée à l'écran :

Étape 6 – Créer un conteneur de données

Comme vous pouvez le voir, nous avons monté le répertoire www/html sur nos deux conteneurs, nginx-container et php-container. Cependant, ce n'est pas une bonne méthode. Dans cette section, nous allons créer un conteneur de données séparé pour contenir les données et le lier à tous les autres conteneurs.

Pour cela, éditez le fichier docker-compose.html :

nano ~/docker-project/docker-compose.yml

Effectuez les modifications suivantes :

 nginx :build :./nginx/ container_name :nginx-container ports :- 80:80 links :- php volumes_from :- app-data php :image :php:7.0-fpm container_name :php-container expose :- 9000 volumes_from :- app-data app-data :image :php:7.0-fpm container_name :app-data-container volumes :- ./www/html/:/var/www/html/ commande :"true"

Maintenant, recréez et lancez tous les conteneurs à l'aide de la commande suivante :

cd ~/docker-projectdocker-compose up -d

Maintenant, vérifiez tous les conteneurs en cours d'exécution avec la commande suivante :

docker ps-a

Vous devriez voir le résultat suivant :

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES849315c7ffc0 docker-project_nginx "/docker-entrypoint.…" Il y a 27 secondes Jusqu'à 25 secondes 0.0.0.0:80->80/tcp, :::80->80/tcp nginx- container59a0d7040fd8 php:7.0-fpm "docker-php-entrypoi…" il y a 28 secondes Up 27 secondes 9000/tcp php-containerfbca95944234 php:7.0-fpm "docker-php-entrypoi…" il y a 29 secondes Exited (0) il y a 28 secondes app -data-container

Étape 7 - Créer un conteneur MySQL

Dans cette section, nous allons créer un conteneur de base de données MySQL et le lier à tous les autres conteneurs.

Tout d'abord, vous devrez modifier l'image PHP et installer l'extension PHP pour MySQL afin de vous connecter à la base de données MySQL.

Commencez par créer un répertoire pour PHP avec la commande suivante :

mkdir ~/docker-project/php

Ensuite, créez un Dockerfile pour installer l'extension PHP :

nano ~/docker-project/php/Dockerfile

Ajoutez les lignes suivantes :

 DEPUIS php:7.0-fpm RUN docker-php-ext-install pdo_mysql 

Enregistrez et fermez le fichier. Ensuite, modifiez le fichier docker-compose.yml pour créer un conteneur MySQL et un conteneur de données MySQL pour contenir la base de données et les tables :

nano ~/docker-project/docker-compose.yml

Effectuez les modifications suivantes :

 nginx :build :./nginx/ container_name :nginx-container ports :- 80:80 liens :- php volumes_from :- app-data php :build :./php/ container_name :php-container expose :- 9 000 liens :- mysql volumes_from :- app-data app-data :image :php:7.0-fpm container_name :app-data-container volumes :- ./www/html/:/var/www/html/ commande :"true" mysql :image :mysql:5.7 container_name :mysql-container volumes_from :- environnement mysql-data :MYSQL_ROOT_PASSWORD :secret MYSQL_DATABASE :mydb MYSQL_USER :myuser MYSQL_PASSWORD :mot de passe mysql-data :image :mysql:5.7 container_name :mysql-data-container volumes :- Commande /var/lib/mysql :"true" 

Enregistrez et fermez le fichier.

Ensuite, modifiez le index.php fichier et apportez quelques modifications pour tester la connexion à la base de données.

nano ~/docker-project/www/html/index.php

Effectuez les modifications suivantes :

   Bonjour le monde !   

Bonjour le monde !

query("SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_TYPE='BASE TABLE'"); $tables =$query->fetchAll(PDO::FETCH_COLUMN); if (empty($tables)) { echo "

Il n'y a pas de tables dans la base de données \"{$database}\".

" ; } else { echo "

La base de données \"{$database}\" contient les tables suivantes :

" ; echo "
    " ; foreach ($tables as $table) { echo "
  • {$table}
  • " ; } echo "
" ; } ?>

Enregistrez et fermez le fichier, puis lancez le conteneur avec la commande suivante :

cd ~/docker-projectdocker-compose up -d

Vérifiez tous les conteneurs en cours d'exécution avec la commande suivante :

docker ps-a

Vous devriez voir le résultat suivant :

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESd3e82747fe0d mysql:5.7 "docker-entrypoint.s…" Il y a 39 secondes Up 38 seconds 3306/tcp, 33060/tcp mysql-container606320e5a7f8 mysql:5.7 "docker-entrypoint.s…" 41 il y a quelques secondes Quitté (0) il y a 39 secondes mysql-data-containerca4f63797d11 docker-project_php "docker-php-entrypoi…" il y a 2 heures Up 2 heures 9000/tcp php-container849315c7ffc0 docker-project_nginx "/docker-entrypoint.…" 2 heures il y a 2 heures 0.0.0.0:80->80/tcp, :::80->80/tcp nginx-containerfbca95944234 php:7.0-fpm "docker-php-entrypoi…" il y a 2 heures Quitté (0) il y a 39 secondes app-data-container

Étape 8 - Vérifier la connexion à la base de données

Maintenant, ouvrez votre navigateur Web et accédez à la page Web à l'adresse http://your-server-ip . Vous devriez voir l'écran suivant :

Comme vous pouvez le voir, il n'y a aucune table dans la base de données mydb.

Cependant, il existe en fait des tables, mais celles-ci ne sont pas visibles par un utilisateur régulier. Si vous voulez les voir, éditez le fichier index.php et changez $user à "root" et $password à "secret"

nano ~/docker-project/www/html/index.php

Modifiez la ligne suivante :

 $user ="root" ; $password ="secret" ; 

Enregistrez et fermez le fichier puis actualisez la page. Vous devriez voir la base de données avec toutes les tables sur l'écran suivant :

Conclusion

Dans le guide ci-dessus, vous avez appris à déployer une application PHP avec Nginx et MySQL à l'aide de Docker et Docker Compose. Vous devriez maintenant pouvoir héberger l'application PHP dans l'environnement de production avec Docker ; essayez-le sur votre compte d'hébergement VPS d'Atlantic.Net.


Linux
  1. Comment déployer et gérer MongoDB avec Docker

  2. Comment déployer des applications Node.js avec pm2 et Nginx sur Ubuntu

  3. Comment déployer des microservices avec Docker

  4. Comment déployer un conteneur nginx avec Docker sur Linode

  5. Comment déployer l'application Flask avec Nginx et Gunicorn sur Ubuntu 20.04

Comment installer et configurer Laravel avec Docker Compose sur Ubuntu 20.04

Comment installer Linux, Nginx, MariaDB et PHP (LEMP) sur Fedora 22

Comment installer Nginx, MySQL et PHP (LEMP) sur un serveur Ubuntu 15.04

Comment se connecter à MySQL en utilisant PHP

Comment déployer l'application Laravel avec Nginx sur Ubuntu ?

Comment activer la mise en cache FastCGI côté serveur avec Nginx et PHP