Créer et gérer Nginx, PHP et MySQL grâce à Docker
Nous allons utiliser des conteneurs Docker pour gérer les différentes technologies nécessaires pour déployer notre projet de test.
Nous pouvez utiliser une autre méthode pour atteindre le même but.
Pour utiliser Docker, il faut au préalable qu'il soit installé.
Mise en place
Pour que notre projet fonctionne correctement, il nous faut quatre choses :
- Nginx (serveur web)
- PHP (langage de programmation côté serveur)
- MySQL (langage pour les bases de données)
- phpMyAdmin pour interagir avec une base de données à travers une interface
Le fichier compose.yml de Docker
Nous utiliserons le fichier compose.yml pour tous les orchestrer. Celui-ci doit être créé à la racine du projet et doit spécifiquement être nommé : `compose.yml
(ou docker-compose.yml). Je ne détaillerai pas chaque ligne de ce fichier. Au lieu de cela, je me contenterai de vous montrer le fichier et d'expliquer quelques éléments essentiels.
version : '3'
services:
nginx:
image: nginx:1.22-alpine
ports:
- "81:80"
volumes:
- ./:/code
- ./nginx.conf:/etc/nginx/nginx.conf
php:
build: .
volumes:
- ./:/code
database:
image: mysql:8.2
environment:
# 🚨 Changer si vous utilisez cette configuration en production
MYSQL_ROOT_PASSWORD: CqIEuocUkTClfJyzVfOYcKAzbrHFqH # ⬅︎ 🚨 À changer si production
MYSQL_DATABASE: injectionDB
MYSQL_USER: henrique # ⬅︎ 🚨 À changer si production
MYSQL_PASSWORD: CqIEuocUkTClfJyzVfOYcKAzbrHFqH # ⬅︎ 🚨 À changer si production
ports:
- "3306:3306"
phpmyadmin:
image: phpmyadmin/phpmyadmin
environment:
PMA_HOST: database
MYSQL_ROOT_PASSWORD: CqIEuocUkTClfJyzVfOYcKAzbrHFqH # ⬅︎ 🚨 À changer si production
ports:
- "82:80"
Quelques explications
Dans les lignes 7 et 31, nous connections les ports des conteneurs à des ports de notre machine locale. Cela permet d'accéder aux données transmises à partir de notre ordinateur.
Nous pouvons ainsi accéder à notre site grâce à localhost:81
et à l'interface phpMyAdmin avec localhost:82
.
Nginx
Le conteneur Nginx utilise un fichier qui est présent dans notre projet. Le nom du fichier est nginx.conf
et voici son contenu.
events {
worker_connections 1024;
multi_accept on;
}
http {
sendfile on;
tcp_nopush on;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
keepalive_timeout 40;
gzip on;
gzip_comp_level 5;
gzip_min_length 3000;
server {
listen 80;
server_name localhost;
root /code;
index index.php;
location / {
try_files $uri /index.php$is_args$args;
aio threads;
directio 5m;
}
location ~ \.php$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
}
Si vous utilisez le même système que moi, vous pouvez tout simplement copier ce code dans votre propre fichier nginx.conf
qui devra être placé à la racine de votre projet.
PHP
Le conteneur PHP est basé sur un fichier spéciale de Docker : Dockerfile
(avec un "D" majuscule). C'est un fichier qui permet de créer une image personnalisée. Notre image "PHP" aura besoin d'être personnalisée adin d'y ajouter des extensions qui nous permettrons de nous connecter facilement à la base de données.
Ajoutez ce fichier Dockerfile
à la racine.
FROM php:8.2-fpm-alpine
RUN apk update
RUN docker-php-ext-install mysqli pdo pdo_mysql
Versions des technologies
Pour notre part, nous utiliserons les versions suivantes :
- Nginx : 1.22
- PHP : 8.3
- MySQL : 8.2
Les fichiers présents dans notre projet
Voici les quatre fichiers qui doivent être présents à la racine de notre projet.
- compose.yml
- Dockerfile
- index.php
- nginx.conf
Lancer Docker
Maintenant, nous allons pouvoir lancer tous les conteneurs grâce à la commande suivant.
docker-compose up
Accéder à notre site
Pour accéder à notre site, il faut taper le lien suivant dans un navigateur (Chrome par exemple).
localhost:81
Dans la prochaine leçon, nous allons préparer la base de données.