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: 표준 템플릿에 존재하는 것으로 알려진 훅

Discourse Docker와 함께 제공되는 기본 templates/*.yml에서:

훅 이름 일반적인 용도 사용 가능
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/

현재 포함하고 있는 템플릿이 지원하는 모든 훅 이름이 나열됩니다.
거기서 찾은 것은 hooks: 블록 안에서 before_<이름>: 또는 after_<이름>:으로 사용할 수 있습니다.


:blue_book: 참고 자료

이 동작은 Pups README(Discourse의 Docker 설정에 사용되는 구성 관리 도구)에서 간략히 설명되어 있습니다:

“훅은 템플릿 내에서 hook:으로 라벨링된 단계의 앞이나 뒤에 명령을 주입할 수 있는 지점입니다.”


:puzzle_piece: 실제 적용

  • 대부분의 사용자 정의 셸 명령(플러그인 설치 등)에는 after_code:를 사용하세요.
  • 컨테이너 시작 또는 재시작 시 수행되어야 하는 작업에는 새로운 훅 이름을 발명하는 대신 작은 시작 스크립트나 supervisord 태스크를 사용하세요.
  • 자체 훅 타입을 추가하려면 커스텀 hook: something 항목이 포함된 새 템플릿을 만들고, app.yml에서 이를 대상으로 지정하세요.

요약:
템플릿에서 실제로 hook: 항목으로 나타나는 훅 이름만 존재합니다.
표준 Discourse Docker에서는 기본적으로 code, assets_precompile, web입니다.