GitHub(nextgroup2706/ken_nogi)は今後使わず自社Gitea運用に切替え。 NodeSrvは旧リポジトリの履歴を破棄しファイルのみ統合(Dokploy用サービスアカウントは 別途mygit-admin/NodeSrv.gitに履歴あり)。notepmエクスポート(12GB)とPleasanter インストーラzip(208MB)はサイズが大きいため.gitignoreで除外。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| src | ||
| test | ||
| .dockerignore | ||
| .env.example | ||
| docker-compose.local.yml | ||
| docker-compose.yml | ||
| Dockerfile | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
keycloak-monitor
Keycloak(nexthdレルム)のSSO疎通を定期監視し、異常時にメール通知するアプリ。
2026-08-13にKeycloakのDB接続断(Docker組み込みDNSのSERVFAIL、詳細はプロジェクトメモリproject_dokploy_multiserver_plan参照)でプリザンター・XWikiのSSOが停止した際、発覚が偶然の作業中だったことを受けて作成。
何を監視しているか
単純なHTTP 200チェック(.well-known等)ではKeycloakプロセスが生きているだけでDB接続断を検知できない(実際に2026-08-13はプロセス自体は200を返し続けていた)。そのため、実際にclient_credentialsグラントでtoken発行を行い、DB接続まで含めた実疎通を確認する。
- 監視対象:
${KEYCLOAK_BASE_URL}/realms/${KEYCLOAK_REALM}/protocol/openid-connect/token - 使用クライアント: org-master-syncの既存サービスアカウント(client_credentials、権限追加不要)
アラートの挙動
単発の揺らぎで通知が飛ばないよう、以下の状態機械(src/alertState.js)で制御している。
ALERT_THRESHOLD回連続失敗して初めて通知(デフォルト3回=3分間隔なら3分)- 通知後もダウンが続く場合は
REALERT_INTERVAL_MINUTESごとに再通知(デフォルト30分) - 復旧したら1回だけ復旧通知を送り、状態をリセット
ローカル開発
cd apps/keycloak-monitor
npm install
cp .env.example .env
# .envにKEYCLOAK_CLIENT_SECRETを設定(apps/xwiki/.envのKEYCLOAK_ADMIN_CLIENT_SECRETと同じ値)
npm run dev
http://localhost:3000/ http://localhost:3000/health http://localhost:3000/status(直近チェック結果・現在のアラート状態)で確認。
npm test
本番同等の動作確認(Docker)
docker compose -f docker-compose.local.yml up --build
Dokployへのデプロイ
.claude/skills/dokploy-webapp/SKILL.mdの手順に準拠。このアプリは外部公開ドメインを持たない(portal-sample-batchと同じパターン、dokploy-network内部のみ)ため、docker-compose.ymlにTraefikラベルは付けていない。
- Gitea(
https://git73.next-hd.net/mygit-admin/NodeSrv.git)へpush - Dokployで新規Compose(
webappsproject、Provider: Gitea、sourceType: gitea、Compose Path:apps/keycloak-monitor/docker-compose.yml)を作成、Node A(52.193.142.134)へデプロイ - Dokploy Environment画面で
.env.exampleの内容を設定。特に以下はDokploy側で運用しながら変更する想定:NOTIFY_EMAILS(通知先、カンマ区切りで複数追加可)CHECK_INTERVAL_SECONDS(監視間隔)ALERT_THRESHOLD/REALERT_INTERVAL_MINUTESKEYCLOAK_CLIENT_SECRET(機密情報、必ずDokploy側でのみ設定)
- デプロイ後、コンテナ内から
/statusを確認して監視が回っていることを確認