/ Serveur nginx, apache, php et mysql full docker

Créer un serveur Nginx + Apache + Php + MySql - avec Docker Partie 3

Mise en place du serveur full docker

Voici le projet terminé sur github

Maintenant que nous avons défini notre architecture, nous pouvons nous concentrer sur l'installation de nos containers docker.

⚠️ Pré-requis

  • Une machine sous Windows, Linux ou Mac OS.
  • Docker installé sur la machine.
  • Docker-compose installé sur la machine.

Installation

  • Clonez ce dépôt à l'emplacement de votre choix sur votre serveur.
  • Modifiez le fichier .env avec les informations de votre serveur et ce que vous désirez pour mot de passe MySQL (néanmoins cela fonctionne avec les paramètres de bases).
  • Exécutez la commande suivante : docker build -t apachemy.
  • Puis exécutez la commande suivante : docker-compose up -d.
  • Faites un docker ps et vous constaterez le bon fonctionnement de vos conteneurs.

info : Le fichier .env nous permet de définir les paramètres et réglages de nos containers à leurs construction (ex: mdp et pseudo pour MySQL).

Configuration

⚠️ Avant de déclarer un bug, vérifiez que vos ports ne sont pas déjà utilisés par d'autres services

Ports utilisés par la stack

Port Service
80 Nginx
443 Nginx
8099 Apache
8080 Phpmyadmin
8989 MySQL

Nginx

Les fichiers de configuration de Nginx sont dans le dossier etc/nginx/. Vous trouverez dedans tous les fichiers de conf utilisés par le container docker.
Ne modifiez que le fichier etc/nginx/conf.d/default.template car les modifications seront automatiquement effectuées sur default.conf.

Après l'installation faites :

  1. Editez le fichier default.templateet remplacez à la ligne server_name par l'URL de votre site.
  2. Redémarrez le container Nginx avec sudo docker restart nginx-docker.

Apache

Les fichiers de configuration de Apache sont dans le dossier etc/apache/. Vous trouverez dedans tous les fichiers de conf utilisés par le container docker dont les dossiers sites-available et sites-enabled.

Après l'installation faites :

  1. Renommer le fichier etc/apache/site-available/toto.com.conf par celui de votre site.
  2. Remplacer de-dans les liens par ceux de votre site (ne changez pas le lien du DocumentRoot ni Directory, seulement le toto.com).
  3. Exécutez la commande sudo docker exec -t apache-docker a2ensite toto.com.conf dans ce même dossier.

Le dossier contenant vos sites web se trouve dans web/. Pour chaque site, créez un sous-dossier www.toto.com et éditez les fichiers de conf d'apache, ainsi que ceux d'Nginx.

Mysql

Pour ne pas perdre nos données à chaque redémarrage de docker, nous allons les stocker (shared folder) dans notre machine dans : data/db/mysql.

Variables d'environement

Le fichier .env, vous permettra de définir l'adresse de votre serveur, le nom de compte mot de passe Mysql et d'autres options de constructions de containers.

[Optionnel] Sécurisez votre site via SSL avec letsencrypt

  1. Aller dans le dossier etc/ssl/.
  2. Exécutez la commande docker-compose up -d.
  3. Exécutez la commande :
$ sudo docker run -it --rm -p 443:443 -p 83:80 --name certbot \
-v "/link_to/your_folder/docker-nginx-php-mysql/etc/ssl/mycertificate/letsencrypt:/etc/letsencrypt" \
-v "/link_to/your_folder/docker-nginx-php-mysql/etc/ssl/mycertificate/letsencrypt-lib/:/var/lib/letsencrypt" \

Répondez aux questions du certbot qui vous générera les certificats nécessaires dans :

/etc/ssl/mycertificate/letsencrypt/live/toto.com/
  1. Editez le fichier etc/nginx/conf.d/default.template et dé-commentez la partie To use https et commentez la partie For simple http.
  2. Remplacez à la ligne server_name le nom du site par l'URL de votre site.
  3. Remplacer aux lignes ssl_certificate et ssl_certificate_key les nom des certificats par les vôtres (créés à l'étape 3).
  4. Redémarrez le container Nginx avec sudo docker restart nginx-docker.

Félicitations vous avez mis en place votre site en HTTPS !
Pour le renouveler, rien de plus simple, exécutez de nouveau l'étape 3.

[Optionnel] Rediriger les requêtes sur le port 80 (http) vers le 443 (https)

Pour vous assurer de ne plus avoir d'accès non sécurisés :

  1. Editez le fichier etc/nginx/conf.d/default.template et dé-commentez la partie To forward http to https.
  2. Remplacez à la ligne server_name l'url par celle de votre site.
  3. Redémarrez le container Nginx avec sudo docker restart nginx-docker.

Un bug ? Des questions ? Vous voulez rejoindre la communauté Sosnoob.com ? Notre discord
https://discord.gg/9x3tcQ

Zakaria Rachedi

Zakaria Rachedi

Apprendre sans oublier, c'est impossible. Alors, pourquoi ne pas immortaliser ses connaissances et en profiter pour les partager, tel a été mon souhait lors de la création de sosnoob.

Read More