Hermes Agent(NousResearch/hermes-agent)は月額約 5 ドルの VPS向けに設計されており、ノート PC だけに限りません。公式 Docker イメージ nousresearch/hermes-agent はホストにマウントした ~/.hermes:/opt/data にすべての状態を保存し、gateway プロセスが Telegram、Discord、Slack などを 1 つのバックグラウンドサービスから接続します。本記事では低価格 VPS への Docker 導入、Telegram ボット作成、許可リストのセキュリティ、docker compose による常駐運用を順に説明します。公式ドキュメント:Docker ユーザーガイド、メッセージングゲートウェイ、チーム Telegram アシスタントガイド。
Apple ハードウェア上でエージェント基盤を比較する場合は、macOS と Mac mini M4 上の Hermes Agent と OpenClaw の比較を参照してください。長い Telegram セッションでコンテキストが膨らんだ後は、Mac mini M4 上の Hermes trajectory_compressor によるメモリとトークン調整が有効です。これらはローカル検証向けです。本ページは Linux VPS + Docker で Telegram を 24/7 稼働させることに焦点を当てます。
開示:MacHTML は設定のステージング用に任意のクラウド Mac mini レンタルを提供します。本ガイドは Linux VPS と Docker が中心で、Mac は必須ではありません。
低価格 VPS で Docker を使う理由
Hermes は就寝中もオンラインのまま動くプロセスが必要です。ノート PC は蓋を閉じると停止しますが、低価格 VPS(多くは 1–2 vCPU、2–4 GB RAM、月額約 4–6 ドル)なら gateway run を 24 時間稼働させられます。
週次デプロイする運用者にとって Docker の利点は 3 つです。第一に 再現可能なインストール:各 VPS で Python 3.11 や Node を毎回直す代わりに nousresearch/hermes-agent:latest を pull。第二に 分離されたアップグレード:イメージを差し替えてもホストの ~/.hermes にセッション・メモリ・API キーが残る。第三に任意の コマンドサンドボックス:TERMINAL_BACKEND=docker でシェルツールをホストカーネルではなく別コンテナで実行。
Telegram はエンドツーエンド検証に最速のチャネルです。@BotFather でボットを作成し、トークンを ~/.hermes/.env に入れ、数値ユーザー ID を TELEGRAM_ALLOWED_USERS に追加すれば数秒でメッセージテストできます。ゲートウェイは既定で 未知ユーザーを拒否します。ターミナル権限のあるボットで GATEWAY_ALLOW_ALL_USERS=true は有効にしないでください。
VPS は安定したグローバル IP と cron 向けの予測可能な稼働時間を提供します。Hermes は gateway 内で 60 秒ごとに cron を実行し、ホスト再起動後は Compose の restart: unless-stopped で gateway が自動復帰します。
自宅 NAS や Raspberry Pi と比べ、小さなクラウド VM は Telegram API や LLM プロバイダへのアウトバウンドが安定し、スナップショットで災害復旧しやすいです。bind-mount した ~/.hermes をメジャーアップグレード前にスナップショットしてください。
日本から運用する場合は、Telegram と LLM エンドポイントへの安定した出口を持つリージョンを選ぶか、プロキシを計画してください。公式イメージは Docker Hub から pull します。ミラー利用時は digest を必ず確認してください。
Docker Compose は引き継ぎを容易にします:compose ファイル 1 つ、データディレクトリ 1 つ、pairing 手順を文書化し、本番設定をステージング VPS で再現してから昇格させます。
Telegram のみで Dashboard 不要の個人なら Minimum で足りることが多いです。terminal.backend: docker や複数管理者が必要なら Recommended に上げ、sandbox と gateway の RAM 競合を監視してください。
アーキテクチャ:コンテナ内の gateway
Internet → Telegram API → VPS:hermes container (gateway run)
↳ /opt/data (bind-mount ~/.hermes)
├─ .env (TELEGRAM_BOT_TOKEN, API keys)
├─ config.yaml (terminal, models, cron)
├─ sessions/ (per-chat history)
└─ memories/ (curated long-term memory)
gateway は単一の長寿命プロセスで複数メッセージングを多重化します。各 Telegram チャットは /opt/data/sessions/ に保存され、エージェントループへディスパッチ、長期メモリは /opt/data/memories/ に保存されます。bind-mount ~/.hermes:/opt/data により状態はすべてホスト側です。
同じ /opt/data を 2 つの gateway コンテナにマウントしないでください。セッションファイルは同時書き込みに非対応で、二重 gateway は破損と重複処理を招きます。本番は hermes サービス 1 つ、command: gateway run が定石です。
ポート 8642 は任意の OpenAI 互換 API とヘルスエンドポイントです。Telegram のみなら公開不要。有効化時は API_SERVER_ENABLED=true、慎重なバインド、強力な API_SERVER_KEY とファイアウォールで保護してください。
VPS サイジングとコスト
Telegram トラフィックが安定すると gateway の RAM が主な制約になります。エージェントコンテナはモデルコンテキストを保持し、terminal.backend: docker では sandbox が追加オーバーヘッドになります。ディスクはセッション履歴・スキル・メモリで増えるため、cron ログが溜まる前に余裕を確保してください。
下表は 4 つの代表的プロファイルです。シェルツールや複数管理者が必要なら Recommended から始め、Budget lab は短い pairing 検証のみに留めてください。
| プロファイル | vCPU | RAM | ディスク | 月額目安 | 用途 |
|---|---|---|---|---|---|
| 最小 | 1 | 2 GB | 20 GB | 約 $4–5 | Telegram のみ、Dashboard なし、単一ユーザー |
| 推奨 | 2 | 4 GB | 40 GB | 約 $6–8 | Gateway + TERMINAL_BACKEND=docker で shell サンドボックス |
| 高負荷 | 2+ | 8 GB | 60 GB | 約 $12+ | Dashboard、cron、大きな skills ツリー、複数管理者 |
| 予算ラボ | 1 | 1 GB | 15 GB | 約 $3–4 | スモークテストと pairing のみ(本番不可) |
ステップバイステップ手順
- VPS に Docker をインストール — Ubuntu 22.04 以降で docker.io と docker-compose-v2 を apt インストールし、ユーザーを docker グループに追加して sudo なしで compose を実行できるようにします。
sudo apt update && sudo apt install -y docker.io docker-compose-v2 sudo usermod -aG docker $USER newgrp docker - 永続データディレクトリを作成 — 秘密情報・セッション・設定はすべてホストの ~/.hermes にあります。イメージ更新前にこのフォルダをバックアップしてください。
mkdir -p ~/.hermes - 対話式 setup を一度実行 — nousresearch/hermes-agent を pull し ~/.hermes:/opt/data をマウントして、ウィザードが .env と config.yaml を書き込むようにします。
docker run -it --rm -v ~/.hermes:/opt/data nousresearch/hermes-agent setup - Telegram ボットと許可リストを作成 — @BotFather で bot token、@userinfobot で数値ユーザー ID。既定は未知ユーザーを拒否——ターミナル権限があるボットで GATEWAY_ALLOW_ALL_USERS=true は設定しないでください。
TELEGRAM_BOT_TOKEN=123456789:ABCdefGHIjklMNOpqrsTUVwxyz TELEGRAM_ALLOWED_USERS=987654321 - DM pairing コードを承認(任意) — 事前許可リストを省略した場合、未知ユーザーに 1 時間有効の pairing コードが届きます。ホストから pairing approve で承認します。
docker run --rm -v ~/.hermes:/opt/data nousresearch/hermes-agent pairing approve telegram XKGH5N7P - 前景で gateway run をスモークテスト — 対話的に gateway run を起動し、ボットに /help を送り、/model や /compress を確認してから本番へ。
docker run --rm -it -v ~/.hermes:/opt/data nousresearch/hermes-agent gateway run - Docker Compose で本番デプロイ — restart: unless-stopped、bind-mount ~/.hermes:/opt/data、メモリ/CPU 上限で暴走エージェントが VPS を枯渇させないようにします。
services: hermes: image: nousresearch/hermes-agent:latest container_name: hermes restart: unless-stopped command: gateway run volumes: - ~/.hermes:/opt/data deploy: resources: limits: memory: 4G cpus: "2.0"docker compose up -d docker logs -f hermes - チームボットのターミナルアクセスを強化 — config.yaml で terminal.backend: docker とし、shell ツールをホストカーネルではなくサンドボックスコンテナで実行します。
# ~/.hermes/config.yaml excerpt terminal: backend: docker container_cpu: 1 container_memory: 5120 container_persistent: true
トラブルシューティング
ボットが応答せず、ログに Telegram 401
@BotFather でトークンを再生成し、~/.hermes/.env の TELEGRAM_BOT_TOKEN を更新して docker compose restart hermes。ボット名変更やトークン失効後の更新漏れが最も多い原因です。
未認可メッセージや pairing プロンプトが終わらない
ボット ID ではなく個人の数値 ID を TELEGRAM_ALLOWED_USERS に追加するか、pairing approve telegram <code> を実行。~/.hermes をマウントする gateway は 1 つだけにしてください。
スコープ付きリポ読取・npm test・ガード付き自動修正が必要なら、2026 Hermes Agent MCP + Claude Opus 4.8:ローカルコードサンドボックス を参照してください。
よくある質問
VPS の代わりに Mac mini で Hermes Docker を動かせますか?
はい——同じ docker run と compose パターンが Docker Desktop や Colima で動きます。Telegram のみ 24/7 なら VPS の方が安いことが多く、Apple ツールチェーンが必要なら Mac mini M4 が適しています。
ポート 8642 を公開する必要はありますか?
Telegram のみなら不要。OpenAI 互換 API や外部ヘルスチェックが必要なときだけ 8642 を有効化し、API_SERVER_ENABLED=true と強力な API_SERVER_KEY、ファイアウォールを設定してください。
サイト内の OpenClaw Telegram ガイドとの違いは?
OpenClaw 記事はクラウド Mac 上の Node.js gateway 向けです。Hermes は hermes gateway とネイティブ Telegram アダプター、Nous Research の Docker 文書が中心です。
最初に試すべきスラッシュコマンドは?
初回応答後に /status、/model、/compress、/new を送信。管理者コマンドは制限され、一般ユーザーは許可リストに従います。