Agordante aŭtomatan ricevon de letsencrypt atestiloj kun docker sur Linukso

Mi lastatempe ŝanĝis virtualan servilon, kaj mi devis denove agordi ĉion. Mi preferas, ke la retejo estu alirebla per https kaj ke letsencrypt-atestiloj estu aŭtomate akiritaj kaj renovigitaj. Ĉi tio povas esti atingita uzante du docker-bildojn nginx-proxy kaj nginx-proxy-companion.

Ĉi tio estas gvidilo pri kiel agordi retejon sur docker, kun prokurilo, kiu aŭtomate ricevas SSL-atestilojn. La virtuala servilo CentOS 7 estas uzata.

Mi supozas, ke la servilo jam estis aĉetita, agordita, ĝi estas alirebla per ŝlosilo, fail2ban estas instalita, ktp.

Unue vi devas instali docker.

  1. Unue vi devas instali la dependecojn
    $ sudo yum install -y yum-utils  device-mapper-persistent-data lvm2
  2. Konekti deponejon
    $ sudo yum-config-manager  --add-repo  https://download.docker.com/linux/centos/docker-ce.repo
  3. Poste instalu docker-komunuman eldonon
    $ sudo yum install docker-ce docker-ce-cli containerd.io
  4. Aldonu docker al ekfunkciigo kaj kuru
    $ sudo systemctl enable docker
    $ sudo systemctl start docker
  5. Aldonu uzanton al la docker-grupo por povi ruli docker sen sudo
    $ usermod -aG docker user

La sekva paŝo estas instali docker-compose. La ilo povas esti instalita en pluraj manieroj, sed mi preferas instali per la pip-administranto kaj virtualenv, por ne ŝtopi la sistemon per nenecesaj pakaĵoj.

  1. Instalu pip
    $ sudo yum install python-pip
  2. Instalu virtualenv
    $ pip install virtualenv
  3. Poste, vi devas krei dosierujon kun la projekto kaj pravalorigi ĝin. La dosierujo kun ĉio necesa por pakaĵadministrado estos nomita ve.
    $ mkdir docker
    $ cd docker
    $ virtualenv ve
  4. Por komenci uzi la virtualan medion, vi devas ruli la sekvan komandon en la projekta dosierujo.
    $ source ve/bin/activate
  5. Vi povas instali docker-compose.
    pip install docker-compose

    Por ke la ujoj vidu unu la alian, ni kreu reton. La ponta pelilo estas uzata defaŭlte.

    $ docker network create network

    Poste, vi devas agordi docker-compose, la prokurilo estos en la prokura dosierujo, la testejo en la testa dosierujo. Ekzemple, mi uzas la domajnan nomon example.com

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

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

    mediovariablo NGINX_PROXY_CONTAINER necesa por la letsencrypt-ujo por vidi la prokuran ujon. La dosierujoj /etc/nginx/certs /etc/nginx/vhost.d kaj /usr/share/nginx/html devas esti dividitaj de ambaŭ ujoj. Por ke la letsencrypt-ujo funkciu ĝuste, la aplikaĵo devas esti havebla sur ambaŭ 80 kaj 443 havenoj.

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

    Ĉi tie, mediaj variabloj estas necesaj por ke la prokurilo ĝuste procesas la peton al la servilo kaj petas atestilon por la ĝusta domajna nomo.

    Restas nur ruli docker-compose

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

fonto: www.habr.com

Aldoni komenton