Discourse-health-check: Discourse 서버의 원샷 CLI 개요

나만의 포럼을 위해 만든 작은 bash 스크립트로, Discourse 서버의 상태를 한 번에 요약해 보여줍니다. 이 같은 빠른 개요가 유용하다고 느끼시는 분들을 위해 공유합니다.

시스템 리소스 확인: Docker, Discourse 서비스(Postgres, Redis, Nginx, Unicorn, Sidekiq), 백업 최신성, TLS, 그리고 기본 보안 사항을 점검합니다. 통과 / 경고 / 치명적 오류에 대한 요약과 cron에 적합한 종료 코드로 마무리됩니다.

설치

curl -O https://raw.githubusercontent.com/haydenjames/discourse-health-check/main/discourse-health-check.sh
chmod +x discourse-health-check.sh
sudo ./discourse-health-check.sh

소스, 옵션, cron 예제는 README에서 확인하세요:


새 버전 v1.0.4:

두 가지 수정 사항:

  1. Discourse가 Unicorn을 Pitchfork로 대체했습니다(2026.2 버전에서 기본값, 2026.4 버전에서 Unicorn 완전 제거). 따라서 웹 서버 체크는 이제 두 가지를 모두 감지합니다. 6월에 이 문제를 지적해 주신 @RGJ님께 감사드립니다.

  2. 서비스 프로브가 자신의 커맨드 라인을 매칭하고 있었습니다. pgrep -f <name>을 사용했기 때문에 pgrep이 자기 자신을 매칭하여, 서비스가 실제로 실행 중이든 아니든 체크가 통과되었습니다. Sidekiq은 1.0.0 버전 이후로 조건 없이 "실행 중"으로 보고되었습니다. 서비스가 죽어 있더라도 cron에서 여전히 녹색 체크와 종료 코드 0을 받을 수 있었습니다. 이는 1.0.1 버전의 Puma 오탐(False positive)과 동일한 근본 원인으로, 당시에는 수정이 아닌 이름 변경이었음이 드러났습니다.

9개의 좋아요

Discourse는 Puma를 실행하지 않습니다.

3개의 좋아요

유니콘. 고쳤습니다. 감사합니다.

1개의 좋아요

요즘은 포크!

2개의 좋아요

좋은 제안 감사합니다!

백업과 관련해서는, 최신 백업 파일이 작성된 이후에 읽혀졌는지 확인해 보시길 권해 드립니다. 이는 백업이 오프사이트로 복사되었는지를 확인하는 대안적 방법입니다. (최신 파일이 아닌 모든 파일을 확인해야 한다면, 전부 확인해 보시는 것도 좋습니다.)

만약 일주일 동안 오프사이트로 복사된 백업이 없다면, 경고할 가치가 있습니다.

(stat -c %Y 값에서 stat -c %X 값을 빼거나, 아니면 단순히 두 값을 비교하면 될 것 같습니다. 백업 파일이 작성된 이후에 읽혀졌다면 두 값은 서로 다를 것입니다.)

5개의 좋아요

@Ed_S 좋은 제안이었습니다. v1.0.2에 추가했습니다. 최신 백업의 atime과 mtime을 비교하여, 기록된 이후로 읽힌 적이 없으면 경고를 표시합니다. atime이 신뢰할 수 없는 환경에서는 noatime 체크를 통해 깔끔하게 건너뛰도록 했습니다. 공헌자로 기재해 두었습니다. 감사합니다!

4개의 좋아요