Какие типы хуков можно использовать в app.yml?

В app.yml на самом деле нет фиксированного глобального списка типов хуков.
Хуки предоставляются динамически Pups, и вы можете подключаться только к тем, которые существуют внутри включаемых вами шаблонов.


:magnifying_glass_tilted_left: Как это работает

Когда вы видите что-то вроде:

hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git

это работает, потому что шаблоны содержат шаг вроде:

- hook: code
  run:
    - exec: ...

Pups позволяет прикреплять команды до или после любой из этих определённых точек хука.
Таким образом, если шаблон определяет hook: code, вы можете использовать before_code: или after_code:.
Если он определяет hook: assets_precompile, вы можете использовать before_assets_precompile: или after_assets_precompile: — и так далее.

Если нет hook: restart (например), то after_restart: просто не сработает.


:white_check_mark: Хуки, которые, как известно, существуют в стандартных шаблонах

Из стандартных templates/*.yml, поставляемых с Discourse Docker:

Имя хука Типичное использование Работает с
code Основной этап настройки для клонирования плагинов, редактирования пользовательских файлов и т. д. before_code: / after_code:
assets_precompile После компиляции ассетов Rails (например, загрузка в S3, очистка) after_assets_precompile:
web Для окончательных доработок перед запуском веб-процесса before_web:

Часто в примерах установки плагинов используются after_code: и before_code: — в большинстве случаев достаточно только их.


:cross_mark: Хуки, которых нет по умолчанию

Имена вроде after_restart или after_post_boot не соответствуют никакому hook: внутри стандартных шаблонов, поэтому Pups не знает, куда их прикрепить.
Они не сработают, если вы не добавите шаг с соответствующим hook: restart в пользовательский шаблон.


:toolbox: Как найти все доступные хуки в вашей системе

Из папки /var/discourse выполните:

grep -R "hook:" -n templates/ samples/

Это выведет список всех имён хуков, поддерживаемых включёнными вами шаблонами.
Любое найденное имя можно использовать как before_<name>: или after_<name>: внутри блока hooks:.


:blue_book: Справочная информация

Это поведение кратко описано в README PUPS (инструмент управления конфигурацией, используемый настройкой Docker для Discourse):

«Хуки — это точки в шаблонах, которые позволяют вставлять команды до или после шага, помеченного как hook:


:puzzle_piece: На практике

  • Используйте after_code: для большинства пользовательских команд оболочки (например, установка плагинов).
  • Для действий, которые должны происходить при загрузке или перезапуске контейнера, используйте небольшой скрипт запуска или задачу supervisord, а не придумывайте новые имена хуков.
  • Чтобы добавить свой собственный тип хука, создайте новый шаблон с пользовательской записью hook: something, а затем обратитесь к нему из app.yml.

TL;DR:
Существуют только те имена хуков, которые фактически встречаются как записи hook: в ваших шаблонах.
В стандартном Discourse Docker это, по сути, code, assets_precompile и web.