Automatische ontvangst van letencrypt-certificaten instellen met behulp van docker op Linux

Ik heb onlangs de virtuele server gewijzigd en moest alles opnieuw configureren. Ik geef er de voorkeur aan dat de site toegankelijk is via https en dat letencrypt-certificaten automatisch worden verkregen en verlengd. Dit kan worden bereikt door twee docker-images nginx-proxy en nginx-proxy-companion te gebruiken.

Dit is een handleiding voor het opzetten van een website op Docker, met een proxy die automatisch SSL-certificaten ontvangt. Er wordt gebruik gemaakt van de CentOS 7 virtuele server.

Ik ga ervan uit dat de server al is aangeschaft, geconfigureerd, ingelogd met een sleutel, fail2ban geïnstalleerd, etc.

Eerst moet je Docker installeren.

  1. Eerst moet u afhankelijkheden installeren
    $ sudo yum install -y yum-utils  device-mapper-persistent-data lvm2
  2. Verbind de opslagplaats
    $ sudo yum-config-manager  --add-repo  https://download.docker.com/linux/centos/docker-ce.repo
  3. Installeer vervolgens de Docker Community-editie
    $ sudo yum install docker-ce docker-ce-cli containerd.io
  4. Voeg docker toe aan het opstarten en voer het uit
    $ sudo systemctl enable docker
    $ sudo systemctl start docker
  5. Voeg een gebruiker toe aan de dockergroep om docker zonder sudo te kunnen uitvoeren
    $ usermod -aG docker user

De volgende stap is het installeren van docker-compose. Het hulpprogramma kan op verschillende manieren worden geïnstalleerd, maar ik geef er de voorkeur aan om het via pip manager en virtualenv te installeren, om het systeem niet vol te proppen met onnodige pakketten.

  1. Piep installeren
    $ sudo yum install python-pip
  2. Installeer virtuele omgeving
    $ pip install virtualenv
  3. Vervolgens moet u een map met het project maken en deze initialiseren. De map met alles wat u nodig heeft om pakketten te beheren, heet ve.
    $ mkdir docker
    $ cd docker
    $ virtualenv ve
  4. Om de virtuele omgeving te gaan gebruiken, moet u de volgende opdracht uitvoeren in de projectmap.
    $ source ve/bin/activate
  5. U kunt docker-compose installeren.
    pip install docker-compose

    Om ervoor te zorgen dat de containers elkaar kunnen zien, creëren we een netwerk. Standaard wordt het bridge-stuurprogramma gebruikt.

    $ docker network create network

    Vervolgens moet u docker-compose configureren, de proxy bevindt zich in de proxymap en de testsite bevindt zich in de testmap. Ik gebruik bijvoorbeeld de domeinnaam example.com

    $ mkdir proxy
    $ mkdir test
    $ touch proxy/docker-compose.yml
    $ touch test/docker-compose.yml

    Inhoud 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:

    Omgevingsvariabele NGINX_PROXY_CONTAINER het is noodzakelijk dat de letencrypt-container de proxycontainer ziet. De mappen /etc/nginx/certs /etc/nginx/vhost.d en /usr/share/nginx/html moeten door beide containers worden gedeeld. Om deletsencrypt-container correct te laten werken, moet de applicatie toegankelijk zijn op zowel poort 80 als 443.

    Inhoud 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]

    Hier zijn omgevingsvariabelen nodig zodat de proxy het verzoek aan de server correct verwerkt en een certificaat voor de juiste domeinnaam aanvraagt.

    Het enige dat overblijft is het uitvoeren van docker-compose

    $ cd proxy
    $ docker-compose up -d
    $ cd ../test
    $ docker-compose up -d

Bron: www.habr.com

Voeg een reactie