Настройка на автоматичен процес за получаване на сертификати letsencrypt с помощта на docker в linux

Скорошно смених виртуален сървър и трябваше да настроя всичко отначало. Предпочитам сайтът да е достъпен по https и сертификатите letsencrypt да се получават и подновяват автоматично. Това може да се постигне, ако използвате два образа docker nginx-proxy и nginx-proxy-companion.

Това е ръководство за настройка на сайт на docker, с прокси, което автоматично получава SSL сертификати. Използва се виртуален сървър CentOS 7.

Предполагам, че сървърът вече е закупен, настроен, влизането в него става с ключ, инсталиран е fail2ban и т.н.

Първо трябва да инсталирате docker.

  1. Първо трябва да инсталирате зависимостите
    $ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
  2. Да се свърже хранилището
    $ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  3. След това да инсталирате docker community edition
    $ sudo yum install docker-ce docker-ce-cli containerd.io
  4. Да добавите docker в автоматичното стартиране и да го стартирате
    $ sudo systemctl enable docker
    $ sudo systemctl start docker
  5. Добавете потребителя в групата docker, за да можете да стартирате docker без sudo
    $ usermod -aG docker user

Следваща стъпка е да инсталирате docker-compose. Утилитата може да се инсталира по различни начини, но аз предпочитам да я инсталирам чрез pip мениджър и virtualenv, за да не замърсявам системата с излишни пакети.

  1. Инсталирайте pip
    $ sudo yum install python-pip
  2. Инсталирайте virtualenv
    $ pip install virtualenv
  3. След това трябва да създадете папка с проекта и да я инициализирате. Папката с всичко необходимо за управление на пакетите ще се нарича ve.
    $ mkdir docker
    $ cd docker
    $ virtualenv ve
  4. За да започнете да използвате виртуалната среда, трябва да изпълните следната команда в папката с проекта.
    $ source ve/bin/activate
  5. Можете да инсталирате docker-compose.
    pip install docker-compose

    За да могат контейнерите да се виждат един друг, ще създадем мрежа. По подразбиране се използва драйвера bridge.

    $ docker network create network

    След това трябва да настроите docker-compose, proxy ще бъде в папката proxy, тестовият сайт в папката test. За пример използвам доменното име example.com

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

    Съдържание proxy/docker-compose.yml

    версия: '3'
    
    мрежи:
      по подразбиране:
        външна:
          име: мрежа
    
    услуги:
      nginx-proxy:
        контейнер_име: nginx-proxy
        изображение: jwilder/nginx-proxy
        портове:
          - 80:80
          - 443:443
        обем:
          - 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:
        контейнер_име: nginx-proxy-letsencrypt
        изображение: jrcs/letsencrypt-nginx-proxy-companion
        обем:
          - certs:/etc/nginx/certs
          - vhost.d:/etc/nginx/vhost.d
          - html:/usr/share/nginx/html
          - /var/run/docker.sock:/var/run/docker.sock:ro
        среда:
          - NGINX_PROXY_CONTAINER=nginx-proxy
    
    обем:
      certs:
      vhost.d:
      html:

    Променлива на средата NGINX_PROXY_CONTAINER е необходима, за да може контейнерът letsencrypt да види контейнера proxy. Папките /etc/nginx/certs, /etc/nginx/vhost.d и /usr/share/nginx/html трябва да се използват съвместно и от двата контейнера. За правилната работа на контейнера letsencrypt, приложението трябва да бъде достъпно и на порт 80, и на порт 443.

    Съдържание test/docker-compose.yml

    версия: '3'
    
    мрежи:
      по подразбиране:
        външна:
          име: мрежа
    
    услуги:
    
      nginx:
        контейнер_име: nginx
        изображение: nginx:latest
        среда:
          - VIRTUAL_HOST=example.com
          - LETSENCRYPT_HOST=example.com
          - LETSENCRYPT_EMAIL=admin@example.com

    Тези променливи на средата са нужни, за да може проксито правилно да обработва заявките към сървъра и да поиска сертификат за правилното домейн име.

    Остава само да стартирате docker-compose

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

Източник: habr.com

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster