Skip to content

サーバー設定 ​

このドキュメントはサーバーの起動と設定ガイドで、3 つの問いに答えます:

  1. どう起動するか(ローカル / クラウド / デスクトップの 3 形態)
  2. 公衆ネットワークが必要か(結論:本体は不要。REST インターフェースが必要な場合のみ)
  3. クラウド接続をどう設定するか(Rust ゲートウェイに接続し、以後リモート管理可能に)

事前準備 ​

項目要件
Node.js≥ 18.17(20+ 推奨)
モデル API KeyOpenAI 互換エンドポイント(DeepSeek / OpenAI / Ollama / カスタム)
(任意)クラウドアカウント自前の Rust ゲートウェイ + Hub、またはマネージドサービス
(任意)QQ オープンプラットフォームのボットq.qq.com で登録
bash
# コードを取得して依存関係をインストール
pnpm install

# 対話式設定(推奨):LLM は必須、QQ/メールは任意でスキップ可
bash scripts/configure-server.sh

# または手動:テンプレートをコピーして記入
# cp .env.example .env

環境変数一覧 ​

プロジェクトルートの .env に書くか(または起動前に export):

変数説明既定
DATA_DIRデータ/テナントのルート./.zqagent_data
PORTREST 待受ポート8787
HOST待受アドレス(公衆公開時は 0.0.0.0)127.0.0.1
WORKSPACEAgent の作業ディレクトリカレントディレクトリ
APPROVAL_TIMEOUT_SECONDS承認/質問の保留タイムアウト900
MAX_ITERATIONS1 ターンの最大イテレーション800
OPENAI_API_KEY / OPENAI_BASE_URL / OPENAI_MODEL / OPENAI_REASONING_EFFORTモデル設定(OPENAI_MODEL を未設定ならモデル未指定となり、コンソールで選択が必要)—
TENANT_ID / TENANT_API_KEY / MODEL初回起動時に自動作成されるデモテナントdemo / 初回起動時にランダム生成 / モデル既定
SECRET_KEY通知認証情報などを暗号化する主キー自動生成
FLEET_TOKEN / FLEET_SECRET / FLEET_GATEWAY_URLクラウド接続(通常は登録コード接続で fleet.json に自動書き込み)—
QQ_BOT_APP_ID / QQ_BOT_APP_SECRET / QQ_BOT_SANDBOXQQ ボット(設定すると有効化)—
CONTEXT_WINDOW / COMPACTION_THRESHOLD_PCT / COMPACTION_CAP_TOKENS長い会話の圧縮パラメータ自動

SECRET_KEY は一度設定したら長期固定を推奨します。テナントの署名鍵と通知チャネルの認証情報の暗号化に使うため、 変更すると旧テナントの鍵と認証情報が無効になります。

3 つのデプロイ形態 ​

ローカル / 社内ネットワーク(最も推奨、公衆ネットワーク不要) ​

bash
# 最小構成(起動と会話ができるか確認)
pnpm run server
# ログ:
#   zqagent server 监听 http://127.0.0.1:8787
#   已创建演示租户: id=demo apiKey=zk_xxxx(随机生成) model=...

# 完全なリモート操作(.env 設定後):
#   FLEET_GATEWAY_URL=wss://gw.example.com/ws
#   QQ_BOT_APP_ID=...  QQ_BOT_APP_SECRET=...
#   OPENAI_API_KEY=sk-... OPENAI_MODEL=...
pnpm run server

起動後にサービスが使えるか確認:

bash
# デモテナントの apiKey は初回起動時にランダム生成され起動ログに出力される。取り出して TOKEN に保存
TOKEN=<起動ログの apiKey>   # zk_1f0c... の形式
curl -s http://localhost:8787/healthz     # => {"status":"ok"}
curl -s -H "Authorization: Bearer $TOKEN" http://localhost:8787/api/v1/sessions

クラウドデプロイ(REST の公衆アクセスが必要な場合) ​

クラウドサーバーを借り、HOST=0.0.0.0 でポートを公開します。

