Konfigurerer automatisk modtagelse af letsencrypt-certifikater med docker på linux

Jeg har for nylig ændret en virtuel server, og jeg var nødt til at sætte alt op igen. Jeg foretrækker, at siden er tilgængelig via https, og at letsencrypt-certifikater opnås og fornyes automatisk. Dette kan opnås ved at bruge to docker-billeder nginx-proxy og nginx-proxy-companion.

Dette er en guide til, hvordan man opsætter et websted på docker, med en proxy, der automatisk modtager SSL-certifikater. Den virtuelle CentOS 7-server bruges.

Jeg antager, at serveren allerede er købt, konfigureret, adgang til den udføres af nøgle, fail2ban er installeret osv.

Først skal du installere docker.

  1. Først skal du installere afhængighederne
    $ sudo yum install -y yum-utils  device-mapper-persistent-data lvm2
  2. Tilslut repository
    $ sudo yum-config-manager  --add-repo  https://download.docker.com/linux/centos/docker-ce.repo
  3. Installer derefter docker-fællesskabsudgaven
    $ sudo yum install docker-ce docker-ce-cli containerd.io
  4. Tilføj docker til opstart og kørsel
    $ sudo systemctl enable docker
    $ sudo systemctl start docker
  5. Tilføj en bruger til docker-gruppen for at kunne køre docker uden sudo
    $ usermod -aG docker user

Det næste trin er at installere docker-compose. Hjælpeprogrammet kan installeres på flere måder, men jeg foretrækker at installere gennem pip manager og virtualenv, for ikke at tilstoppe systemet med unødvendige pakker.

  1. Installer pip
    $ sudo yum install python-pip
  2. Installer virtualenv
    $ pip install virtualenv
  3. Dernæst skal du oprette en mappe med projektet og initialisere den. Mappen med alt det nødvendige til pakkehåndtering vil hedde ve.
    $ mkdir docker
    $ cd docker
    $ virtualenv ve
  4. For at begynde at bruge det virtuelle miljø skal du køre følgende kommando i projektmappen.
    $ source ve/bin/activate
  5. Du kan installere docker-compose.
    pip install docker-compose

    For at containerne kan se hinanden, lad os skabe et netværk. Brodriveren bruges som standard.

    $ docker network create network

    Dernæst skal du konfigurere docker-compose, proxyen vil være i proxymappen, teststedet i testmappen. For eksempel 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 nødvendig for at letsencrypt-beholderen kan se proxy-beholderen. Mapperne /etc/nginx/certs /etc/nginx/vhost.d og /usr/share/nginx/html skal deles af begge containere. For at letsencrypt-beholderen skal fungere korrekt, skal applikationen være tilgængelig på både 80 og 443 porte.

    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
          - [email protected]

    Her er der brug for miljøvariabler, så proxyen korrekt behandler anmodningen til serveren og anmoder om et certifikat for det korrekte domænenavn.

    Det er kun tilbage at køre docker-compose

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

Kilde: www.habr.com

Tilføj en kommentar