add: Nginx и Certboot в Docker (5)

This commit is contained in:
Sergei Erjemin 2025-02-14 10:24:57 +03:00
parent 9064bad6d1
commit 91fafb96cf

View File

@ -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, теперь он будет выглядеть так: