Nginx — Змея Кусает Хвост, Проблема С Автоматизацией Настройки Certbot С Помощью Ansible

  • Автор темы ][Neo
  • Обновлено
  • 22, Oct 2024
  • #1

У меня есть общедоступный веб-сайт с Nginx. Для настройки мы используем бесплатные сертификаты Letsencrypt. if . These are acquired and renewed by Certbot program. I want to implement entire servers configuration with Ansible playbooks. These playbooks have to:

  1. Автоматически настраивайте все с нуля на наборе только что отправленных пустых экземпляров CentOS.
  2. При необходимости иметь возможность настроить другое доменное имя.
  3. Будьте полностью идемпотентными, чтобы я мог внести небольшие изменения и просто запустить их как есть.

Есть две похожие проблемы, с которыми я столкнулся, пытаясь достичь этого.

Во-первых, мне нужен уже запущенный Nginx, чтобы выполнить задачи по получению сертификата, а затем запустить Nginx с другой конфигурацией, чтобы использовать уже полученный сертификат. Когда я получаю сертификат, Nginx должен предоставить некоторые файлы для проверки Letsencrypt. Это влечет за собой несколько проблем:

  1. Playbook приходится запускать Nginx дважды за один раз с разными конфигурациями. Это сложно выразить с помощью Ansible из-за описательного характера сборников сценариев. Nginx теперь имеет разные состояния всего за одно выполнение Playbook. Я больше не выражаю состояния, а скорее указываю.
  2. Использование нескольких немного разных конфигураций означает либо большое количество повторений кода конфигурации Nginx, либо сложность и запутанность. if s in them.

Вторая проблема заключается в том, что я хотел поместить всю свою конфигурацию Nginx в систему VCS, поэтому я хочу, чтобы плейбуки поставлялись с уже написанными конфигурациями Nginx. Однако это не тот путь, который рекомендует Certbot. Certbot хочет, чтобы вы использовали команду, которая анализирует а потом генерирует Конфиги Nginx добавить туда сертификат. Это может показаться удобным, но в этом случае я не могу быть уверен, что результаты будут полностью воспроизводимы. Предположим, я получаю сертификат и генерирую конфигурацию, затем меняю что-то вручную, а затем теряю свои серверы и доменное имя и пытаюсь запустить их с нуля. Тогда могут возникнуть новые проблемы, которых в противном случае не было бы. Мои конфигурации Nginx сложны и содержат множество сервисов на разных портах, условиях и других деталях. Я должен контролировать, как это выглядит.

Я подумывал о создании нескольких разных сборников сценариев для разных случаев. Но это также приводит к повторам кода и усложняет его использование новому сотруднику. А редко используемые сборники сценариев или сценарии могут рассинхронизироваться.

Я нашел решение, которое соответствует всем этим критериям. Но я этим не доволен, потому что это оказалось довольно сложным: настройка Nginx повторялась дважды и много раз. https s and booleans variables. And it's not how Ansible playbooks are intended to be written. Is there a good way to do all this?

#ansible #nginx #certbot #letsencrypt

][Neo


Рег
16 Jun, 2005

Тем
76

Постов
211

Баллов
611
  • 25, Oct 2024
  • #2

Не читайте текст, написанный на сайте Certbot, настоящий разговор в документации.

Чтобы совершать меньше действий, рассмотрите возможность группировки конфигов по доменам. Играет по пьесе, чтобы добиться того, чего вы хотите:

Разверните certbot и nginx без файлов конфигурации, затем для каждого домен на хосте:

  1. Разверните конфигурацию nginx для сервера по умолчанию с помощью certbot certonly -n --web-root=/etc/letsencrypt/challenges --keep -d domain
  2. Перезагрузить конфигурацию nginx
  3. Проверьте наличие сертификата для домена в /etc/letsencrypt/live/domain
  4. Если сертификат уже представлен, завершите запуск.
  5. location /.well-known/acme-challenge { root /etc/letsencrypt/challenges; } to make a cert request
  6. Проверьте наличие сертификата в цикле повтора
  7. Исправление разрешений для действующих сертификатов
  8. Развертывание обычных конфигов nginx

Вы можете развернуть заглушку конфигурации для каждого домена вместо использования сервера по умолчанию. Playbook может запускаться асинхронно для каждого домена.

 

Evgenia24


Рег
15 Aug, 2016

Тем
65

Постов
191

Баллов
516
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно