- PVSM.RU - https://www.pvsm.ru -
Менял недавно виртуальный сервер, и пришлось настраивать все заново. Я предпочитаю, чтобы сайт был доступен по https и сертификаты letsencrypt получались и продлевались автоматически. Этого можно добиться, если использовать два образа docker nginx-proxy и nginx-proxy-companion.
Это руководство как настроить сайт на docker, с прокси, которое автоматически получает SSL сертификаты. Используется виртуальный сервер CentOS 7.
Я предполагаю, что сервер уже куплен, настроен, вход на него осуществляется по ключу, установлен fail2ban и т.д.
Для начала нужно установить docker.
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
$ sudo yum install docker-ce docker-ce-cli containerd.io
$ sudo systemctl enable docker
$ sudo systemctl start docker
$ usermod -aG docker user
Следующий шаг — установить docker-compose. Утилиту можно установить несколькими путями, но я предпочитаю устанавливать через pip менеджер и virtualenv, чтобы не засорять систему лишними пакетами.
$ sudo yum install python-pip
$ pip install virtualenv
$ mkdir docker
$ cd docker
$ virtualenv ve
$ source ve/bin/activate
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
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:
Переменная окружения NGINX_PROXY_CONTAINER нужна, чтобы letsencrypt контейнер увидел proxy контейнер. Папки /etc/nginx/certs /etc/nginx/vhost.d и /usr/share/nginx/html должны совместно использоваться и тем и другим контейнером. Для корректной работы letsencrypt контейнера приложение должно быть доступно и по 80 и по 443 порту.
Содержимое 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
- LETSENCRYPT_EMAIL=admin@example.com
Здесь переменные окружения нужны, чтобы прокси корректно обрабатывал запрос к серверу, и запросил сертификат на правильное доменное имя.
Осталось только запустить docker-compose
$ cd proxy
$ docker-compose up -d
$ cd ../test
$ docker-compose up -d
Автор: also_east
Источник [1]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/linux/312718
Ссылки в тексте:
[1] Источник: https://habr.com/ru/post/445448/?utm_campaign=445448
Нажмите здесь для печати.