Letsencrypt + Docker - лучший способ справиться с символической ссылкой?
У меня работает сервер Nginx Docker
на хосте Ubuntu, и я хотел интегрировать Letsencrypt
сертификаты на это. Как я имел Nginx
образ, уже созданный со всей настройкой conf, после прочтения различных статей я решил установить Letsencrypt на хост и смонтировать /etc/letsencrypt/
папка в общем объеме в Nginx
контейнер. Проблема, с которой я столкнулся, состоит в том, что символические ссылки принадлежат самой файловой системе и не могут быть разрешены контейнером, что имеет смысл.
Тогда мой вопрос: как лучше всего подойти к этому: следует ли мне добавить все Letsencrypt
установка внутри моего Nginx
пользовательский Dockerfile, чтобы запустить его? Возможно ли создать отдельный контейнер, который имеет только Letsencrypt
и поделитесь объемом оттуда? Или это можно как-то решить с помощью изменений в моем текущем решении?
Обратите внимание, что в данный момент я создаю копию сертификатов и вставляю их в том, что хорошо, но я хочу автоматизировать обновление (используя certbot renew --dry-run
).
Любая помощь высоко ценится!
2 ответа
Вместо запуска давайте зашифруем на хосте, вы должны делать все внутри Docker. И лучшее, что уже есть решение для этого: https://hub.docker.com/r/jrcs/letsencrypt-nginx-proxy-companion/
Это позволяет прокси автоматически получать и обновлять сертификаты.
Символические ссылки в папке letsencrypt будут разрешены в контейнере докеров, если весь каталог смонтирован как том. Или, скорее, если смонтированы и каталог, и интересующий сайт. Я имею в виду, что одна из символических ссылок для сертификата домена letsencrypt выглядит так:
/etc/letsencrypt/live/example.com/cert.pem --> ../../archive/example.com/cert1.pem
Чтобы иметь возможность ссылаться на "живое" имя сертификата из моего контейнера докеров, я создал следующий том, монтируя весь каталог letsencrypt и т. Д.:
-v /etc/letsencrypt:/certs
Поскольку полный
/etc/letsencrypt
монтируется, объем получает оба
live
а также
archive
, поэтому символическая ссылка
../../archive
разрешается, пока я ссылаюсь на абсолютный путь к нужному файлу. В моем файле конфигурации сервера:
certfile /certs/live/example.com/cert.pem
Это работает!
Самое неприятное в том, что я сделал все свои сертификаты letsencrypt доступными только для этого контейнера. Но сейчас это работает для моего варианта использования, когда у меня есть только один домен, для которого я использую letsencrypt на этом сервере. Раньше я использовал letsencrypt-nginx-proxy-companion, и я предпочитаю это, когда я могу это сделать.