app.yml에 고정된 전역 훅 타입 목록은 실제로 존재하지 않습니다.
훅은 Pups에 의해 동적으로 제공되며, 포함하는 템플릿 안에 실제로 존재하는 훅에만 연결할 수 있습니다.
작동 방식
다음과 같은 내용을 볼 때:
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:은 단순히 실행되지 않습니다.
표준 템플릿에 존재하는 것으로 알려진 훅
Discourse Docker와 함께 제공되는 기본 templates/*.yml에서:
| 훅 이름 | 일반적인 용도 | 사용 가능 |
|---|---|---|
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 폴더에서 다음을 실행하세요:
grep -R "hook:" -n templates/ samples/
현재 포함하고 있는 템플릿이 지원하는 모든 훅 이름이 나열됩니다.
거기서 찾은 것은 hooks: 블록 안에서 before_<이름>: 또는 after_<이름>:으로 사용할 수 있습니다.
참고 자료
이 동작은 Pups README(Discourse의 Docker 설정에 사용되는 구성 관리 도구)에서 간략히 설명되어 있습니다:
“훅은 템플릿 내에서
hook:으로 라벨링된 단계의 앞이나 뒤에 명령을 주입할 수 있는 지점입니다.”
실제 적용
- 대부분의 사용자 정의 셸 명령(플러그인 설치 등)에는
after_code:를 사용하세요. - 컨테이너 시작 또는 재시작 시 수행되어야 하는 작업에는 새로운 훅 이름을 발명하는 대신 작은 시작 스크립트나
supervisord태스크를 사용하세요. - 자체 훅 타입을 추가하려면 커스텀
hook: something항목이 포함된 새 템플릿을 만들고,app.yml에서 이를 대상으로 지정하세요.
요약:
템플릿에서 실제로 hook: 항목으로 나타나는 훅 이름만 존재합니다.
표준 Discourse Docker에서는 기본적으로 code, assets_precompile, web입니다.