GNU/Linux >> Tutoriels Linux >  >> Panels >> Docker

Héberger plusieurs sites Web sur des conteneurs Docker

Docker est une plate-forme extrêmement utile qui permet aux développeurs de développer et de déployer facilement des applications. Dans cet article, nous verrons comment utiliser les conteneurs Docker pour héberger plusieurs sites Web sur un seul serveur. L'un des principaux avantages de l'utilisation des conteneurs Docker est qu'ils sont légers, plus rapides et plus faciles à gérer.

Ce mois-ci, j'ai déplacé deux de mes applications personnalisées de deux serveurs distincts vers un seul serveur, chacune dans son propre conteneur Docker. C'est plus facile de gérer les deux applications, et cela a également réduit mes coûts de production.

Chaque application est configurée dans son propre environnement sécurisé et accessible via un nom de domaine. Avant de passer aux instructions, discutons brièvement de son fonctionnement et des outils dont nous aurons besoin pour tout configurer. Alors commençons.

Que voulons-nous configurer ?

Nous souhaitons utiliser des conteneurs Docker pour configurer un serveur unique pouvant servir plusieurs applications ou sites Web. Lorsqu'un utilisateur demande une URL pour l'un des sites Web hébergés, le serveur principal doit transmettre la demande au conteneur, qui doit ensuite diffuser le contenu.

Nous aurons besoin de mettre en place un serveur pour accomplir cela. J'ai configuré un serveur avec une adresse IP statique pour cet article. Découvrez MassiveGRID, DigitalOcean ou Vultr si vous recherchez un bon service d'hébergement cloud.

Deuxièmement, nous allons créer un proxy pour acheminer les demandes des utilisateurs vers leurs conteneurs appropriés. Il existe de nombreux outils disponibles à cet effet, mais j'utiliserai nginx-proxy car il est extrêmement simple à configurer et possède presque toutes les fonctionnalités dont nous avons besoin. Enfin, nous utiliserons Cloudflare en tant que gestionnaire DNS pour faire pointer le nom de domaine vers le serveur hôte (adresse IP).

Je recommande également d'utiliser Portainer, une interface graphique facile à utiliser pour gérer les conteneurs Docker. Pour configurer Portainer, veuillez suivre ce guide.

Une fois que votre serveur est opérationnel, connectez-vous en ssh au serveur et mettez-le à jour.

ssh [email protected]

Si vous avez configuré la clé ssh pour vous connecter, veuillez utiliser l'option -i option in the ssh command to log in avec la clé ssh privée.

ssh -i path-to-ssh-key [email protected]

Préparer le serveur

Sur la machine hôte, j'exécute Ubuntu 20.04. Les instructions seront les mêmes que vous utilisiez Debian ou une autre distribution basée sur Debian. Pour toute autre distribution, les seules instructions de configuration de docker seront différentes et tout le reste restera le même. Veuillez suivre ce guide pour installer Docker sur Ubuntu.

Utilisation d'un certificat SSL avec nginx-proxy

La deuxième étape consiste à créer un répertoire qui stockera les certificats SSL et les clés pour chaque domaine. Sur le serveur hôte, créez un répertoire dans le répertoire /etc/. Vous pouvez nommer ce répertoire comme bon vous semble. Pour cet article, je le nomme cloudflare.

mkdir /etc/cloudflare

Plus tard, nous lierons ce répertoire avec nginx-proxy pour accéder aux certificats SSL et aux clés pour chaque nom de domaine.

Créer un réseau Docker

Nous allons également créer un réseau virtuel auquel chaque conteneur docker, y compris nginx-proxy, se connectera.

docker network create nginx-proxy

Configurer nginx-proxy

Si nous le voulons, nous pouvons créer un proxy pour faire face à de telles situations. Heureusement, les développeurs nginx ont créé une image Docker complète qui gardera une trace de tous les conteneurs et se mettra à jour dès qu'un nouveau conteneur sera créé. Pour créer un docker nginx-proxy (avec SSL à l'esprit), veuillez exécuter la commande suivante -

docker run -d –name nginx-proxy -p 80:80 -p 443:443 –net nginx-proxy -v /etc/cloudflare:/etc/nginx/certs -v /var/run/docker.sock:/tmp/docker.sock:ro nginxproxy/nginx-proxy

Décomposons la commande ci-dessus étape par étape.

  • exécuter – Cette option créera le conteneur.
  • -d – Il active le mode débogage. En cas de problème, il affichera les informations utiles pour traquer le problème.
  • –nom – Le nom du conteneur.
  • -p 80:80 – C'est extrêmement important. Le paramètre -p lie le port hôte au port conteneur. Sur le côté gauche de 80:80 se trouve le port hôte et vice-versa.
  • –net – Connecte le conteneur nouvellement créé au réseau nginx-proxy.
  • -v /etc/cloudflare :/etc/nginx/certs – Nécessaire si vous allez utiliser SSL sur vos sites Web. Liaison du répertoire hôte avec le répertoire du conteneur nginx-proxy où il stocke les certificats SSL et les clés.
  • -v /var/run/docker.sock:/tmp/docker.sock:ro – Attachement du socket docker au conteneur pour communiquer avec le démon docker.
  • nginxproxy/nginx-proxy – L'adresse de l'image docker nginx-proxy hébergée sur hub.docker.com.

