Konfiguration af automatisk certifikatmodtagelse fra letsencrypt ved hjælp af Docker i Linux

Jeg skiftede for nylig min virtuelle server og måtte indstille alt fra bunden. Jeg foretrækker, at hjemmesiden er tilgængelig via https, og at Letsencrypt-certifikater automatisk opnås og fornyes. Dette kan opnås ved at bruge to Docker-billeder: nginx-proxy og nginx-proxy-companion.

Denne vejledning beskriver, hvordan man indstiller en hjemmeside på Docker med en proxy, der automatisk får SSL-certifikater. En virtuel server med CentOS 7 anvendes.

Jeg antager, at serveren allerede er købt, konfigureret, og at adgangen til den sker via en nøgle, samt at fail2ban er installeret osv.

Først skal Docker installeres.

  1. Start med at installere afhængighederne
    $ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
  2. Tilslut repositoryet
    $ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  3. Derefter installeres Docker community edition
    $ sudo yum install docker-ce docker-ce-cli containerd.io
  4. Tilføj Docker til autostart og start det
    $ sudo systemctl enable docker
    $ sudo systemctl start docker
  5. Tilføj brugeren til Docker-gruppen for at kunne køre Docker uden sudo
    $ usermod -aG docker user

Næste skridt er at installere docker-compose. Værktøjet kan installeres på flere måder, men jeg foretrækker at installere det via pip-manager og virtualenv for at undgå at rodde mit system med unødvendige pakker.

  1. Installer pip
    $ sudo yum install python-pip
  2. Installer virtualenv
    $ pip install virtualenv
  3. Herefter skal der oprettes en mappe til projektet, og denne skal initialiseres. Mappen med alt nødvendigt til pakkehåndtering vil hedde ve.
    $ mkdir docker
    $ cd docker
    $ virtualenv ve
  4. For at begynde at bruge det virtuelle miljø skal følgende kommando udføres i projektmappen.
    $ source ve/bin/activate
  5. Docker-compose kan nu installeres.
    pip install docker-compose

    For at containerne kan se hinanden, opretter vi et netværk. Som standard anvendes bridge-driveren.

    $ docker network create network

    Derefter skal docker-compose konfigureres; proxy'en vil ligge i mappen proxy, og test-siden i mappen test. For eksemplets skyld bruger jeg domænenavnet example.com.

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

    Indhold. 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:

    Miljøvariabel NGINX_PROXY_CONTAINER er nødvendig for at letsencrypt-containeren kan se proxy-containeren. Mapperne /etc/nginx/certs, /etc/nginx/vhost.d og /usr/share/nginx/html skal deles af begge containere. For at letsencrypt-containeren fungerer korrekt, skal applikationen være tilgængelig både på port 80 og port 443.

    Indhold. 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

    Her er miljøvariablerne nødvendige for, at proxyen kan håndtere anmodningen til serveren korrekt og anmode om et certifikat til det rigtige domænenavn.

    Det er kun at starte docker-compose.

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

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster