277f80dc82
- cmd/agent-node:独立节点执行器,心跳/认领/执行/上报闭环;prompt 走本地 LLM 或网关,http 仅 http(s) 禁重定向限 1MiB,mcp/skill/数字员工经网关 转发,custom 回显;不执行任意 shell 命令,串行执行 + 优雅退出。 - scripts/install-agent-node.sh:裸机安装 + systemd 加固(0600 配置/ NoNewPrivileges/ProtectSystem)。 - deploy/CLUSTER.md:单机/冷备/集群形态,多副本网关 compose override + nginx least_conn 入口,冷备 master key 同步与恢复演练要点。 - 修复 agent claim 未解包 apiresponse 信封;真实 Agent 进程端到端验证 (注册→心跳上线→custom/http 任务认领执行上报→管理端成功可见); 25 包测试通过。
92 lines
3.1 KiB
Bash
Executable File
92 lines
3.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# install-agent-node.sh — 在裸机/虚拟机安装 AI Gateway 智能体节点 Agent。
|
|
#
|
|
# 用法:
|
|
# sudo AGENT_GATEWAY_URL=https://gw.example.com \
|
|
# AGENT_CODE=worker-01 \
|
|
# AGENT_TOKEN=agn_xxxx(管理端登记节点后交付) \
|
|
# [AGENT_NAME=] [AGENT_LLM_BASE_URL=] [AGENT_LLM_API_KEY=] \
|
|
# [AGENT_GATEWAY_KEY=] [AGENT_CAPABILITIES=tool_exec,llm,http] \
|
|
# bash scripts/install-agent-node.sh
|
|
#
|
|
# 动作:
|
|
# 1. 安装 Go 工具链(缺失时)并构建 cmd/agent-node;
|
|
# 2. 安装二进制到 /usr/local/bin/ai-agent-node;
|
|
# 3. 生成 /etc/ai-agent-node/env(权限 600,含节点令牌);
|
|
# 4. 安装 systemd 服务 ai-agent-node.service 并启动。
|
|
set -euo pipefail
|
|
|
|
AGENT_GATEWAY_URL="${AGENT_GATEWAY_URL:-http://127.0.0.1:8080}"
|
|
AGENT_CODE="${AGENT_CODE:?AGENT_CODE 必填(管理端登记的节点编码)}"
|
|
AGENT_TOKEN="${AGENT_TOKEN:?AGENT_TOKEN 必填(管理端登记节点后交付的令牌)}"
|
|
AGENT_NAME="${AGENT_NAME:-$AGENT_CODE}"
|
|
AGENT_VERSION="${AGENT_VERSION:-0.11.4-agent}"
|
|
AGENT_CAPABILITIES="${AGENT_CAPABILITIES:-tool_exec,llm,http}"
|
|
AGENT_LLM_BASE_URL="${AGENT_LLM_BASE_URL:-}"
|
|
AGENT_LLM_API_KEY="${AGENT_LLM_API_KEY:-}"
|
|
AGENT_GATEWAY_KEY="${AGENT_GATEWAY_KEY:-}"
|
|
|
|
REPO_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
INSTALL_DIR="/usr/local/bin"
|
|
ENV_FILE="/etc/ai-agent-node/env"
|
|
SERVICE_FILE="/etc/systemd/system/ai-agent-node.service"
|
|
|
|
echo "==> 1/4 构建 agent-node 二进制"
|
|
if ! command -v go >/dev/null 2>&1; then
|
|
echo " 未找到 go,尝试通过 apt 安装(仅 Debian/Ubuntu)"
|
|
apt-get update -qq && apt-get install -y -qq golang-go
|
|
fi
|
|
(
|
|
cd "$REPO_DIR"
|
|
GOFLAGS=-mod=mod go build -trimpath -ldflags "-s -w" -o /tmp/ai-agent-node ./cmd/agent-node
|
|
)
|
|
|
|
echo "==> 2/4 安装二进制到 $INSTALL_DIR/ai-agent-node"
|
|
install -m 0755 /tmp/ai-agent-node "$INSTALL_DIR/ai-agent-node"
|
|
rm -f /tmp/ai-agent-node
|
|
|
|
echo "==> 3/4 写入节点配置 $ENV_FILE(权限 600,含令牌)"
|
|
install -d -m 0700 /etc/ai-agent-node
|
|
umask 077
|
|
cat > "$ENV_FILE" <<EOF
|
|
AGENT_GATEWAY_URL=$AGENT_GATEWAY_URL
|
|
AGENT_CODE=$AGENT_CODE
|
|
AGENT_TOKEN=$AGENT_TOKEN
|
|
AGENT_NAME=$AGENT_NAME
|
|
AGENT_VERSION=$AGENT_VERSION
|
|
AGENT_CAPABILITIES=$AGENT_CAPABILITIES
|
|
AGENT_LLM_BASE_URL=$AGENT_LLM_BASE_URL
|
|
AGENT_LLM_API_KEY=$AGENT_LLM_API_KEY
|
|
AGENT_GATEWAY_KEY=$AGENT_GATEWAY_KEY
|
|
EOF
|
|
|
|
echo "==> 4/4 安装并启动 systemd 服务"
|
|
cat > "$SERVICE_FILE" <<EOF
|
|
[Unit]
|
|
Description=AI Gateway Agent Node ($AGENT_CODE)
|
|
After=network-online.target
|
|
Wants=network-online.target
|
|
|
|
[Service]
|
|
Type=simple
|
|
EnvironmentFile=$ENV_FILE
|
|
ExecStart=$INSTALL_DIR/ai-agent-node
|
|
Restart=always
|
|
RestartSec=5
|
|
# 节点进程只读本地文件系统;LLM/网关出站不受限。
|
|
ProtectSystem=strict
|
|
ReadWritePaths=/tmp
|
|
NoNewPrivileges=true
|
|
LimitNOFILE=65536
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
EOF
|
|
systemctl daemon-reload
|
|
systemctl enable ai-agent-node.service >/dev/null 2>&1
|
|
systemctl restart ai-agent-node.service
|
|
|
|
echo "==> 完成:节点 $AGENT_CODE 已安装并启动"
|
|
echo " 查看日志: journalctl -u ai-agent-node -f"
|
|
echo " 心跳/任务状态: 管理端 → 安全与审计 → 智能体节点 / 节点任务"
|