bash
# pm2 で常駐させるのがおすすめ
npm install -g pm2
HOST=0.0.0.0 pm2 start "pnpm run server" --name zqagent-server

# セキュリティの推奨:必要な人だけに開放。REST を自分だけが使うなら公衆に直接出さず、
# 内網穿透を使うか、クラウドサーバーのファイアウォールで送信元 IP を制限する。

デスクトップアプリ(macOS / Windows) ​

デスクトップアプリはローカルでサーバーを自動起動するため、手動起動は不要です。デスクトップアプリをご覧ください。

REST の公衆アクセスが必要な場合の 3 案 ​

案方法適する場面
A. 内網穿透(個人向け推奨)Cloudflare Tunnel(無料)または frp/ngrok でローカルポートを公衆 HTTPS にマップ自宅/社内マシン。サーバーを借りたくない
B. クラウドサーバーVPS に直接デプロイし HOST=0.0.0.0既存サーバーがある、長期安定が必要
C. REST を使わないゲートウェイの全経路(認証情報はコントロールプレーンが発行)を使い、REST は自分の PC のみポートを一切公開したくない

クラウド接続(Rust ゲートウェイ) ​

接続後は任意のデバイスからこのノードをリモート管理できます。ノードはゲートウェイへアウトバウンド接続(wss://、通常 443)するだけで、 公衆からのインバウンドもポート開放も不要で、MQTT broker も不要です。

方法 1:登録コードで接続(推奨) ​

ユーザーセンター(Hub)で 1 回限りの登録コードを作成し、ノードのマシンで実行します:

bash
zqagent link --hub https://hub.example.com --code <登録コード>
  • 本機でサービスが稼働中 → ホット接続(再起動不要)
  • そうでなければ認証情報を {DATA_DIR}/fleet.json に書き込み、次回 zqagent serve で自動接続

方法 2:手動設定 ​

bash
# .env
FLEET_TOKEN=<高エントロピーのランダム>          # 名前空間の識別子
FLEET_SECRET=<高エントロピーのランダム>         # 署名鍵(ゲートウェイ側と一致させる)
FLEET_GATEWAY_URL=wss://gw.example.com/ws
SECRET_KEY=<64 桁 hex>           # 明示的な設定を強く推奨

起動後に確認:

bash
curl -s -H "Authorization: Bearer $ADMIN_API_KEY" \
  http://localhost:8787/api/v1/fleet/pairing
# => {"data":{"gatewayUrl":"wss://gw.example.com/ws","fleetToken":"...","fleetSecret":"...","nodeId":"..."}}

起動ログに「云端接入: wss://…(节点 nodeId)」が出れば成功です。

クラウドに接続しない ​

FLEET_* を一切設定しなければ純ローカルノードです。ローカル機能はすべてそのまま使え、クラウドからは見えないだけです。 いつでも zqagent link で接続できます。

ゲートウェイ側のデプロイ(鍵、TLS、複数レプリカ)はリポジトリの docs/rust-gateway-plan.md と deploy/k8s/gateway/ をご覧ください。プロトコルの詳細は docs/wire-protocol.md。

よくあるトラブル ​

現象確認
ノードがゲートウェイに接続できないアドレスが wss://.../ws か。証明書が CA 発行(自己署名でない)か。ファイアウォールで 443 を許可しているか
ログに「未能接入网关」FLEET_GATEWAY_URL の到達性と、FLEET_SECRET がゲートウェイと一致するか確認
サーバーが外部を待ち受けないHOST の既定は 127.0.0.1。公衆アクセスには HOST=0.0.0.0 とポート開放が必要
QQ ゲートウェイ接続失敗AppID/Secret を確認。intents 権限を申請したか。サンドボックスは QQ_BOT_SANDBOX=1
メールが送れないQQ メールは認証コード(ログインパスワードではない)。secure とポートの対応(465→true、587→false)
SECRET_KEY 変更後に認証情報が無効SECRET_KEY は固定を推奨。変更すると旧テナントの認証情報がすべて無効になる