J'ai récemment changé de serveur virtuel et j'ai dû tout configurer à nouveau. Je préfère que le site soit accessible via https et permet que les certificats cryptés soient obtenus et renouvelés automatiquement. Ceci peut être réalisé en utilisant deux images docker, nginx-proxy et nginx-proxy-compagnon.
Ceci est un guide pour configurer un site sur docker, avec un proxy qui reçoit automatiquement les certificats SSL. Le serveur virtuel CentOS 7 est utilisé.
Je suppose que le serveur a déjà été acheté, configuré, connecté à lui par clé, fail2ban installé, etc.
Vous devez d'abord installer docker.
- Vous devez d'abord installer les dépendances
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
- Connecter le référentiel
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
- Ensuite, installez le docker de l'édition communautaire
$ sudo yum install docker-ce docker-ce-cli containerd.io
- Ajouter un docker au chargement automatique et exécuter
$ sudo systemctl enable docker $ sudo systemctl start docker
- Ajoutez un utilisateur au groupe docker afin de pouvoir exécuter docker sans sudo
$ usermod -aG docker user
L'étape suivante consiste à installer docker-compose. L'utilitaire peut être installé de plusieurs manières, mais je préfère l'installer via le gestionnaire de pip et virtualenv, afin de ne pas obstruer le système avec des packages inutiles.
- Installer pip
$ sudo yum install python-pip
- Installer virtualenv
$ pip install virtualenv
- Ensuite, vous devez créer un dossier avec le projet et l'initialiser. Le dossier contenant tout ce dont vous avez besoin pour la gestion des packages s'appellera ve.
$ mkdir docker $ cd docker $ virtualenv ve
- Pour commencer à utiliser l'environnement virtuel, vous devez exécuter la commande suivante dans le dossier du projet.
$ source ve/bin/activate
- Vous pouvez installer docker-compose.
pip install docker-compose
Pour que les conteneurs se voient, créez un réseau. Par défaut, le pilote de pont est utilisé.
$ docker network create network
Ensuite, vous devez configurer docker-compose, le proxy sera dans le dossier proxy, le site de test dans le dossier de test. Par exemple, j'utilise le nom de domaine example.com
$ mkdir proxy $ mkdir test $ touch proxy/docker-compose.yml $ touch test/docker-compose.yml
Proxy de contenu / docker-compose.yml
version: '3' networks: default: external: name: network services: nginx-proxy: container_name: nginx-proxy image: jwilder/nginx-proxy ports: - 80:80 - 443:443 volumes: - certs:/etc/nginx/certs - vhost.d:/etc/nginx/vhost.d - html:/usr/share/nginx/html - /var/run/docker.sock:/tmp/docker.sock:ro nginx-proxy-letsencrypt: container_name: nginx-proxy-letsencrypt image: jrcs/letsencrypt-nginx-proxy-companion volumes: - certs:/etc/nginx/certs - vhost.d:/etc/nginx/vhost.d - html:/usr/share/nginx/html - /var/run/docker.sock:/var/run/docker.sock:ro environment: - NGINX_PROXY_CONTAINER=nginx-proxy volumes: certs: vhost.d: html:
La variable d'environnement NGINX_PROXY_CONTAINER est nécessaire pour que le cryptage du conteneur puisse voir le conteneur proxy. Les dossiers / etc / nginx / certs /etc/nginx/vhost.d et / usr / share / nginx / html doivent être partagés par les deux conteneurs. Pour que le conteneur letsencrypt fonctionne correctement, l'application doit être disponible sur les ports 80 et 443.
Contenu de test / docker-compose.yml
version: '3' networks: default: external: name: network services: nginx: container_name: nginx image: nginx:latest environment: - VIRTUAL_HOST=example.com - LETSENCRYPT_HOST=example.com - LETSENCRYPT_EMAIL=admin@example.com
Ici, des variables d'environnement sont nécessaires pour que le proxy traite correctement la demande au serveur et demande un certificat pour le nom de domaine correct.
Il ne reste plus qu'à exécuter docker-compose
$ cd proxy $ docker-compose up -d $ cd ../test $ docker-compose up -d