🤖HermesBlog
Hermes Official Tutorials · パート 168/9/2026

チュートリアル16: Dockerデプロイメント

Tutorial 16: Docker Deployment — easy-to-understand guide based on official docs

Hermes tutorial

チュートリアル16: Dockerデプロイメント

おかえりなさい、Hermes探検家の皆さん!前回のチュートリアルでは、Hermes Agentをマシン上で直接実行することに慣れてきましたね。今日は、さらに一歩進んで、HermesをDockerコンテナの中に入れてみましょう。これは、セットアップをクリーンに保ち、ポータブルで、アップグレードも簡単にするための画期的な方法です。

DockerとHermesが出会う2つの方法

本題に入る前に、DockerとHermes Agentが2つの異なる方法で連携できることを理解しておくことが重要です。

  1. HermesをDocker 内で 実行する – エージェント自体がコンテナ内に存在します。今日はこれに焦点を当てます。
  2. ターミナルバックエンドとしてのDocker – Hermesはホスト上で実行されますが、実行するすべてのコマンドは永続的なDockerサンドボックス内で行われます。セキュリティと分離には最適ですが、これはまた別の日のトピックです。

今日は、オプション1についてすべて説明します。このアプローチの素晴らしい点は、すべてのデータ(設定、APIキー、セッション、スキル、メモリ)がホスト上の単一のディレクトリに保存され、/opt/data としてコンテナにマウントされることです。コンテナ自体はステートレスなので、新しいバージョンをプルして、何も失うことなくアップグレードできます。

クイックスタート: 最初のコンテナ

Hermesを初めて使う場合、最も簡単な方法は、データディレクトリを作成し、セットアップウィザードを対話的に実行することです。これにより、APIキーの入力と ~/.hermes/.env への保存がガイドされます。

mkdir -p ~/.hermes
docker run -it --rm \
  -v ~/.hermes:/opt/data \
  nousresearch/hermes-agent setup

注意点: これらのコマンドには、ブラウザベースのVPSコンソール(Hetzner Cloudなど)を避けてください。これらのコンソールは、:@= などの特殊文字をしばしば壊してしまい、docker run の引数を静かに破損させる可能性があります。常にSSH(ssh root@<host>)経由で接続して、コピー&ペーストを安全に行ってください。ブラウザコンソールを使用する必要がある場合は、コマンドを手動で入力し、すべての文字を再確認してください。

ウィザードに入ったら、チャットシステム(Telegram、Discordなど)を設定することを強くお勧めします。これにより、ゲートウェイがメッセージを送信する場所が確保されます。

ゲートウェイモードでの実行

設定が完了したら、Hermesを永続的なバックグラウンドゲートウェイとして実行します。これにより、チャットプラットフォームに接続し、24時間365日稼働し続けます。

docker run -d \
  --name hermes \
  --restart unless-stopped \
  -v ~/.hermes:/opt/data \
  -p 8642:8642 \
  nousresearch/hermes-agent gateway run

-p 8642:8642 フラグは、ゲートウェイのOpenAI互換APIサーバーとヘルスチェックエンドポイントを公開します。チャットプラットフォームのみを使用する場合はオプションですが、ダッシュボードや外部ツールからゲートウェイにアクセスする場合は必須です。

新しい便利な機能をご紹介します: 公式Dockerイメージ内では、gateway run がs6-overlayによって自動的に監視されるようになりました。つまり、ゲートウェイプロセスがクラッシュした場合、コンテナを失うことなく数秒以内に再起動されます。docker logs にアップグレードを確認するパンくずリストが表示されます。以前の動作(ゲートウェイが終了するとコンテナも終了する)が必要な場合は、--no-supervise を渡すか、HERMES_GATEWAY_NO_SUPERVISE=1 を設定してください。本番環境では、監視付きのデフォルトが厳密に優れています。

APIサーバーの公開

デフォルトでは、APIサーバーは API_SERVER_ENABLED=true でゲートされます。コンテナ内の 127.0.0.1 の外部に公開するには、いくつかの環境変数を設定する必要があります:

docker run -d \
  --name hermes \
  --restart unless-stopped \
  -v ~/.hermes:/opt/data \
  -p 8642:8642 \
  -e API_SERVER_ENABLED=true \
  -e API_SERVER_HOST=0.0.0.0 \
  -e API_SERVER_KEY="$(openssl rand -hex 32)" \
  -e API_SERVER_CORS_ORIGINS='*' \
  nousresearch/hermes-agent gateway run

API_SERVER_KEY は8文字以上である必要があります。openssl rand -hex 32 で生成してください。重要: インターネットに面したマシンでポートを開くことは、セキュリティリスクです。影響を完全に理解していない限り、行わないでください。

ダッシュボードの実行

ゲートウェイを監視するためのWebダッシュボードが必要ですか? HERMES_DASHBOARD=1 を設定し、ポート9119を公開します:

docker run -d \
  --name hermes \
  --restart unless-stopped \
  -v ~/.hermes:/opt/data \
  -p 8642:8642 \
  -p 9119:9119 \
  -e HERMES_DASHBOARD=1 \
  nousresearch/hermes-agent gateway run

ダッシュボードもs6によって監視されるため、クラッシュした場合は自動的に再起動します。その出力は docker logs <container> に送られます。

ツールループガードレールに関する注意

無人ゲートウェイの場合は、ツールループガードレールのハードストップを有効にすることを検討してください。デフォルトは false で、人間が警告を確認できる対話型セッションには問題ありません。しかし、無人ゲートウェイでは、ループに陥ったエージェントが停止しない可能性があります。プロファイルの config.yaml にこれを追加してください:

tool_loop_guardrails:
  hard_stop_enabled: true
  hard_stop_after:
    exact_failure: 5
    idempotent_no_progress: 5

まとめ

以上がDockerデプロイメントの全容です! これで、すべてのデータをホストに安全にマウントした、ステートレスでアップグレード可能なコンテナが手に入りました。次のチュートリアルでは、ダッシュボードについてさらに詳しく見ていきます。それでは、楽しいコンテナライフを!

📖 公式ドキュメント

この記事は Hermes Agent の公式ドキュメントに基づいています:公式ドキュメント › user-guide/docker