Автоматическое развертывание в production-окружение

Здравствуйте,
У меня установлены две отдельные виртуальные машины Azure с Discourse (тестовая и рабочая). Есть ли способ автоматически разворачивать изменения из тестового Discourse в рабочий Discourse?

Изменения в интерфейсе (темы) будут управляться через репозиторий Git, поэтому их перенос в рабочую среду не составит труда. Основная проблема заключается в автоматизации развертывания настроек и конфигураций Discourse в рабочую среду. Как этого можно добиться?

Вы можете загрузить контейнер для тестирования в репозиторий, а затем запустить его в продакшене. Команда ./launcher start-cmd app предоставит необходимые данные для запуска контейнера в Docker.

Вам также потребуется выполнить миграцию базы данных (возможно, с использованием переменной SKIP_POST_DEPLOYMENT_MIGRATIONS, а затем снова после запуска нового контейнера, если вы хотите обеспечить истинное время простоя, равное нулю), а также предварительно скомпилировать ресурсы.

Некоторые настройки хранятся в базе данных. Другие можно задать через переменные окружения, такие как DISCOURSE_SETTING_NAME (например, DISCOURSE_TITLE='мой замечательный комьюнити').

Более лёгкий подход — использовать это:

Обратите внимание на надпись «Показывать только изменённые» в правом верхнем углу.

Это даст вам список элементов, отличных от настроек по умолчанию, которые вы можете перенести вручную.

В зависимости от ваших потребностей этот способ может оказаться проще. (Хотя стоит отметить, что на моём экземпляре, которому уже несколько лет, более 100 настроек отличаются от значений по умолчанию.)

Файл app.yml можно копировать частично.

Конечно, при этом категории и другие подобные элементы не будут перенесены.

Можно ли этого добиться с помощью автономного подхода, или мне нужно иметь два контейнера (один для базы данных и один для веб-сервера)?

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