Déployer un serveur web avec Docker

Déployer un serveur web avec Docker

21 October 2023

Dans ce chapitre, nous allons explorer le processus de création et de déploiement d'un serveur web simple en utilisant Docker. Notre serveur web comprendra trois composants principaux : PHP 8, Nginx et PostgreSQL. Nous utiliserons Dockerfiles pour construire des images personnalisées, Docker Compose pour orchestrer nos conteneurs, et les volumes Docker pour gérer les données persistantes.

Préparation des Dockerfiles

Nous aurons besoin de trois Dockerfiles: un pour PHP, un pour Nginx et un pour PostgreSQL.

Dockerfile pour PHP 8 :

Nom du fichier : Dockerfile-php

FROM php:8-fpm-alpine

# Installer les extensions PHP nécessaires pour la connexion à PostgreSQL
RUN apk --update --no-cache add \
  postgresql-dev \
  && docker-php-ext-install pdo pdo_pgsql

# Copiez les fichiers du site web
COPY . /var/www/html

# Définir le répertoire de travail
WORKDIR /var/www/html

Dockerfile pour Nginx :

Nom du fichier : Dockerfile-nginx

FROM nginx:alpine

# Copier la configuration de Nginx
COPY nginx.conf /etc/nginx/conf.d/default.conf

# Copiez les fichiers du site web
COPY . /var/www/html

# Définir le répertoire de travail
WORKDIR /var/www/html

Nom du fichier : nginx.conf

server {
    listen 80;

    server_name localhost;

    root /var/www/html;
    index index.php;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

Créer le Docker Compose File

Créons un fichier docker-compose.yml pour définir nos services, réseaux et volumes.

version: '3.8'
services:
  php:
    build:
      context: .
      dockerfile: Dockerfile-php
    volumes:
      - web_data:/var/www/html

  nginx:
    build:
      context: .
      dockerfile: Dockerfile-nginx
    ports:
      - "8080:80"
    depends_on:
      - php

  db:
    image: postgres
    environment:
      POSTGRES_DB: mydatabase
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
    volumes:
      - db_data:/var/lib/postgresql/data

volumes:
  web_data:
  db_data:

Créer tous les fichiers à la racine de votre projet et ajouter un fichier index.php avec du contenu dedans, par exemple :

<h1>Ça fonctionne !</h1>

Lancement des Conteneurs en Mode Détaché

Avec Docker Compose, lancer vos conteneurs en mode détaché (en arrière-plan) est simple. Utilisez la commande suivante :

docker-compose up -d

L'option -d indique à Docker Compose de démarrer les conteneurs en mode détaché. Vos conteneurs seront maintenant lancés, et vos services seront accessibles.

Accès et test

Après le déploiement, accédez à votre serveur web en naviguant vers l'adresse IP de votre machine sur votre navigateur suivi du port 8080 : http://localhost:8080. Vous devriez voir votre application PHP fonctionner, connectée à la base de données PostgreSQL, servie via Nginx et le contenu de votre fichier index.php s'afficher.

Modifications

Si vous apporter des modifications aux fichiers de configuration alors que les containers sont lancés, utiliser les commandes suivantes pour appliquer vos modifications :

docker-compose down
docker-compose build
docker-compose up -d