Konfigurieren des automatischen Empfangs von Letsencrypt-Zertifikaten mit Docker unter Linux

Ich habe kürzlich einen virtuellen Server gewechselt und musste alles neu einrichten. Ich bevorzuge, dass die Seite über https zugänglich ist und dass Letsencrypt-Zertifikate automatisch abgerufen und erneuert werden. Dies kann durch die Verwendung der beiden Docker-Images Nginx-Proxy und Nginx-Proxy-Companion erreicht werden.

Dies ist eine Anleitung zum Einrichten einer Site auf Docker mit einem Proxy, der automatisch SSL-Zertifikate empfängt. Es wird der virtuelle CentOS 7-Server verwendet.

Ich gehe davon aus, dass der Server bereits gekauft, konfiguriert, der Zugriff darauf per Schlüssel erfolgt, fail2ban installiert ist usw.

Zuerst müssen Sie Docker installieren.

  1. Zuerst müssen Sie die Abhängigkeiten installieren
    $ sudo yum install -y yum-utils  device-mapper-persistent-data lvm2
  2. Repository verbinden
    $ sudo yum-config-manager  --add-repo  https://download.docker.com/linux/centos/docker-ce.repo
  3. Installieren Sie dann die Docker Community Edition
    $ sudo yum install docker-ce docker-ce-cli containerd.io
  4. Fügen Sie Docker zum Start hinzu und führen Sie es aus
    $ sudo systemctl enable docker
    $ sudo systemctl start docker
  5. Fügen Sie der Docker-Gruppe einen Benutzer hinzu, um Docker ohne Sudo ausführen zu können
    $ usermod -aG docker user

Der nächste Schritt ist die Installation von Docker-Compose. Das Dienstprogramm kann auf verschiedene Arten installiert werden, aber ich bevorzuge die Installation über den Pip-Manager und Virtualenv, um das System nicht mit unnötigen Paketen zu verstopfen.

  1. Pip installieren
    $ sudo yum install python-pip
  2. Installieren Sie Virtualenv
    $ pip install virtualenv
  3. Als nächstes müssen Sie einen Ordner mit dem Projekt erstellen und ihn initialisieren. Der Ordner mit allem, was zur Paketverwaltung benötigt wird, heißt ve.
    $ mkdir docker
    $ cd docker
    $ virtualenv ve
  4. Um mit der Nutzung der virtuellen Umgebung zu beginnen, müssen Sie den folgenden Befehl im Projektordner ausführen.
    $ source ve/bin/activate
  5. Sie können Docker-Compose installieren.
    pip install docker-compose

    Damit sich die Container gegenseitig sehen können, erstellen wir ein Netzwerk. Standardmäßig wird der Bridge-Treiber verwendet.

    $ docker network create network

    Als nächstes müssen Sie Docker-Compose konfigurieren. Der Proxy befindet sich im Proxy-Ordner und die Test-Site im Testordner. Ich verwende zum Beispiel den Domainnamen example.com

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

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

    Umgebungsvariable NGINX_PROXY_CONTAINER Wird benötigt, damit der Letsencrypt-Container den Proxy-Container sehen kann. Die Ordner /etc/nginx/certs /etc/nginx/vhost.d und /usr/share/nginx/html müssen von beiden Containern gemeinsam genutzt werden. Damit der Letsencrypt-Container ordnungsgemäß funktioniert, muss die Anwendung sowohl auf den Ports 80 als auch 443 verfügbar sein.

    Inhalt 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 werden Umgebungsvariablen benötigt, damit der Proxy die Anfrage an den Server korrekt verarbeitet und ein Zertifikat für den richtigen Domainnamen anfordert.

    Es bleibt nur noch Docker-Compose auszuführen

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

Source: habr.com

Kommentar hinzufügen