チュートリアル16: Dockerデプロイメント
Tutorial 16: Docker Deployment — easy-to-understand guide based on official docs
チュートリアル16: Dockerデプロイメント
おかえりなさい、Hermes探検家の皆さん!前回のチュートリアルでは、Hermes Agentをマシン上で直接実行することに慣れてきましたね。今日は、さらに一歩進んで、HermesをDockerコンテナの中に入れてみましょう。これは、セットアップをクリーンに保ち、ポータブルで、アップグレードも簡単にするための画期的な方法です。
DockerとHermesが出会う2つの方法
本題に入る前に、DockerとHermes Agentが2つの異なる方法で連携できることを理解しておくことが重要です。
- HermesをDocker 内で 実行する – エージェント自体がコンテナ内に存在します。今日はこれに焦点を当てます。
- ターミナルバックエンドとしての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