Каков правильный подход для редактирования конфигов?
Здравствуйте. Пишу небольшую программу, которая позволяла бы мне управлять веб-сайтами (редактирование, удаление, привязка и отвязка алиасов). Возник вопрос о том, как лучше выполнять редактирование конфигурационных файлов. Сейчас все сделано так: в базе данных хранится информация о каждом сайте (страницы ошибок, привязанные к сайту, алиасы и основной домен, кодировка, индексные файлы и пр.). При изменении данных я извлекаю из БД данные и формирую старую строку, затем читаю конфиг в строку и произвожу замену, очищаю файл и записываю обратно.
Мне сказали, что это плохой подход. Также появилась идея: при редактировании каждый раз генерировать новый конфиг, но тогда придётся тянуть много информации из базы данных (информация обо всех алиасах хоста, страницах ошибок и пр.) и писать это всё в конфиг.
Какой вариант кажется Вам наиболее правильным?
есть бд с сайтами, с бд твоя прога генерит набор конфигов формата %имя_проги%-%имя_сайта% в папку /etc/nginx/sites-enabled
после изменения сайта в бд, соотвествующий конфиг генерится заново и запускается nginx -s reload
плюс команда reload_all когда удаляются все конфиги формата %имя_проги%-* и все конфиги из базы генерятся заново.
алгоритм проги с структурой базы усложнятся, но зато исчезнет куча вероятных ошибок.
Раскрою про IaaS Ansible way.
Репозиторий с шаблонами конфигов и плейбуком для деплоя
Данные для вставки в шаблоны пусть обновляются тем же приложением, что писало в БД, в отдельные файлы по vhost-ам (в идеале - ещё и пушило обновления в другой репозиторий), которые плейбук будет получать в начале модулем synchronize (в идеале - апдейтить локальный репозиторий данных).