Configuratie van automatische verkrijging van letsencrypt-certificaten met behulp van Docker in Linux

Ik heb onlangs mijn virtuele server veranderd en moest alles opnieuw instellen. Ik geef er de voorkeur aan dat de website toegankelijk is via https en dat de letsencrypt-certificaten automatisch worden verkregen en verlengd. Dit kan worden bereikt door twee Docker-images te gebruiken: nginx-proxy en nginx-proxy-companion.

Deze handleiding beschrijft hoe je een website op Docker instelt met een proxy die automatisch ontvangt SSL-certificaten. Er wordt een virtuele server met CentOS 7 gebruikt.

Ik veronderstel dat de server al is aangeschaft, ingesteld, dat de toegang verloopt via een sleutel, fail2ban is geïnstalleerd, enzovoort.

Om te beginnen moet je Docker installeren.

  1. Eerst moeten de afhankelijkheden worden geïnstalleerd.
    $ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
  2. Voeg de repository toe.
    $ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  3. Installeren van Docker Community Edition.
    $ sudo yum install docker-ce docker-ce-cli containerd.io
  4. Voeg Docker toe aan de autostart en start het.
    $ sudo systemctl enable docker
    $ sudo systemctl start docker
  5. Voeg de gebruiker toe aan de Docker-groep, zodat je Docker zonder sudo kunt uitvoeren.
    $ usermod -aG docker user

De volgende stap is om docker-compose te installeren. De tool kan op verschillende manieren worden geïnstalleerd, maar ik geef de voorkeur aan installatie via de pip-manager en virtualenv om de systeemomgeving niet met ongewenste pakketten te vervuilen.

  1. Installeer pip.
    $ sudo yum install python-pip
  2. Installeer virtualenv.
    $ pip install virtualenv
  3. Vervolgens moet je een map voor het project maken en deze initialiseren. De map met alles wat nodig is om de pakketten te beheren, zal ve worden genoemd.
    $ mkdir docker
    $ cd docker
    $ virtualenv ve
  4. Om te beginnen met het gebruik van de virtuele omgeving, moet je de volgende opdracht in de projectmap uitvoeren.
    $ source ve/bin/activate
  5. Je kunt nu docker-compose installeren.
    pip install docker-compose

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

    $ docker network create network

    Daarna moet je docker-compose configureren; de proxy zal zich in de map proxy bevinden, de testwebsite in de map test. Voor dit voorbeeld gebruik ik de domeinnaam example.com.

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

    Inhoud proxy/docker-compose.yml

    versie: '3'
    
    netwerken:
      standaard:
        extern:
          naam: netwerk
    
    diensten:
      nginx-proxy:
        container_naam: nginx-proxy
        afbeelding: jwilder/nginx-proxy
        poorten:
          - 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_naam: nginx-proxy-letsencrypt
        afbeelding: 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
        omgeving:
          - NGINX_PROXY_CONTAINER=nginx-proxy
    
    volumes:
      certs:
      vhost.d:
      html:

    Omgevingsvariabele NGINX_PROXY_CONTAINER is nodig zodat de letsencrypt-container de proxy-container kan zien. De mappen /etc/nginx/certs, /etc/nginx/vhost.d en /usr/share/nginx/html moeten zowel door de één als de andere container gedeeld worden. Voor een correcte werking van de letsencrypt-container moet de applicatie toegankelijk zijn via zowel poort 80 als poort 443.

    Inhoud test/docker-compose.yml

    versie: '3'
    
    netwerken:
      standaard:
        extern:
          naam: netwerk
    
    diensten:
    
      nginx:
        container_naam: nginx
        afbeelding: nginx:latest
        omgeving:
          - VIRTUAL_HOST=example.com
          - LETSENCRYPT_HOST=example.com
          - LETSENCRYPT_EMAIL=admin@example.com

    Hier zijn omgevingsvariabelen nodig, zodat de proxy de verzoeken naar de server correct verwerkt en een certificaat aanvraagt voor de juiste domeinnaam.

    Het enige wat nog rest is om docker-compose uit te voeren.

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

Bron: habr.com

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster