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, и я предпочитаю это, когда я могу это сделать.

Другие вопросы по тегам