Konfigurowanie automatycznego odbierania certyfikatów letsencrypt za pomocą okna dokowanego w systemie Linux

Niedawno zmieniłem serwer wirtualny i musiałem wszystko skonfigurować od nowa. Wolę, aby strona była dostępna przez https i pozwalała na automatyczne uzyskiwanie i odnawianie certyfikatów Letsencrypt. Można to osiągnąć za pomocą dwóch obrazów dokowanych nginx-proxy i nginx-proxy-companion.

To jest poradnik jak skonfigurować stronę internetową na platformie Docker z serwerem proxy, który automatycznie odbiera certyfikaty SSL. Używany jest serwer wirtualny CentOS 7.

Zakładam, że serwer został już zakupiony, skonfigurowany, zalogowany przy użyciu klucza, zainstalowany Fail2ban itp.

Najpierw musisz zainstalować okno dokowane.

  1. Najpierw musisz zainstalować zależności
    $ sudo yum install -y yum-utils  device-mapper-persistent-data lvm2
  2. Połącz repozytorium
    $ sudo yum-config-manager  --add-repo  https://download.docker.com/linux/centos/docker-ce.repo
  3. Następnie zainstaluj wersję społecznościową platformy Docker
    $ sudo yum install docker-ce docker-ce-cli containerd.io
  4. Dodaj okno dokowane do uruchamiania i uruchom
    $ sudo systemctl enable docker
    $ sudo systemctl start docker
  5. Dodaj użytkownika do grupy doków, aby móc uruchamiać okno dokowane bez sudo
    $ usermod -aG docker user

Następnym krokiem jest instalacja docker-compose. Narzędzie można zainstalować na kilka sposobów, ale wolę instalować za pomocą menedżera pip i virtualenv, aby nie zaśmiecać systemu niepotrzebnymi pakietami.

  1. Zainstaluj pipa
    $ sudo yum install python-pip
  2. Zainstaluj virtualenv
    $ pip install virtualenv
  3. Następnie musisz utworzyć folder z projektem i go zainicjować. Folder zawierający wszystko, czego potrzebujesz do zarządzania pakietami, będzie nosił nazwę ve.
    $ mkdir docker
    $ cd docker
    $ virtualenv ve
  4. Aby rozpocząć korzystanie ze środowiska wirtualnego, należy uruchomić następującą komendę w folderze projektu.
    $ source ve/bin/activate
  5. Możesz zainstalować docker-compose.
    pip install docker-compose

    Aby kontenery mogły się widzieć stworzymy sieć. Domyślnie używany jest sterownik mostu.

    $ docker network create network

    Następnie musisz skonfigurować docker-compose, serwer proxy będzie w folderze proxy, strona testowa będzie w folderze testowym. Na przykład używam nazwy domeny example.com

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

    Treść 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:

    Zmienna środowiskowa NGINX_PROXY_CONTAINER konieczne jest, aby kontener letsencrypt widział kontener proxy. Foldery /etc/nginx/certs /etc/nginx/vhost.d i /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.

    Treść 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]

    Tutaj potrzebne są zmienne środowiskowe, aby serwer proxy poprawnie przetworzył żądanie do serwera i zażądał certyfikatu dla prawidłowej nazwy domeny.

    Pozostaje tylko uruchomić docker-compose

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

Źródło: www.habr.com

Dodaj komentarz