Docker によるデプロイ
Sinaptic® DROID+ を Docker を使用して本番環境で実行します。公式イメージは非常に軽量(15MB 未満)で、非 root ユーザーで実行され、組み込みのヘルスチェック(healthcheck)が含まれています。
イメージ情報
| レジストリ | イメージ名 | プル(Pull)コマンド |
|---|---|---|
| Docker Hub (メイン) | sinapticai/droid | docker pull sinapticai/droid:latest |
| GHCR (ミラー) | ghcr.io/sinapticai/droid | docker pull ghcr.io/sinapticai/droid:latest |
タグ: latest, 0.5.0, 0.5, 0 (セマンティックバージョニング)、および特定のバージョンを固定するための sha-<commit>。
クイックスタート
docker run -d \
--name droid \
-p 8080:8080 \
-p 8081:8081 \
-v ./droid.yaml:/etc/droid/droid.yaml \
-v ./configs/agents:/etc/droid/agents \
-e OPENAI_API_KEY=$OPENAI_API_KEY \
sinapticai/droid
これにより、以下の設定で Sinaptic® DROID+ が起動します:
- 8080 ポート:OpenAI 互換 API
- 8081 ポート:管理 API + エージェントビルダー(Agent Builder)UI
- ローカルの設定およびエージェントファイルがコンテナにマウントされる
- 環境変数経由で API キーを渡す
設定方法
コンテナは以下の 2 つのパスを想定しています:
| パス | 用途 | デフォルト |
|---|---|---|
/etc/droid/droid.yaml | 実行時の設定 | 必須(ユーザーのファイルをマウント) |
/var/lib/droid | データディレクトリ(RAG、ログ、監査) | 自動的に作成される |
環境変数 DROID_CONFIG で設定パスを、DROID_DATA_DIR でデータディレクトリを上書きできます。
環境変数
API キーや設定の上書きは環境変数経由で行います。設定ファイルは ${VAR} 構文をサポートしています。
docker run -d \
-e OPENAI_API_KEY=sk-... \
-e ANTHROPIC_API_KEY=sk-ant-... \
-e GEMINI_API_KEY=AIza... \
-e GROK_API_KEY=xai-... \
sinapticai/droid
Docker Compose
本番環境のデプロイには Docker Compose の使用を推奨します:
# docker-compose.yml
version: "3.8"
services:
droid:
image: sinapticai/droid:latest
ports:
- "8080:8080" # OpenAI 互換 API
- "8081:8081" # 管理 API + ビルダー UI
volumes:
- ./droid.yaml:/etc/droid/droid.yaml:ro
- ./configs/agents:/etc/droid/agents:ro
- droid-data:/var/lib/droid
environment:
- OPENAI_API_KEY=${OPENAI_API_KEY}
- ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY:-}
restart: unless-stopped
healthcheck:
test: ["/usr/local/bin/droid", "health", "--openai-port", "8080"]
interval: 30s
timeout: 3s
start_period: 5s
retries: 3
volumes:
droid-data:
起動:
docker compose up -d
ヘルスチェック (Health Checks)
コンテナには、30 秒ごとに droid health を実行する組み込みのヘルスチェック機能が含まれています。手動でチェックすることも可能です:
# コンテナの外から確認
curl http://localhost:8081/health
# Docker inspect を使用
docker inspect --format='{{.State.Health.Status}}' droid
本番環境での推奨事項
ボリューム (Volumes)
設定ファイルは読み取り専用(:ro)でマウントし、データの保存には名前付きボリュームを使用してください。
-v ./droid.yaml:/etc/droid/droid.yaml:ro
-v ./configs/agents:/etc/droid/agents:ro
-v droid-data:/var/lib/droid
セキュリティ
コンテナはデフォルトで非 root ユーザーで実行されます(distroless イメージ)。さらなるセキュリティのために:
- 8081 ポートを外部に公開しないでください。管理 API とビルダー UI は内部利用を目的としています。
- 環境変数ではなく、Docker シークレット(secrets)や Vault を使用して API キーを管理してください。
- すべての本番エージェントで SinapticAI のブロックモードを有効にしてください。
# 外部には API ポートのみを公開
ports:
- "8080:8080"
# 8081 ポートは内部ネットワークのみに留める
リソース制限
Sinaptic® DROID+ 自体は軽量ですが、LLM のレスポンスストリーミング中にメモリを消費することがあります。推奨される最小値は以下の通りです:
deploy:
resources:
limits:
memory: 512M
cpus: "1.0"
reservations:
memory: 128M
cpus: "0.25"
ロギング
Sinaptic® DROID+ は、デフォルトで構造化された JSON ログを stdout に出力します。お好みのログアグリゲーターを使用してキャプチャしてください。
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
ネットワーク
複数の Sinaptic® DROID+ インスタンスを実行したり、ローカル LLM(Ollama、LM Studio)に接続したりする場合:
services:
droid:
# ... droid の設定 ...
networks:
- droid-net
ollama:
image: ollama/ollama:latest
networks:
- droid-net
networks:
droid-net:
driver: bridge
その後、droid.yaml 内でサービス名を使用して Ollama を参照します:
ollama:
base_url: "http://ollama:11434/v1"
アップデート方法
docker pull sinapticai/droid:latest
docker compose up -d
コンテナはステートレスです。すべての設定はマウントされたファイルに、すべてのデータはボリューム内にあります。いつでも安全にコンテナを入れ替えることができます。
ソースからのビルド
Docker イメージをご自身でビルドしたい場合:
git clone https://github.com/SinapticAI/droid-community.git
cd droid-community
docker build -t droid:local .
トラブルシューティング
コンテナがすぐに終了する:
docker logs droid でログを確認してください。最も一般的な原因は、droid.yaml が見つからない、または無効な形式であることです。
ヘルスチェックが失敗する: コンテナ内部から 8080 ポートにアクセス可能であること、および設定ファイルが有効な YAML であることを確認してください。
ローカルの LLM に接続できない:
Ollama や LM Studio がホスト上で実行されている場合は、localhost の代わりに host.docker.internal を使用してください。
ollama:
base_url: "http://host.docker.internal:11434/v1"
ボリュームへの権限拒否 (Permission denied): コンテナは非 root で実行されます。マウントされたディレクトリが UID 65534 (nobody) から読み取り可能であることを確認してください。