Мне регулярно приходится разрабатывать некоторые сервисы на основе Linux, бесплатного программного обеспечения и приложений с закрытым исходным кодом. Я использую QEMU виртуальная машина как среда разработки где я напрямую редактирую файлы на работающем экземпляре и одновременно провожу тесты.
Когда дело готово, я копирую все файлы на рабочий сервер, который сделан из свежей установки ОС, с полной конфигурацией новой среды.Очевидно, что когда система находится в производстве, мне нужно вручную синхронизировать две среды, чтобы сделать их похожими. Когда я исправляю ошибку в рабочей среде, мне нужно перенести исправление в среду разработки.
Разработка состоит из нескольких частей:
- Скрипты Linux и конфигурация программного обеспечения (/etc, /var/www, /home, файлы .config, правила брандмауэра и т. д.)
- Зависимости (список программного обеспечения для загрузки из репозитория программного обеспечения (например, apt-get install xxx)
- Приложение
- База данных
Я хотел бы знать, как сделать правильное управление версиями этой сложной среды.
Я пробовал следующие подходы.
Сценарий резервного копирования создает полный TAR-файл со всеми необходимыми элементами: сценарий для загрузки всех зависимостей, все файлы из приложения, необходимые файлы конфигурации из /etc, последняя версия сценариев резервного копирования и восстановления, дамп базы данных и т.д. .
Сценарий восстановления стирает все текущее приложение и заменяет его версией, присутствующей в файле TAR. Этот подход работает правильно, но немного громоздкий. Требуется много внимания, чтобы убедиться, что сценарий восстановления работает правильно после новой установки.
Этот подход может показаться немного нелепым, я еще не проверял его. Идея заключалась бы в том, чтобы также использовать виртуальную машину в моей производственной среде. Здесь я бы просто скопировал виртуальную машину на VPS и запустил QEMU внутри VPS. Когда я хочу сделать резервную копию, я просто сохраняю где-нибудь диск виртуальной машины. Это может быть не очень эффективно, но, вероятно, приемлемо для проекта, над которым я работаю.
Я тоже не проверял этот подход, но подумал об этом. Идея состоит в том, чтобы использовать программное обеспечение для управления версиями программного обеспечения, такое как GIT, в полной файловой системе после установки ОС. Таким образом, я бы зафиксировал все изменения (двоичные и текстовые файлы).Я мог публиковать изменения в продакшене с помощью программы SCM.
Этот подход основан на специальном программном обеспечении. Я смотрел в этом направлении и слышал о программном обеспечении под названием Kurbernetes, Puppet или другими именами. Это кажется очень сложным в настройке, и я не тратил много времени на изучение этого вопроса.
Каковы передовые методы управления версиями сред на основе Linux?