Nous avons résolu le plus gros casse-tête du jeu une fois que vous avez créé le conteneur nginx-proxy. C'était très simple. À droite? Tout cela grâce à l'image nginx-proxy ; sinon, il faudrait tout faire manuellement.

Créer un conteneur avec la variable d'environnement VIRTUAL_HOST

La variable d'environnement VIRTUAL HOST est utilisée par nginx-proxy pour déterminer quel domaine doit être pointé vers quel serveur. Chaque fois que vous créez un nouveau conteneur, définissez la valeur de la variable VIRTUAL HOST sur le nom de domaine que vous souhaitez faire pointer vers ce conteneur.

docker run -it -d --name gaminggroup.online -h gaminggroup.online --expose 80 --net nginx-proxy -e VIRTUAL_HOST=gaminggroup.online -e VIRTUAL_HOST=www.gaminggroup.online httpd

Décomposons la commande ci-dessus étape par étape.

  • -h – définit le nom de domaine complet (définir le nom de domaine)
  • –exposer – Expose le port 80 pour autoriser le trafic HTTP
  • –net – Connectez le conteneur nouvellement créé au réseau nginx-proxy
  • VIRTUAL_HOST=domaine.xyz – La variable VIRTUAL_HOST est utilisée par nginx-proxy pour rediriger les requêtes des utilisateurs vers leurs conteneurs respectifs
  • httpd – Extraction de l'image du serveur Apache depuis le docker hub

La commande ci-dessus démarrera le conteneur avec le serveur Web populaire Apache. Toute requête qui atteint le serveur hôte est redirigée vers le nginx-proxy, qui la transmet ensuite au port 80 de ce conteneur .

Pointer le domaine vers le serveur

Enfin, configurez le nom de domaine pour qu'il pointe vers le serveur hôte. Créez un enregistrement A avec le nom "@" et IPv4 comme adresse IP du serveur hôte. Attendez un moment après avoir terminé. La propagation DNS peut prendre de quelques minutes à plusieurs heures.

Une fois la propagation DNS terminée, votre nom de domaine pointera vers le conteneur nouvellement créé qui héberge le serveur Web Apache. Maintenant, tout est configuré. Tout ce que vous avez à faire est de continuer à créer des conteneurs avec la variable VIRTUAL_HOST et nginx-proxy redirigera correctement le trafic vers le conteneur.

Utilisation de SSL/HTTPS dans Docker

Étant donné que la plupart d'entre nous préfèrent diffuser du contenu via HTTPS plutôt que via HTTP non sécurisé, nginx-proxy peut facilement le gérer. Nous avons déjà passé le paramètre -v avec le répertoire /etc/cloudflare lorsque nous avons configuré le nginx-proxy récipient. Ce répertoire est associé au nginx-proxy répertoire /etc/nginx/certs .

Chaque certificat SSL et chaque clé doivent être stockés dans /etc/cloudflare avec le nom propre. Les certificats SSL et les clés doivent être renommés en fonction du nom de domaine auquel ils sont destinés. Par exemple, pour le nom de domaine, example.com , le certificat SSL doit être renommé en example.com.crt et la clé doit être example.com.key .

Conclusion

L'utilisation de nginx-proxy a grandement simplifié le processus. Déployez simplement un conteneur qui gère tout le reste. Une fois cette opération effectuée, vous pouvez déployer autant de conteneurs que vous le souhaitez sans avoir à vous soucier d'un trop grand nombre de fichiers de configuration. Les conteneurs sont légers, mais à mesure que le trafic/la charge de travail augmentent, davantage de ressources seront nécessaires.

Si vous avez eu des difficultés à suivre les étapes ci-dessus, faites-le moi savoir dans la section de commande ci-dessous ou rejoignez notre serveur Discord pour une aide rapide.


Docker
  1. Comment installer et héberger un serveur OpenVPN avec Docker

  2. Comment utiliser Docker Compose

  3. Comment connecter des conteneurs Docker

  4. Comment répertorier les conteneurs Docker

  5. Introduction aux conteneurs Docker

Comment utiliser Docker Cp pour copier des fichiers entre l'hôte et les conteneurs

Comment exécuter des conteneurs Docker

Comment supprimer les conteneurs Docker

Comment arrêter les conteneurs Docker

Comment installer plusieurs conteneurs Discourse sur le même serveur

Héberger plusieurs sites Web sur un seul serveur avec Apache sur Ubuntu 18.04