Skip to content

Du LEMP sur Docker

banner_lemp1
Dans cet article, nous allons voir comment déployer un serveur LEMP (Linux, Nginx, Mysql, PHP) sur Docker grâce à Docker-Compose. Nous remplacerons MySQL par MariaDB (fork Open-source) et utiliserons PHP en version fpm-7.0.5. Le tout sera bien sûr sécurisé sur TLS grâce à Let’s Encrypt.

J’ai créé un dépôt Github afin de stocker tous mes fichiers nécessaires à ce déploiement. (il peut être utile pour WordPress, Drupal, Owncloud ou d’autres applis PHP).

Nous allons donc commencer par installer Docker puis j’expliquerai chaque étape de ce  déploiement.

On installe donc Docker et Docker-compose sur une base Debian Jessie (en root) :

Maintenant que Docker est installé, on va pouvoir configurer notre stack LEMP.
On commence donc par cloner mon dépôt dans /srv :

cd /srv ; git clone https://github.com/valentin2105/LEMP-Docker.git 
cd /srv/LEMP-Docker

On se retrouve donc dans le dépôt qui contient :

  • le fichier docker-compose.yml qui lancera tous nos containers,
  • le dossier PHP-FPM qui contient le DockerFile pour ce service,
  • le dossier /etc qui contiendra vos certificats TLS et la configuration de Nginx,
  • le fichier letsencrypt.sh qui générera vos certificats grâce à docker.

Je vais commencer par vous montrer le fichier de Docker-compose, il permet de lancer nos 3 containers, Nginx, MariaDB et PHP-Fpm.

Le premier bloc lance MariaDB avec le mot de passe root de votre choix. Le second lance Nginx qui écoutera sur les ports 80 et 443 et qui aura plusieurs volumes pour sa configuration, les certificats… Le dernier bloc lance PHP-FPM en construisant l’image depuis le DockerFile suivant :

Ce DockerFile se base sur l’image officielle de php:fpm-7.0.5 elle même basée sur Debian Jessie. On y ajoute les modules PHP qu’on veut sur la ligne 5. Vous pourrez donc y ajouter les modules que vous souhaitez. Vous pourrez également changer la version modifiant la ligne FROM php:fpm-7.0.5.

On va maintenant s’occuper de générer les certificats TLS avec Let’s Encrypt, pour cela, on lance le fichier letsencrypt.sh :

sh /srv/LEMP-Docker/letsencrypt.sh

Le container vous demandera votre adresse e-mail, ensuite quel type de serveur utiliser, choisissez « temporary server » puis renseignez le nom de domaine que vous souhaitez utiliser.

Maintenant qu’on a nos certificats, on va créer le fichier DHParam (Diffie-Hellman) grâce à OpenSSL :

 cd /srv/LEMP-Docker/nginx/certs/ ; openssl dhparam -out dhparam.pem 4096 # ou 2048

Il faut maintenant que vous modifiez le fichier nginx.conf afin de remplacer domain.com par votre nom de domaine et ajoutez vos paramètres Nginx au besoin.

Si tout s’est bien passé, on peut maintenant lancer nos containers grâce à Docker-compose :

cd /srv/LEMP-Docker
docker-compose up -d # enlever le -d pour voir les logs

Notre répertoire web se situe dans /srv/LEMP-Docker/www/ vous pouvez y placer votre application qu’il faudra « chowner » à www-data :

 chown www-data:www-data www/ -R

On peut vérifier le bon fonctionnement avec un fichier info.php :
PHPinfo-1
et la qualité de la connexion TLS avec SSLLabs :
Sélection_001

Published inDatabasesDebianDockerGitLinuxTLSTutorielWeb server

3 Comments

  1. Olivier Olivier

    Merci pour la qualité de cet article

    J’ai un petit souci la commande sh /srv/LEMP-Docker/letsencrypt.sh car cela me retourne le message :
    Error response from daemon: create ./etc/letsencrypt: « ./etc/letsencrypt » includes invalid characters for a local volume name, only « [a-zA-Z0-9][a-zA-Z0-9_.-] » are allowed.

    Merci pour votre aide

    • valentin valentin

      Bonjour Olivier,

      Placez-vous dans le dossier /srv/LEMP-Docker et lance le script en faisant ./letsencrypt.sh.
      Cela devrait fonctionner 🙂

      • Olivier Olivier

        Merci de m’avoir répondu si vite 🙂
        En lançant la commande ./letsencrypt.sh depuis le dossier /srv/LEMP-Docker : [email protected]:/srv/LEMP-Docker# ./letsencrypt.sh
        bash: ./letsencrypt.sh: Permission non accordée

        J’obtiens le message Permission non accordée. C’est étonnant car je suis en root

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Proudly hosted with Open-sources Softwares.