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

**URL:** <https://meta.discourse.org/t/what-are-all-the-hook-types-i-can-use-in-app-yml/387953>\
**Category:** Support\
**Created:** [08.Ноябрь.2025 20:49:01 UTC](https://meta.discourse.org/t/what-are-all-the-hook-types-i-can-use-in-app-yml/387953 "2025-11-08T20:49:01Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![Jonathan\_Candler](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jonathan_candler/32/528393_2.png) [@Jonathan\_Candler](https://meta.discourse.org/u/Jonathan_Candler)\
**Post date:** [08.Ноябрь.2025 20:49:01 UTC](https://meta.discourse.org/t/what-are-all-the-hook-types-i-can-use-in-app-yml/387953/1 "2025-11-08T20:49:01Z")

</div>

Привет! Пытаюсь настроить хук для автоматического подключения к моей Docker-сети при перезапуске или загрузке Discourse после сборки. Это нужно, чтобы я мог использовать веб-обновление администратора, когда это возможно, но я пытаюсь понять, какой способ лучше всего подходит. В документации не указаны все типы хуков, которые можно использовать, а поиск хуков, таких как after\_post\_boot и after\_restart, ничего не дает. Не работают ли эти хуки больше, и если да, то почему? Вот мой код хуков.

hooks:

## начало пользовательского сетевого хука

after\_restart:

- exec:  
cmd:
- bash
- “-c”
- |

# Подключить Discourse к пользовательской Docker-сети, если еще не подключено

NETWORK\_NAME=“proxy”  
CONTAINER\_NAME=$(hostname)

```yaml
        # Создать сеть, если её нет
        if ! docker network inspect "$NETWORK_NAME" >/dev/null 2>&1; then
          echo "Создание Docker-сети: $NETWORK_NAME"
          docker network create "$NETWORK_NAME"
        fi

        # Подключить контейнер к сети (игнорировать, если уже подключен)
        echo "Подключение $CONTAINER_NAME к $NETWORK_NAME..."
        docker network connect "$NETWORK_NAME" "$CONTAINER_NAME" 2>/dev/null || true

        echo "Подключение к сети завершено."

```

## конец пользовательского сетевого хука

---

<div class="post-metadata">

**Author:** ![Ethsim2](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ethsim2/32/522255_2.png) [@Ethsim2](https://meta.discourse.org/u/Ethsim2)\
**Post date:** [08.Ноябрь.2025 22:54:06 UTC](https://meta.discourse.org/t/what-are-all-the-hook-types-i-can-use-in-app-yml/387953/2 "2025-11-08T22:54:06Z")

</div>

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

* * *

### 🔍 Как это работает

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

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

```

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

```yaml
- hook: code
  run:
    - exec: ...

```

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

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

* * *

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

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

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

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

* * *

### ❌ Хуки, которых _нет_ по умолчанию

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

* * *

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

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

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

```

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

* * *

### 📘 Справочная информация

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

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

* * *

### 🧩 На практике

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

* * *

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

---

<div class="post-metadata">

**Author:** ![NateDhaliwal](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/natedhaliwal/32/313494_2.png) [@NateDhaliwal](https://meta.discourse.org/u/NateDhaliwal)\
**Post date:** [09.Ноябрь.2025 04:10:20 UTC](https://meta.discourse.org/t/what-are-all-the-hook-types-i-can-use-in-app-yml/387953/3 "2025-11-09T04:10:20Z")

</div>

Для справки, репозиторий Pups, я полагаю, находится здесь:

> **[GitHub - discourse/pups: Simple yaml based bootstrapper for Linux machines](https://github.com/discourse/pups)**
>
> Simple yaml based bootstrapper for Linux machines

@Ethsim2 я не вижу ничего относительно

> [@Ethsim2](#):
>
> > «Хуки — это точки в шаблонах, которые позволяют внедрять команды до или после шага, помеченного как `hook:`».

Возможно, вам стоит проверить ответ ИИ перед его публикацией 🙂.

Из README:

> Выполнять команды до и после определённой команды, определив хук.

---

<div class="post-metadata">

**Author:** ![Ethsim2](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ethsim2/32/522255_2.png) [@Ethsim2](https://meta.discourse.org/u/Ethsim2)\
**Post date:** [09.Ноябрь.2025 08:41:29 UTC](https://meta.discourse.org/t/what-are-all-the-hook-types-i-can-use-in-app-yml/387953/5 "2025-11-09T08:41:29Z")

</div>

> [@Ethsim2](#):
>
> Хуки — это точки в шаблонах, позволяющие вставлять команды до или после шага, помеченного как `hook:`.

Из репозитория GitHub:

> [@NateDhaliwal](#):
>
> Выполнение команд до и после конкретной команды путём определения хука.

Как насчёт этого?

> Хуки позволяют выполнять пользовательские команды до или после конкретного шага сборки, определяя `before_<имя>:` или `after_<имя>:` в соответствии с меткой `hook: <имя>` в шаблоне.

---

<div class="post-metadata">

**Author:** ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)\
**Post date:** [10.Ноябрь.2025 18:06:50 UTC](https://meta.discourse.org/t/what-are-all-the-hook-types-i-can-use-in-app-yml/387953/6 "2025-11-10T18:06:50Z")

</div>

> [@Jonathan\_Candler](#):
>
> Пытаюсь настроить хук для автоматического подключения к моей сети Docker при перезапуске или загрузке Discourse после сборки.

Думаю, хуки вам не помогут. Вы говорите, что при запуске web-updater ваш контейнер отключается от сети Docker?

Я почти уверен, что web-updater не перезапускает контейнер — именно поэтому он может работать, не выключая Discourse.

---

<div class="post-metadata">

**Author:** ![featheredtoast](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/featheredtoast/32/116994_2.png) [@featheredtoast](https://meta.discourse.org/u/featheredtoast)\
**Post date:** [10.Ноябрь.2025 18:13:59 UTC](https://meta.discourse.org/t/what-are-all-the-hook-types-i-can-use-in-app-yml/387953/7 "2025-11-10T18:13:59Z")

</div>

> [@pfaffman](#):
>
> web-updater не перезапускает контейнер

Это верно.

Также стоит отметить, что хуки выполняются внутри контейнера для сборки образа Discourse. Ничего не запускается на хосте, и через функции launcher невозможно воссоздать или уничтожить сети Docker.

Возможно, было бы лучше объяснить, с какой проблемой вы столкнулись при размещении, чтобы мы лучше понимали, что именно вы пытаетесь решить.

---

<div class="post-metadata">

**Author:** ![Jonathan\_Candler](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jonathan_candler/32/528393_2.png) [@Jonathan\_Candler](https://meta.discourse.org/u/Jonathan_Candler)\
**Post date:** [10.Ноябрь.2025 20:35:45 UTC](https://meta.discourse.org/t/what-are-all-the-hook-types-i-can-use-in-app-yml/387953/8 "2025-11-10T20:35:45Z")

</div>

Обновление возможно только через CLI, и это разрывает соединение с Docker-сетью, но это происходит лишь потому, что контейнер перезапускается с этого момента. Я попробую веб-обновление, так как еще не применял его в этой конфигурации. Я думал, что здесь проявится такое же поведение, но если веб-обновление не выключает контейнеры, то беспокоиться действительно не о чем. Причиной, по которой я всё это описал, стало то, что я видел, как у людей возникали проблемы при запуске веб-обновления в этот момент. Но я попробую обновить и посмотрю, как всё пройдет.

Джоннибой! Айфоны — это круто!

---

<div class="post-metadata">

**Author:** ![tobiaseigen](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/tobiaseigen/32/539204_2.png) [@tobiaseigen](https://meta.discourse.org/u/tobiaseigen)\
**Post date:** [03.Декабрь.2025 20:43:12 UTC](https://meta.discourse.org/t/what-are-all-the-hook-types-i-can-use-in-app-yml/387953/9 "2025-12-03T20:43:12Z")

</div>



---

<div class="post-metadata">

**Author:** ![tobiaseigen](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/tobiaseigen/32/539204_2.png) [@tobiaseigen](https://meta.discourse.org/u/tobiaseigen)\
**Post date:** [03.Декабрь.2025 20:44:53 UTC](https://meta.discourse.org/t/what-are-all-the-hook-types-i-can-use-in-app-yml/387953/10 "2025-12-03T20:44:53Z")

</div>

Я сделал эту тему скрытой и закрою её, установив таймер для удаления. В текущем виде она лишь запутывает и не полезна. @Jonathan_Candler, если вам всё ещё нужна помощь, пожалуйста, создайте новую тему в #Support, чтобы объяснить проблему, которую вы пытаетесь решить.

---

<div class="post-metadata">

**Author:** ![tobiaseigen](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/tobiaseigen/32/539204_2.png) [@tobiaseigen](https://meta.discourse.org/u/tobiaseigen)\
**Post date:** [03.Декабрь.2025 20:44:56 UTC](https://meta.discourse.org/t/what-are-all-the-hook-types-i-can-use-in-app-yml/387953/11 "2025-12-03T20:44:56Z")

</div>


