Konfiguracja automatycznego uzyskiwania certyfikatów letsencrypt za pomocą dockera w systemie linux

Niedawno zmieniłem serwer wirtualny i musiałem wszystko skonfigurować od nowa. Preferuję, aby strona była dostępna przez https i certyfikaty letsencrypt były uzyskiwane i odnawiane automatycznie. Można to osiągnąć, używając dwóch obrazów docker: nginx-proxy i nginx-proxy-companion.

To jest przewodnik, jak skonfigurować stronę na dockerze, z proxy, które automatycznie uzyskuje Certyfikaty SSL. Używany jest serwer wirtualny CentOS 7.

Zakładam, że serwer został już zakupiony, skonfigurowany, dostęp jest realizowany przez klucz, zainstalowano fail2ban itd.

Na początek należy zainstalować docker.

  1. Najpierw należy zainstalować zależności
    $ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
  2. Podłączyć repozytorium
    $ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  3. Następnie zainstalować edycję społecznościową dockera
    $ sudo yum install docker-ce docker-ce-cli containerd.io
  4. Dodać dockera do autostartu i uruchomić
    $ sudo systemctl enable docker
    $ sudo systemctl start docker
  5. Dodać użytkownika do grupy docker, aby mieć możliwość uruchamiania dockera bez sudo
    $ usermod -aG docker user

Następny krok to zainstalowanie docker-compose. Narzędzie można zainstalować na kilka sposobów, ale preferuję instalację przez menedżera pip i virtualenv, aby nie zaśmiecać systemu zbędnymi pakietami.

  1. Zainstalować pip
    $ sudo yum install python-pip
  2. Zainstalować virtualenv
    $ pip install virtualenv
  3. Teraz należy utworzyć katalog projektu i go zainicjować. Katalog z wszystkimi potrzebnymi do zarządzania pakietami będzie nazywał się ve.
    $ mkdir docker
    $ cd docker
    $ virtualenv ve
  4. Aby rozpocząć korzystanie z wirtualnego środowiska, należy wykonać następującą komendę w katalogu projektu.
    $ source ve/bin/activate
  5. Można teraz zainstalować docker-compose.
    pip install docker-compose

    Aby kontenery mogły się wzajemnie widzieć, utworzymy sieć. Domyślnie używany jest sterownik bridge.

    $ docker network create network

    Następnie należy skonfigurować docker-compose, proxy będzie znajdować się w katalogu proxy, a testowa strona w katalogu test. Dla przykładu używam nazwy domeny example.com

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

    Zawartość proxy/docker-compose.yml

    wersja: '3'
    
    sieci:
      domyślna:
        zewnętrzna:
          nazwa: sieć
    
    usługi:
      nginx-proxy:
        nazwa_kontenera: nginx-proxy
        obraz: jwilder/nginx-proxy
        porty:
          - 80:80
          - 443:443
        woluminy:
          - certyfikaty:/etc/nginx/certyfikaty
          - vhost.d:/etc/nginx/vhost.d
          - html:/usr/share/nginx/html
          - /var/run/docker.sock:/tmp/docker.sock:ro
    
      nginx-proxy-letsencrypt:
        nazwa_kontenera: nginx-proxy-letsencrypt
        obraz: jrcs/letsencrypt-nginx-proxy-companion
        woluminy:
          - certyfikaty:/etc/nginx/certyfikaty
          - vhost.d:/etc/nginx/vhost.d
          - html:/usr/share/nginx/html
          - /var/run/docker.sock:/var/run/docker.sock:ro
        środowisko:
          - NGINX_PROXY_CONTAINER=nginx-proxy
    
    woluminy:
      certyfikaty:
      vhost.d:
      html:

    Zmienna środowiskowa NGINX_PROXY_CONTAINER jest potrzebna, aby kontener letsencrypt mógł zobaczyć kontener proxy. Foldery /etc/nginx/certyfikaty, /etc/nginx/vhost.d oraz /usr/share/nginx/html muszą być współdzielone przez oba kontenery. Aby kontener letsencrypt działał poprawnie, aplikacja musi być dostępna zarówno na porcie 80, jak i 443.

    Zawartość test/docker-compose.yml

    wersja: '3'
    
    sieci:
      domyślna:
        zewnętrzna:
          nazwa: sieć
    
    usługi:
    
      nginx:
        nazwa_kontenera: nginx
        obraz: nginx:najświeższy
        środowisko:
          - VIRTUAL_HOST=example.com
          - LETSENCRYPT_HOST=example.com
          - LETSENCRYPT_EMAIL=admin@example.com

    Tutaj zmienne środowiskowe są potrzebne, aby proxy poprawnie obsługiwało żądania do serwera i żądało certyfikatu na poprawną nazwę domeny.

    Pozostało tylko uruchomić docker-compose

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

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster