Команды запуска в папке /var/discourse не являются самодокументирующимися

Мне пришлось несколько раз изменять и перезагружать конфигурацию для устранения неполадок в почтовом сервисе SiteGround. В сети есть множество советов о том, как сделать это максимально быстро. Однако их обобщение лишь запутывает ситуацию.

Поэтому не могли бы вы подробнее разъяснить различия между перечисленными ниже командами?

Информация в руководстве по установке и сообщениях на этом форуме как-то противоречива. Не до конца ясно, например, в чём разница между инициализацией и сборкой контейнера. Должна существовать «лестница эскалации», указывающая, какие действия требуются при изменении, например, файла app.yml: одни говорят, что достаточно команды start, другие утверждают, что нужно выполнить rebuild или также ./discourse-setup.

Команды:
    start:      Запуск/инициализация контейнера
    stop:       Остановка работающего контейнера
    restart:    Перезапуск контейнера
    destroy:    Остановка и удаление контейнера
    bootstrap:  Подготовка контейнера к запуску на основе шаблона конфигурации
    rebuild:    Пересборка контейнера (удаление старого, подготовка, запуск нового)

У меня постепенно складывается впечатление, что все команды представляют собой последовательность действий.
Каждый последующий шаг/команда выполняет то же самое, что и предыдущий, плюс добавляет что-то ещё.

Например, что-то вроде этого:

  1. Запуск

    1. bootstrap: удаление старого + подготовка контейнера к запуску на основе шаблона конфигурации
    2. rebuild: bootstrap + пересборка контейнера (запуск нового), то есть выполнение таких действий, как загрузка последних версий программного обеспечения и применение обновлённой конфигурации
    3. start: инициализация, что бы это ни значило
  2. Остановка

    1. stop: Остановка работающего контейнера
    2. restart: Перезапуск контейнера (включая остановку)
    3. destroy: Остановка и удаление контейнера

Не совсем уверен, что понимаю, о чём речь… Можешь ли ты создать PR с предлагаемым изменением?

Я собираюсь сделать PR на GitHub, но мне нужно детально понять, что делает каждая команда, а сейчас это не так.

Не могли бы вы рассказать, что запускает каждая команда? Я прочитал много постов на эту тему, но информация противоречива.
Хороший пример — start. В одном месте сказано, что она используется только для остановки и запуска контейнера, например, при выполнении действий на хосте. В другой теме упоминается, что она инициализирует контейнер, но что именно означает «инициализация», непонятно :confused:

Инициализация означает, что если контейнер не существует, он будет создан. Если вы остановите и запустите его снова, будет остановлен и запущен тот же контейнер с теми же параметрами (например, настройки SMTP и другие переменные окружения). Однако, если сначала уничтожить контейнер, будет создан новый контейнер с новыми настройками окружения или он будет инициализирован заново.

В чём разница между bootstrap и start, если контейнер не существует?

Bootstrap создает новый образ Docker, что необходимо для «инициализации» запущенного контейнера.

Пересборка всегда срабатывает. Иногда она излишня, так как для применения настроек окружения (например, SMTP) достаточно уничтожить и запустить контейнер заново. Однако многие пользователи не разберутся в этих тонкостях, поэтому лучше просто рекомендовать им всегда выполнять пересборку, так как это гарантированно работает.

Таким образом, ./discourse-setup — это наименее инвазивная команда, так как она лишь переустанавливает программное обеспечение Discourse.

  1. Bootstrap — полная установка с нуля, начинается с образа Docker.
  2. start — создание контейнера с нуля.
  3. ./discourse-setup — запуск настройки Discourse.

Какая команда доступна для повторного применения конфигурации:

  1. определенной в app.yml?
  2. указанной в app.yml?

При условии, что app.yml является источником всех данных, и ./discourse-setup читает только этот файл для выполнения своих задач.

Если вам нужно точно узнать, что делает каждая команда, вы можете прочитать об этом здесь: discourse_docker/launcher at master · discourse/discourse_docker · GitHub

Спасибо, это помогает :slight_smile:
Там есть описанная ранее настройка, связана ли она с ./discourse-setup?

Теперь это немного более полно:

Использование: launcher КОМАНДА КОНФИГ [--skip-prereqs] [--docker-args СТРОКА]
Команды:
    start:       Запуск/инициализация контейнера
    stop:        Остановка работающего контейнера
    restart:     Перезапуск контейнера
    destroy:     Остановка и удаление контейнера
    enter:       Открытие оболочки для выполнения команд внутри контейнера
    logs:        Просмотр логов Docker для контейнера
    bootstrap:   Инициализация контейнера для конфигурации на основе шаблона
    run:         Выполнение указанной команды с конфигурацией в контексте последнего инициализированного образа
    rebuild:     Пересборка контейнера (удаление старого, инициализация, запуск нового)
    cleanup:     Удаление всех контейнеров, остановленных более чем на 24 часа
    start-cmd:   Генерация команды docker, используемой для запуска контейнера

Опции:
    --skip-prereqs             Не проверять предварительные требования запуска
    --docker-args              Дополнительные аргументы для передачи при запуске docker
    --skip-mac-address         Не назначать MAC-адрес
    --run-image                Переопределить образ, используемый для запуска контейнера
root@monstera:/var/discourse#