Configuration de la réception automatique des certificats Letsencrypt à l'aide de Docker sous Linux

J'ai récemment changé de serveur virtuel et j'ai dû tout reconfigurer. Je préfère que le site soit accessible via https et que les certificatsencrypt soient obtenus et renouvelés automatiquement. Ceci peut être réalisé en utilisant deux images Docker nginx-proxy et nginx-proxy-companion.

Ceci est un guide sur la façon de configurer un site Web 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é à l'aide d'une clé, fail2ban installé, etc.

Vous devez d’abord installer Docker.

  1. Vous devez d'abord installer les dépendances
    $ sudo yum install -y yum-utils  device-mapper-persistent-data lvm2
  2. Connecter le référentiel
    $ sudo yum-config-manager  --add-repo  https://download.docker.com/linux/centos/docker-ce.repo
  3. Ensuite, installez l'édition communautaire Docker
    $ sudo yum install docker-ce docker-ce-cli containerd.io
  4. Ajoutez Docker au démarrage et exécutez
    $ sudo systemctl enable docker
    $ sudo systemctl start docker
  5. Ajoutez un utilisateur au groupe Docker pour 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 pip et virtualenv, afin de ne pas encombrer le système avec des packages inutiles.

  1. Installer pip
    $ sudo yum install python-pip
  2. Installer VirtualEnv
    $ pip install virtualenv
  3. Ensuite, vous devez créer un dossier avec le projet et l'initialiser. Le dossier contenant tout ce dont vous avez besoin pour gérer les packages s'appellera ve.
    $ mkdir docker
    $ cd docker
    $ virtualenv ve
  4. Pour commencer à utiliser l'environnement virtuel, vous devez exécuter la commande suivante dans le dossier du projet.
    $ source ve/bin/activate
  5. Vous pouvez installer docker-compose.
    pip install docker-compose

    Pour que les conteneurs se voient, nous allons créer 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 sera dans le dossier 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

    teneur proxy/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:

    Variable d'environnement NGINX_PROXY_CONTAINER il est nécessaire que le conteneur Letsencrypt voie 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 accessible sur les ports 80 et 443.

    teneur 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
          - [email protected]

    Ici, des variables d'environnement sont nécessaires pour que le proxy traite correctement la demande adressée 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

Source: habr.com

Ajouter un commentaire