Configurarea obținerii automate a certificatelor letsencrypt folosind docker în linux

Am schimbat recent serverul virtual și a trebuit să configurez totul din nou. Prefer ca site-ul să fie accesibil prin https, iar certificatele letsencrypt să fie obținute și reînewlate automat. Acest lucru se poate realiza folosind două imagini docker: nginx-proxy și nginx-proxy-companion.

Acest ghid este despre cum să configurezi un site pe docker, cu un proxy care obține automat Certificate SSL. Se folosește un server virtual CentOS 7.

Presupun că serverul a fost deja cumpărat, configurat, accesul se face prin cheie, este instalat fail2ban, etc.

Pentru început, trebuie să instalezi docker.

  1. Mai întâi trebuie să instalezi dependențele
    $ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
  2. Conectează depozitul
    $ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  3. Apoi instalează docker community edition
    $ sudo yum install docker-ce docker-ce-cli containerd.io
  4. Adaugă docker la pornirea automată și pornește-l
    $ sudo systemctl enable docker
    $ sudo systemctl start docker
  5. Adaugă utilizatorul în grupul docker, pentru a putea rula docker fără sudo
    $ usermod -aG docker user

Următorul pas este să instalezi docker-compose. Utilitarul poate fi instalat în mai multe moduri, dar prefer să-l instalez prin managerul pip și virtualenv, pentru a nu aglomera sistemul cu pachete inutile.

  1. Instalează pip
    $ sudo yum install python-pip
  2. Instalează virtualenv
    $ pip install virtualenv
  3. Mai departe, trebuie să creezi un folder pentru proiect și să-l inițializezi. Folderul cu tot ce este necesar pentru gestionarea pachetelor se va numi ve.
    $ mkdir docker
    $ cd docker
    $ virtualenv ve
  4. Pentru a începe să folosești mediul virtual, trebuie să execuți următoarea comandă în folderul proiectului.
    $ source ve/bin/activate
  5. Poți instala docker-compose.
    pip install docker-compose

    Pentru ca containerele să se vadă între ele, vom crea o rețea. Implicit se folosește driverul bridge.

    $ docker network create network

    Apoi trebuie să configurezi docker-compose, proxy-ul va fi în folderul proxy, iar site-ul de test în folderul test. Ca exemplu, folosesc numele de domeniu example.com.

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

    Conținut proxy/docker-compose.yml

    versiune: '3'
    
    rețele:
      default:
        extern:
          nume: rețea
    
    servicii:
      nginx-proxy:
        nume_container: nginx-proxy
        imagine: jwilder/nginx-proxy
        porturi:
          - 80:80
          - 443:443
        volume:
          - 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:
        nume_container: nginx-proxy-letsencrypt
        imagine: jrcs/letsencrypt-nginx-proxy-companion
        volume:
          - certs:/etc/nginx/certs
          - vhost.d:/etc/nginx/vhost.d
          - html:/usr/share/nginx/html
          - /var/run/docker.sock:/var/run/docker.sock:ro
        mediu:
          - NGINX_PROXY_CONTAINER=nginx-proxy
    
    volume:
      certs:
      vhost.d:
      html:

    Variabilă de mediu NGINX_PROXY_CONTAINER este necesară pentru ca containerul letsencrypt să vadă containerul proxy. Folderele /etc/nginx/certs, /etc/nginx/vhost.d și /usr/share/nginx/html trebuie să fie utilizate de ambele containere. Pentru ca containerul letsencrypt să funcționeze corect, aplicația trebuie să fie accesibilă atât pe portul 80, cât și pe portul 443.

    Conținut test/docker-compose.yml

    versiune: '3'
    
    rețele:
      default:
        extern:
          nume: rețea
    
    servicii:
    
      nginx:
        nume_container: nginx
        imagine: nginx:latest
        mediu:
          - VIRTUAL_HOST=example.com
          - LETSENCRYPT_HOST=example.com
          - LETSENCRYPT_EMAIL=admin@example.com

    Aici variabilele de mediu sunt necesare pentru ca proxy să proceseze corect cererea către server și să solicite certificat pentru numele de domeniu corect.

    Rămâne doar să lansăm docker-compose

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

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster