2026-28週 週報

やったこと

今週は、HermesとNASを安全に運用するための監視・承認・復旧経路を整えた。

Hermesの安全性・堅牢性向上(7/7〜7/8)

  • Discordから誰でも操作できる状態になっていたので、GATEWAY_ALLOW_ALL_USERS を削除してallowlistを有効化した
  • Hermes WebUIを127.0.0.1 bindに変更し、アクセス経路をTailscale Serveに限定した
  • WebUIに MemoryHigh=4G / MemoryMax=6G を設定し、メモリ使用量の上限を設けた
  • Hermesのextrasを17個から5個に減らし、不要な機能を停止した
  • ~/.hermes をgit管理に移行し、夜間コミットとNAS・B2へのバックアップ対象にした
  • network-online.target が実際の疎通を待てていなかったので、起動時に実疎通を確認する方式へ変更した

破壊的操作の承認ゲート追加(7/8)

  • wgerの削除時に、ダンプより先に down -v が実行されてDBが復旧不能になった
  • 同様の事故を防ぐため、down -v、Docker volume削除、resticのprune、B2削除、DROP DATABASE などに人間の承認を必須化した
  • セッション承認キャッシュや自動承認設定を使っても、クリティカル操作だけは素通りできない構造にした
  • 軽量モデルが複数ステップの順序制約を落とすことを確認し、プロンプトではなく能力側で制限する方針にした

NAS監視・障害通知の整備(7/7〜7/12)

  • NASのunhealthy・exitedコンテナを5分間隔で検出し、状態変化時だけntfyへ通知する監視スタックを追加した
  • Hermesの障害通知で、OnFailureの環境変数が渡らない問題と、複数ユニットで通知先を共有できない問題を修正した
  • ntfyのURL構成ミスで通知が届いていなかった問題を修正し、E2Eで通知を確認した
  • Hermesの再起動時に誤通知されないよう、45秒経過後も停止している場合だけ通知する方式に変更した
  • NASのIP変更に伴い、ntfy配送先とheartbeat監視を現行IPへ更新した
  • ntfyのJSON endpointとJSON Lines形式に対応し、heartbeat監視の実行成功を確認した

NASサービス・バックアップ構成の整理(7/8)

  • filebrowser、adguardhome、glances、wgerを削除し、filebrowserのDBは退避した
  • immich、paperless、minifluxのコンテナイメージをバージョン固定した
  • 監視対象から意図的に停止しているサービスを除外した
  • UGOSのrsync/scpがSSH経由の受信を拒否することを確認し、NASへのファイル転送はtar over SSHを使う方針にした
  • NASのOS移行前に、UGOSの復元イメージを作成する必要性を確認した

iris-newsとHermes運用基盤の更新(7/7)

  • iris-news Phase 3の週次レビュー機能を実装し、全315テストを通過した
  • 日曜20:00に購読リスト変更提案を生成する仕組みを追加した
  • Hermesへ渡すシークレットの3層分類や、メモから構造化・通知・リマインドへつなぐ運用設計を文書化した
  • skillsのmtimeを3か月ごとに確認してntfyへ通知するcron jobを設定した
  • Hermes configをversion 30から33へ移行し、hermes config check の成功を確認した

ネットワーク・メディア環境の更新(7/6〜7/11)

  • 無線ルーターをTP-LinkからBuffaloへ交換した
  • NASのHDDを8TBのものへ交換し、交換処理を開始した
  • NASとの通信性能をiperf3とpingで測定し、有線接続で最大343Mbps、UDP 200Mbps時の損失46/517974を確認した
  • GITADORAサントラの不足ファイルを確認し、メタデータを補完してNASへ同期した
  • album_artist をKONAMIに統一し、トラック番号とdiscタグの整合性を確認した
  • GITADORAのスキル値を6365.49から6404.36まで伸ばした
  • Homeboxを試したが、型番よりバーコード中心の設計でAPI周りも合わなかったため、今回は採用を見送った

書いたノート