Einrichten der automatischen Erlangung von Letsencrypt-Zertifikaten mit Docker unter Linux

Ich habe kürzlich meinen virtuellen Server gewechselt und musste alles neu einrichten. Ich bevorzuge es, dass die Website über HTTPS erreichbar ist und die Letsencrypt-Zertifikate automatisch erhalten und verlängert werden. Dies kann erreicht werden, indem man zwei Docker-Images, nginx-proxy und nginx-proxy-companion, verwendet.

Diese Anleitung zeigt, wie man eine Website unter Docker mit einem Proxy einrichtet, der automatisch Zertifikate erhält. SSL-Zertifikate. Verwendeter virtueller Server ist CentOS 7.

Ich nehme an, dass der Server bereits gekauft, eingerichtet wurde und der Zugang über Schlüssel, fail2ban usw. erfolgt.

Zunächst muss Docker installiert werden.

  1. Zuerst müssen die Abhängigkeiten installiert werden
    $ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
  2. Repository hinzufügen
    $ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  3. Dann Docker Community Edition installieren
    $ sudo yum install docker-ce docker-ce-cli containerd.io
  4. Docker zum Autostart hinzufügen und starten
    $ sudo systemctl enable docker
    $ sudo systemctl start docker
  5. Benutzer zur Docker-Gruppe hinzufügen, um Docker ohne sudo auszuführen
    $ usermod -aG docker user

Der nächste Schritt besteht darin, docker-compose zu installieren. Es gibt mehrere Möglichkeiten, das Tool zu installieren, aber ich bevorzuge die Installation über den pip-Manager und virtualenv, um das System nicht mit unnötigen Paketen zu überladen.

  1. pip installieren
    $ sudo yum install python-pip
  2. virtualenv installieren
    $ pip install virtualenv
  3. Als nächstes müssen wir einen Ordner für das Projekt erstellen und diesen initialisieren. Der Ordner mit allen benötigten Paketverwaltungsmaterialien wird ve genannt.
    $ mkdir docker
    $ cd docker
    $ virtualenv ve
  4. Um mit der virtuellen Umgebung zu arbeiten, müssen Sie den folgenden Befehl im Projektordner ausführen.
    $ source ve/bin/activate
  5. Jetzt können Sie docker-compose installieren.
    pip install docker-compose

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

    $ docker network create network

    Dann müssen wir docker-compose konfigurieren. Der Proxy wird im Ordner proxy liegen, die Testseite im Ordner test. Als Beispiel verwende ich 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 ist notwendig, damit der letsencrypt-Container den Proxy-Container erkennen kann. Die Verzeichnisse /etc/nginx/certs, /etc/nginx/vhost.d und /usr/share/nginx/html müssen von beiden Containern gemeinsam genutzt werden. Für die ordnungsgemäße Funktion des letsencrypt-Containers muss die Anwendung sowohl über Port 80 als auch über Port 443 erreichbar 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
          - LETSENCRYPT_EMAIL=admin@example.com

    Hier werden Umgebungsvariablen benötigt, damit der Proxy Anfragen an den Server korrekt verarbeitet und ein Zertifikat für den richtigen Domainnamen anfordert.

    Jetzt muss nur noch docker-compose gestartet werden

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

Quelle: habr.com

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster