Docker stack serveur web

Mettez en ligne votre premier site web avec Docker


2 min read
Docker stack serveur web

La chose la plus satisfaisante à faire pour un débutant Docker est de mettre en ligne son premier site web entièrement via Docker. L'objectif est de n'avoir aucun logiciel (php, nginx, mysql) installé sur la machine hôte et d'avoir tout le nécessaire dans des containers.

Si vous arrivez ici, vous devez savoir que docker est basé sur les images et les containers. Pour créer notre serveur web, nous allons utiliser différentes images :

  • PHP
  • Nginx
  • Mysql
  • Adminer (équivalent à phpMyAdmin)

Docker Compose est un outil officiel permettant de vous aider dans la gestion des containers Docker. Il vous permet de définir et de configurer l'ensemble des composants dont vous avez besoin dans un fichier docker-compose.yml. docker stack est une commande intégrée à la ligne de commande Docker.

Trêve de bavardages, voici directement la stack en question :

version: "2"

services:    
  # --- PHP 7.2
  php:
    image: bitnami/php-fpm:7.2
    restart: always
    volumes:
      - /home/monprojet/html:/app
      - /home/monprojet/conf/php.ini:/opt/bitnami/php/etc/conf.d/php.ini:ro

  # --- nginx 1.14
  nginx:
    image: bitnami/nginx:1.14
    restart: always
    depends_on:
      - php
    volumes:
      - /home/monprojet/html:/app
      - /home/monprojet/conf/site.conf:/opt/bitnami/nginx/conf/vhosts/site.conf:ro
    ports:
      - 80:8080


  # --- mysql 5.7
  db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_DATABASE: mabase
      MYSQL_USER: monutilisateur
      MYSQL_PASSWORD: monmotdepasse
      MYSQL_RANDOM_ROOT_PASSWORD: '1'
      
  # --- adminer    
  adminer:
    image: adminer
    restart: always
    ports:
      - 8888:8080
    environment:
      ADMINER_DEFAULT_SERVER: db

Vous pouvez placer ce code dans un fichier docker-compose.yml.Notez que les containers Nginx et PHP utilisent des volumes pour stocker les configurations et les fichiers du site web.

D'après la configuration, le site web est à placer dans le dossier /home/monprojet/html sur votre serveur (sur l'hôte, pas dans le container).
La configuration nginx est à placer dans /home/monprojet/conf/site.conf.
La configuration php est à placer dans /home/monprojet/conf/php.ini

Une fois terminé, utilisez la commande docker stack comme ci-dessous pour créer la stack.

docker stack deploy --compose-file docker-compose.yml mastack
Commande de déploiement d'une stack utilisant un fichier docker compose
server {
    root /app/public;
    listen 0.0.0.0:8080;
    server_name _;
    index index.php;
    charset utf-8;
    client_max_body_size 20M;
    port_in_redirect off;

    # Content security headers
    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    # Base configuration for correct URL handling
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    # Define extra options for CSS and Javascript files
    location ~* \.(?:css|js|map|scss)$ {
        expires 30d;
        access_log off;
        add_header Cache-Control "public";
        try_files $uri @fallback;
    }

    # Redirect error pages to index.php
    error_page 404 /index.php;
    error_page 403 /index.php;

    # Configuration of the PHP handler
    location ~ \.php$ {
        fastcgi_pass php:9000;

        try_files $uri /index.php;
        include fastcgi.conf;
        fastcgi_keep_conn on;
        fastcgi_intercept_errors on;
        fastcgi_index index.php;
        fastcgi_read_timeout 300;
    }
}
Contenu du fichier site.conf
; miscellaneous
; -------------

expose_php = off

; resource limits
; ---------------

max_execution_time = 60
max_input_time = 60
memory_limit = 256M
upload_max_filesize = 20M
post_max_size = 20M

; opcache
; -------

opcache.enable = 1
opcache.fast_shutdown = 1
opcache.interned_strings_buffer = 16
opcache.max_accelerated_files = 7963
opcache.memory_consumption = 192
Contenu du php.ini

Bien sur, vous aurez certainement à adapter certaines parties selon vos besoins. Cependant, si vous rencontrez un quelconque soucis, n'hésitez-pas à indiquer votre démarche dans l'espace commentaire.

GO TOP