From 91fafb96cf6c3fd0eda349b7ee15a45201a3dbba Mon Sep 17 00:00:00 2001 From: erjemin Date: Fri, 14 Feb 2025 10:24:57 +0300 Subject: [PATCH] =?UTF-8?q?add:=20Nginx=20=D0=B8=20Certboot=20=D0=B2=20Doc?= =?UTF-8?q?ker=20(5)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker/docker-nginx-w-certbot.md | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/docker/docker-nginx-w-certbot.md b/docker/docker-nginx-w-certbot.md index 13ac8c8..15ee72d 100644 --- a/docker/docker-nginx-w-certbot.md +++ b/docker/docker-nginx-w-certbot.md @@ -111,17 +111,17 @@ networks: - `portainer` (у вас его может и не быть, или быть какой-то другой сервис, который вы будете производить): - `image: portainer/portainer-ce:latest` — используем образ Portainer Community Edition; - `container_name: portainer` — имя контейнера `portainer`; - - `volumes: ...` — монтируем файлы или тома изнутри контейнера Portainer на хост. В данном случае монтируем: сокет -- + - `volumes: ...` — монтируем файлы или тома изнутри контейнера на хост. В данном случае маппим: сокет — чтобы изнутри контейнера Portainer можно было через Docker API управлять Docker самого хоста (вот так хитро) и каталог `/home/web/docker-data/portainer` — чтобы сохранять настройки и данные Portainer между перезапусками; - - `restart: always` — автоматически перезапускаем контейнер при его остановке; + - `restart: always` — автоматически перезапускаем контейнер при его остановке или перезагрузке хоста; - `networks: ...` — подключаем контейнер к пользовательской (внутри-контейнерной) сети `web`. - `nginx`: - `image: nginx:latest` — используем образ Nginx; - `container_name: nginx` — имя контейнера `nginx`; - - `ports: ...` — пробрасываем порты 80 и 443 на хост; + - `ports: ...` — пробрасываем порты 80 и 443 из контейнера на хост; - `volumes: ...` — монтируем каталог с конфигурационными файлами Nginx; - - `restart: always` — автоматически перезапускаем контейнер при его остановке; + - `restart: always` — автоматически перезапускаем контейнер при его остановке или перезагрузке хоста; - `networks: ...` — подключаем контейнер к пользовательской (внутри-контейнерной) сети `web`. - `networks: ...`: - `web`: @@ -211,7 +211,7 @@ mkdir -p /home/web/docker-data/letsencrypt/_ownership_check ``` *Тут происходит очень похожий маппинг тома для сертификатов Let's Encrypt и временных файлов для проверки -владения, но теперь для контейнера nginx*: +владения, но теперь в контейнер с nginx*: - `volumes: ...`: - `/home/web/docker-data/letsencrypt/_cert:/etc/letsencrypt` — маппинг тома для сертификатов Let's Encrypt, чтобы их @@ -252,18 +252,21 @@ server { включённом proxy_pass. **Важно!** После того как сертификаты Let's Encrypt будут получены, не надо удалять этот `location ^~` из конфигурации! -Он нужен для автоматического обновления сертификатов. При обновлении сертификатов certbot будет снова создавать -временные файлы в каталоге `/var/www/letsencrypt/` а Let's Encrypt проверять их доступность. Если nginx не сможет отдать -эти файлы, то обновление сертификатов не произойдет. +Он нужен для автоматического обновления сертификатов: certbot будет снова создавать временные файлы в каталоге +`/var/www/letsencrypt/`, а сервера Let's Encrypt "дергать" их и тем самым проверять права владения. Если nginx +не сможет отдать эти файлы, то и обновление сертификатов не произойдет. -Останавливаем docker-compose и запускаем только nginx из него: +Останавливаем docker-compose и перезапускаем (сначала все контейнеры, чтобы инициализировать контейнер certbot, а затем +только nginx, чтобы он отдавать временные файлы для проверки владения доменом): ```bash cd /home/web/docker-data docker-compose down +docker-compose up -d +docker-compose down docker-compose up -d nginx ``` -Теперь можно запустить certbot для получения сертификатов Let's Encrypt: +Теперь нужно мз контейнера `certbot` инициализировать получение сертификатов Let's Encrypt: ```bash docker run --rm --name letsencrypt-certbot \ -v /home/web/docker-data/letsencrypt/_ownership_check:/var/www/html \ @@ -296,8 +299,8 @@ If you like Certbot, please consider supporting our work by: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ``` -Если у вас что-то пойдёт не так, то скорее всего что-то напутано в маппингах томов, или в конфигурации nginx. Вы можете -посмотреть логи certbot (возможно вам придется замаппить каталог логов из контейнера certbot на хост). +Если у вас что-то пойдёт не так, то скорее всего напутано в маппингах томов или в конфигурации nginx. Вы можете +посмотреть логи `certbot` (возможно вам придется замаппить каталог логов из контейнера certbot на хост). Уже хочется проверить, что все работает? Рано! Нам нужно добавить в конфигурацию nginx SSL-сертификаты и настроить перенаправление с HTTP на HTTPS. Отредактируем конфиг nginx, теперь он будет выглядеть так: