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>
56 lines
2.9 KiB
Markdown
56 lines
2.9 KiB
Markdown
# 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ラベルは付けていない。
|
||
|
||
1. Gitea(`https://git73.next-hd.net/mygit-admin/NodeSrv.git`)へpush
|
||
2. Dokployで新規Compose(`webapps` project、Provider: Gitea、sourceType: gitea、Compose Path: `apps/keycloak-monitor/docker-compose.yml`)を作成、Node A(`52.193.142.134`)へデプロイ
|
||
3. Dokploy Environment画面で`.env.example`の内容を設定。特に以下はDokploy側で運用しながら変更する想定:
|
||
- `NOTIFY_EMAILS`(通知先、カンマ区切りで複数追加可)
|
||
- `CHECK_INTERVAL_SECONDS`(監視間隔)
|
||
- `ALERT_THRESHOLD` / `REALERT_INTERVAL_MINUTES`
|
||
- `KEYCLOAK_CLIENT_SECRET`(機密情報、必ずDokploy側でのみ設定)
|
||
4. デプロイ後、コンテナ内から`/status`を確認して監視が回っていることを確認
|