Créer et gérer Nginx, PHP et MySQL grâce à Docker

Vidéo sur Youtube Le play Youtube

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
Le site est déployer grâce à Docker

Dans la prochaine leçon, nous allons préparer la base de données.