Nastavenie automatického prijímania certifikátov letsencrypt pomocou dockeru na linuxe

Nedávno som zmenil virtuálny server a musel som všetko znova nakonfigurovať. Uprednostňujem, aby bola stránka prístupná cez https a aby sa automaticky získavali a obnovovali certifikáty. Dá sa to dosiahnuť použitím dvoch obrázkov ukotvenia nginx-proxy a nginx-proxy-companion.

Toto je návod, ako nastaviť webovú stránku na Docker s proxy, ktorá automaticky prijíma certifikáty SSL. Používa sa virtuálny server CentOS 7.

Predpokladám, že server už bol zakúpený, nakonfigurovaný, prihlásený pomocou kľúča, nainštalovaný fail2ban atď.

Najprv musíte nainštalovať docker.

  1. Najprv musíte nainštalovať závislosti
    $ sudo yum install -y yum-utils  device-mapper-persistent-data lvm2
  2. Pripojte úložisko
    $ sudo yum-config-manager  --add-repo  https://download.docker.com/linux/centos/docker-ce.repo
  3. Potom nainštalujte vydanie komunity docker
    $ sudo yum install docker-ce docker-ce-cli containerd.io
  4. Pridajte dokovaciu stanicu do spustenia a spustite
    $ sudo systemctl enable docker
    $ sudo systemctl start docker
  5. Pridajte používateľa do skupiny docker, aby ste mohli spustiť docker bez sudo
    $ usermod -aG docker user

Ďalším krokom je inštalácia docker-compose. Pomôcku je možné nainštalovať viacerými spôsobmi, ale ja preferujem inštaláciu cez pip manager a virtualenv, aby som nezahltil systém zbytočnými balíkmi.

  1. Nainštalujte pip
    $ sudo yum install python-pip
  2. Nainštalujte virtualenv
    $ pip install virtualenv
  3. Ďalej musíte vytvoriť priečinok s projektom a inicializovať ho. Priečinok so všetkým, čo potrebujete na správu balíkov, sa bude volať ve.
    $ mkdir docker
    $ cd docker
    $ virtualenv ve
  4. Ak chcete začať používať virtuálne prostredie, musíte v priečinku projektu spustiť nasledujúci príkaz.
    $ source ve/bin/activate
  5. Môžete si nainštalovať docker-compose.
    pip install docker-compose

    Aby kontajnery na seba videli, vytvoríme sieť. Štandardne sa používa ovládač mosta.

    $ docker network create network

    Ďalej musíte nakonfigurovať docker-compose, proxy bude v priečinku proxy, testovacia lokalita bude v priečinku test. Napríklad používam názov domény example.com

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

    obsah 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:

    Premenná prostredia NGINX_PROXY_CONTAINER je potrebné, aby kontajner letsencrypt videl kontajner proxy. Priečinky /etc/nginx/certs /etc/nginx/vhost.d a /usr/share/nginx/html musia byť zdieľané oboma kontajnermi. Aby kontajner letsencrypt fungoval správne, aplikácia musí byť prístupná na porte 80 aj 443.

    obsah 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]

    Tu sú potrebné premenné prostredia, aby proxy server správne spracoval požiadavku na server a vyžiadal si certifikát pre správny názov domény.

    Zostáva len spustiť docker-compose

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

Zdroj: hab.com

Pridať komentár