Postavljanje automatskog primanja letsencrypt certifikata pomoću dockera na linuxu

Nedavno sam promijenio virtualni poslužitelj i morao sam sve ponovno konfigurirati. Više bih volio da stranica bude dostupna putem https-a i da se certifikati za šifriranje automatski dobivaju i obnavljaju. To se može postići korištenjem dvije docker slike nginx-proxy i nginx-proxy-companion.

Ovo je vodič o tome kako postaviti web mjesto na Dockeru, s proxyjem koji automatski prima SSL certifikate. Koristi se virtualni poslužitelj CentOS 7.

Pretpostavljam da je poslužitelj već kupljen, konfiguriran, prijavljen pomoću ključa, instaliran fail2ban itd.

Prvo morate instalirati docker.

  1. Prvo morate instalirati ovisnosti
    $ sudo yum install -y yum-utils  device-mapper-persistent-data lvm2
  2. Spojite spremište
    $ sudo yum-config-manager  --add-repo  https://download.docker.com/linux/centos/docker-ce.repo
  3. Zatim instalirajte docker community izdanje
    $ sudo yum install docker-ce docker-ce-cli containerd.io
  4. Dodajte docker za pokretanje i pokrenite
    $ sudo systemctl enable docker
    $ sudo systemctl start docker
  5. Dodajte korisnika u docker grupu kako biste mogli pokretati docker bez sudoa
    $ usermod -aG docker user

Sljedeći korak je instaliranje docker-compose. Uslužni program se može instalirati na nekoliko načina, ali ja radije instaliram preko pip managera i virtualenv-a, kako ne bih zatrpao sustav nepotrebnim paketima.

  1. Instalirajte pip
    $ sudo yum install python-pip
  2. Instalirajte virtualenv
    $ pip install virtualenv
  3. Zatim morate stvoriti mapu s projektom i inicijalizirati ga. Mapa sa svime što vam je potrebno za upravljanje paketima zvat će se ve.
    $ mkdir docker
    $ cd docker
    $ virtualenv ve
  4. Da biste počeli koristiti virtualno okruženje, trebate pokrenuti sljedeću naredbu u mapi projekta.
    $ source ve/bin/activate
  5. Možete instalirati docker-compose.
    pip install docker-compose

    Kako bi kontejneri vidjeli jedni druge, napravit ćemo mrežu. Prema zadanim postavkama koristi se upravljački program mosta.

    $ docker network create network

    Zatim trebate konfigurirati docker-compose, proxy će biti u proxy mapi, testna stranica će biti u testnoj mapi. Na primjer, koristim naziv domene example.com

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

    sadržaj 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:

    Varijabla okoline NGINX_PROXY_KONTEJNER potrebno je da letsencrypt spremnik vidi proxy spremnik. Mape /etc/nginx/certs /etc/nginx/vhost.d i /usr/share/nginx/html moraju dijeliti oba spremnika. Da bi spremnik letsencrypt ispravno radio, aplikacija mora biti dostupna na portu 80 i 443.

    sadržaj 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]

    Ovdje su potrebne varijable okruženja kako bi proxy ispravno obradio zahtjev prema poslužitelju i zatražio certifikat za ispravan naziv domene.

    Sve što preostaje je pokrenuti docker-compose

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

Izvor: www.habr.com

Dodajte komentar