Скорошно смених виртуален сървър и трябваше да настроя всичко отначало. Предпочитам сайтът да е достъпен по 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 - След това да инсталирате docker community edition
$ sudo yum install docker-ce docker-ce-cli containerd.io - Да добавите docker в автоматичното стартиране и да го стартирате
$ sudo systemctl enable docker $ sudo systemctl start docker - Добавете потребителя в групата docker, за да можете да стартирате docker без sudo
$ usermod -aG docker user
Следваща стъпка е да инсталирате docker-compose. Утилитата може да се инсталира по различни начини, но аз предпочитам да я инсталирам чрез pip мениджър и virtualenv, за да не замърсявам системата с излишни пакети.
- Инсталирайте pip
$ sudo yum install python-pip - Инсталирайте virtualenv
$ pip install virtualenv - След това трябва да създадете папка с проекта и да я инициализирате. Папката с всичко необходимо за управление на пакетите ще се нарича ve.
$ mkdir docker $ cd docker $ virtualenv ve - За да започнете да използвате виртуалната среда, трябва да изпълните следната команда в папката с проекта.
$ source ve/bin/activate - Можете да инсталирате 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
