- 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:
- Автоматически настраивайте все с нуля на наборе только что отправленных пустых экземпляров CentOS.
- При необходимости иметь возможность настроить другое доменное имя.
- Будьте полностью идемпотентными, чтобы я мог внести небольшие изменения и просто запустить их как есть.
Есть две похожие проблемы, с которыми я столкнулся, пытаясь достичь этого.
Во-первых, мне нужен уже запущенный Nginx, чтобы выполнить задачи по получению сертификата, а затем запустить Nginx с другой конфигурацией, чтобы использовать уже полученный сертификат. Когда я получаю сертификат, Nginx должен предоставить некоторые файлы для проверки Letsencrypt. Это влечет за собой несколько проблем:
- Playbook приходится запускать Nginx дважды за один раз с разными конфигурациями. Это сложно выразить с помощью Ansible из-за описательного характера сборников сценариев. Nginx теперь имеет разные состояния всего за одно выполнение Playbook. Я больше не выражаю состояния, а скорее указываю.
- Использование нескольких немного разных конфигураций означает либо большое количество повторений кода конфигурации 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