Einrichtung der automatischen Beantragung von letsencrypt-Zertifikaten mit Docker unter Linux

Ich habe kĂŒrzlich den virtuellen Server gewechselt und musste alles neu einrichten. Ich bevorzuge es, dass die Website ĂŒber HTTPS zugĂ€nglich ist und die letsencrypt-Zertifikate automatisch ausgestellt und verlĂ€ngert werden. Das kann erreicht werden, wenn man zwei Docker-Images verwendet: nginx-proxy und nginx-proxy-companion.

Dies ist eine Anleitung, wie man eine Website unter Docker mit einem Proxy einrichtet, der automatisch erhÀlt SSL-Zertifikate. Ein virtueller Server mit CentOS 7 wird verwendet.

Ich gehe davon aus, dass der Server bereits gekauft, konfiguriert und der Zugriff ĂŒber SchlĂŒssel erfolgt und fail2ban installiert ist usw.

Zuerst 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 die 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 ausfĂŒhren zu können
    $ usermod -aG docker user

Der nĂ€chste Schritt ist die Installation von docker-compose. Das Tool kann auf verschiedenen Wegen installiert werden, aber ich bevorzuge die Installation ĂŒber den Pip-Manager und virtualenv, um das System nicht mit unnötigen Paketen zu belasten.

  1. Pip installieren
    $ sudo yum install python-pip
  2. Virtualenv installieren
    $ pip install virtualenv
  3. Jetzt muss ein Ordner fĂŒr das Projekt erstellt und initialisiert werden. Der Ordner mit allem Notwendigen zur Verwaltung der Pakete wird ve genannt.
    $ mkdir docker
    $ cd docker
    $ virtualenv ve
  4. Um die virtuelle Umgebung nutzen zu können, muss der folgende Befehl im Projektordner ausgefĂŒhrt werden.
    $ source ve/bin/activate
  5. Jetzt kann docker-compose installiert werden.
    pip install docker-compose

    Um sicherzustellen, dass die Container einander sehen können, erstellen wir ein Netzwerk. StandardmĂ€ĂŸig wird der Bridge-Treiber verwendet.

    $ docker network create network

    Jetzt muss docker-compose konfiguriert werden, der Proxy wird im Ordner proxy gespeichert, die Test-Website im Ordner test. Zum 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 sieht. Die Verzeichnisse /etc/nginx/certs, /etc/nginx/vhost.d und /usr/share/nginx/html mĂŒssen von beiden Containern gemeinsam genutzt werden. Damit der letsencrypt-Container korrekt funktioniert, 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 sind die Umgebungsvariablen notwendig, damit der Proxy Anfragen an den Server korrekt bearbeitet und das Zertifikat fĂŒr den richtigen Domainnamen anfordert.

    Jetzt mĂŒssen wir nur noch docker-compose starten.

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

Quelle: habr.com

ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server đŸ”„ ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server - ProHoster