Sosnoob - Créez votre serveur Nginx (en proxy), apache, php, mysql et phpmyadmin entièrement avec docker
!
Dans le but de répondre à un besoin exprimé par la communauté, j'ai créé une stack serveur-web full docker
dispo pour :
Windows
OSX
Linux
Tuto de mise en place complet : Si vous souhaitez vous former
Avec cette architecture, je vous propose de mettre en place Nginx
en serveur proxy pour rediriger nos requêtes, apache
en serveur web avec php
, mysql
pour la gestion des données de nos apps et phpmyadmin
pour gérer la base de données.
- Une machine sous Windows, Linux ou Mac OS.
- Docker installé sur la machine.
- Docker-compose installé sur la machine.
- 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.
Port | Service |
---|---|
80 |
Nginx |
443 |
Nginx |
8099 |
Apache |
8080 |
Phpmyadmin |
8989 |
MySQL |
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 :
- Editez le fichier
default.template
et remplacez à la ligneserver_name
par l'URL de votre site. - Redémarrez le container Nginx avec
sudo docker restart nginx-docker
.
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 :
- Renommer le fichier
etc/apache/site-available/toto.com.conf
par celui de votre site. - Remplacer de-dans les liens par ceux de votre site (ne changez pas le lien du DocumentRoot ni Directory, seulement le
toto.com
). - 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.
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
.
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.
- Aller dans le dossier
etc/ssl/
. - Exécutez la commande
docker-compose up -d
. - 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/
- Editez le fichier
etc/nginx/conf.d/default.template
et dé-commentez la partieTo use https
. - Remplacez à la ligne
server_name
le nom du site par l'URL de votre site. - Remplacer aux lignes
ssl_certificate
etssl_certificate_key
les nom des certificats par les vôtres (créés à l'étape 3). - 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.
Pour vous assurer de ne plus avoir d'accès non sécurisés :
- Editez le fichier
etc/nginx/conf.d/default.template
et dé-commentez la partieTo forward http to https
. - Remplacez à la ligne
server_name
l'url par celle de votre site. - Redémarrez le container Nginx avec
sudo docker restart nginx-docker
.
Un bug ? Des questions ? Vous voulez rejoindre la communauté Sosnoob.com ? Notre discord
Accéder au tuto pour comprendre le projet et pouvoir y contribuer