| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- #!/usr/bin/env bash
- # 构建并发布到 /srv/agent-server/app,同步技能目录,重启服务。
- # 用法:deploy/deploy.sh(需要 sudo 权限;首次部署前先执行 sudo deploy/install.sh)
- set -euo pipefail
- cd "$(dirname "$0")/.."
- ROOT=/srv/agent-server
- pnpm install --frozen-lockfile
- pnpm -r build
- node scripts/build-sdk.mjs
- # 已发布的 SDK 版本不再覆盖:同一代码打包结果逐字节相同,内容不同说明 SDK 有变化,需要先升级版本号
- # (packages/shared、client、chat-ui 的 version 一起改;推送工具改 packages/skills-cli)
- changed=()
- for f in dist-sdk/*.tgz; do
- published="$ROOT/app/sdk/$(basename "$f")"
- if [ -f "$published" ] && ! cmp -s "$f" "$published"; then changed+=("$(basename "$f")"); fi
- done
- if [ ${#changed[@]} -gt 0 ]; then
- echo "以下 SDK 包已经发布过同一版本,但内容有变化:${changed[*]}" >&2
- echo "请先升级版本号再部署(已发布的版本不能覆盖,否则锁定该版本的业务平台重新安装时校验值对不上)" >&2
- exit 1
- fi
- STAGE=$(mktemp -d)
- trap 'rm -rf "$STAGE"' EXIT
- pnpm --filter @agent-server/server deploy --prod "$STAGE/server" >/dev/null
- sudo rsync -a --delete "$STAGE/server/" "$ROOT/app/server/"
- sudo rsync -a --delete apps/admin/dist/ "$ROOT/app/admin/"
- # SDK 包保留旧版本(业务平台可能锁定在旧版本),npm 仓库 /npm/ 按目录中的全部版本提供
- sudo mkdir -p "$ROOT/app/sdk"
- sudo rsync -a dist-sdk/ "$ROOT/app/sdk/"
- sudo rm -f "$ROOT/app/sdk/agent-skills.tgz" "$ROOT/app/sdk/index.json" # 旧的 /sdk/ 分发方式留下的文件
- sudo rsync -a --delete skills/ "$ROOT/skills/"
- sudo chown -R root:root "$ROOT/app" "$ROOT/skills"
- sudo chmod -R a+rX "$ROOT/app" "$ROOT/skills"
- # 服务可写目录与 unit 文件(新增目录或修改 unit 后,不必重跑 install.sh)
- sudo install -d -o agentsvc -g agentsvc -m 0700 "$ROOT/managed-skills"
- if ! sudo cmp -s deploy/agent-server.service /etc/systemd/system/agent-server.service; then
- sudo install -m 0644 deploy/agent-server.service /etc/systemd/system/agent-server.service
- sudo systemctl daemon-reload
- fi
- sudo systemctl restart agent-server
- for _ in $(seq 1 20); do
- if curl -sf http://127.0.0.1:8787/healthz >/dev/null; then
- echo "部署完成:http://127.0.0.1:8787/admin/"
- exit 0
- fi
- sleep 0.5
- done
- echo "服务没有正常启动,查看日志:journalctl -u agent-server -n 50" >&2
- exit 1
|