ワンクリックで
deploy-to-server
本地打包镜像→远程服务器(阿里云)部署,替代服务器现场构建。适合用户说"部署到服务器"、"远程部署"、"更新生产环境"、"首次部署到阿里云"、"打包传镜像"、"不在服务器构建"。区分首次部署(服务器从零)和更新部署(已有环境换镜像)。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
本地打包镜像→远程服务器(阿里云)部署,替代服务器现场构建。适合用户说"部署到服务器"、"远程部署"、"更新生产环境"、"首次部署到阿里云"、"打包传镜像"、"不在服务器构建"。区分首次部署(服务器从零)和更新部署(已有环境换镜像)。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
用于正式开始开发前的需求澄清和技术方案设计。适合用户提出新功能、新模块、架构调整、复杂改造,或说"先做需求分析、输出技术方案、创建变更前先梳理、帮我设计下"。产出结构化方案(design/proposal/requirements/tasks 四件套),但不直接写代码。
用于 SillySpec 自检和状态修复。适合用户说"检查下状态、修复 progress、doctor、状态不对"。全量扫描进度一致性,修复进度数据与实际产出不匹配的问题。
用于按 plan 执行代码实现。适合用户说"开始写代码、执行任务、跑 execute、开干"。按 plan.md 中的 Wave 和 Task 逐步实现,遵循 design.md 和模块文档。
用于把 design 拆解为可执行的实现计划。适合用户说"拆任务、做计划、排 wave、规划实现步骤"。产出 plan.md(Wave 分组 + Task 列表 + 依赖关系)。
生成结构化规范 — proposal + design + tasks。适合用户说"生成规范、补全四件套、propose"。产出 proposal.md + design.md + tasks.md(+ 可能的 requirements.md)。
用于明确、低风险、范围很小的直接任务。适合用户说"直接改、快速修、顺手调整、改个文案、修个小 bug、更新一个文件、不要完整流程"。跳过 brainstorm/plan,但仍按 sillyspec quick 流程执行。
| name | deploy-to-server |
| description | 本地打包镜像→远程服务器(阿里云)部署,替代服务器现场构建。适合用户说"部署到服务器"、"远程部署"、"更新生产环境"、"首次部署到阿里云"、"打包传镜像"、"不在服务器构建"。区分首次部署(服务器从零)和更新部署(已有环境换镜像)。 |
把当前仓库部署到阿里云服务器,本地构建镜像、传到服务器、服务器不构建直接起——避开服务器 2 核前端 next build 15-20 分钟的瓶颈。用 docker save/load,不需要镜像仓库(registry)。
先判断走哪条路径:
ssh -i ~/.ssh/aliyun_deploy root@47.113.145.252 'docker compose ls 2>/dev/null; ls /opt/sillyhub/deploy/deploy/.env 2>/dev/null'
multi-agent-platform running + .env 存在 → 更新部署ssh -i ~/.ssh/aliyun_deploy root@47.113.145.252(密钥在本机 ~/.ssh/aliyun_deploy,直连或走 Clash SOCKS5 7897 代理)/opt/sillyhub/deploy/deploy/(双层 deploy,不是 /opt/sillyhub/deploy/,两份都存在,活跃的是深层那份)daemon 的 src/ 改过才要重打 bundle(只改 install 脚本不影响 bundle JS,可跳过):
cd sillyhub-daemon && pnpm bundle && cd .. # 产出 build/bundle/{sillyhub-daemon.js,mcp-server.js}
打包(生产 API 地址覆盖前端 build-arg;本地 .env 的 127.0.0.1 是开发值,必须覆盖):
PROD_API_URL=http://192.168.0.143:8001 bash deploy/scripts/build-and-save.sh
# 产出 deploy/images.tar.gz(backend + frontend 两镜像 gzip,约 300M)
PROD_API_URL是生产环境前端浏览器访问后端的地址(取自服务器.env的NEXT_PUBLIC_API_BASE_URL)。改了必须重新打包前端(NEXT_PUBLIC_是 build 时固化到客户端的)。
scp -i ~/.ssh/aliyun_deploy deploy/images.tar.gz deploy/scripts/load-and-up.sh \
root@47.113.145.252:/opt/sillyhub/deploy/deploy/
传完确认脚本是 LF(CRLF 会让服务器 bash 报 bad interpreter):
ssh -i ~/.ssh/aliyun_deploy root@47.113.145.252 "grep -c \$'\r' /opt/sillyhub/deploy/deploy/load-and-up.sh"
# 应返回 0
稳妥做法(先备份旧镜像再 load,便于回滚):
ssh -i ~/.ssh/aliyun_deploy root@47.113.145.252 'cd /opt/sillyhub/deploy/deploy && \
STAMP=$(date +%Y%m%d-%H%M) && \
docker tag multi-agent-platform-backend:latest multi-agent-platform-backend:backup-$STAMP && \
docker tag multi-agent-platform-frontend:latest multi-agent-platform-frontend:backup-$STAMP && \
echo "✅ 备份 backup-$STAMP(回滚用)" && \
gunzip -c images.tar.gz | docker load && \
docker compose --env-file .env up -d'
日常重复部署(load + up + 清 dangling + 删 tar 一条龙):
ssh -i ~/.ssh/aliyun_deploy root@47.113.145.252 'cd /opt/sillyhub/deploy/deploy && bash load-and-up.sh'
ssh -i ~/.ssh/aliyun_deploy root@47.113.145.252 'cd /opt/sillyhub/deploy/deploy && \
docker compose ps && \
curl -s http://127.0.0.1:8001/api/health'
{"status":"ok","db":"ok","redis":"ok",...}backend 镜像变更会自动跑 alembic upgrade head,看 logs 确认无报错:
ssh -i ~/.ssh/aliyun_deploy root@47.113.145.252 'cd /opt/sillyhub/deploy/deploy && docker compose logs backend --tail=40'
Application startup complete + Uvicorn running on http://0.0.0.0:8000 = 成功ssh -i ~/.ssh/aliyun_deploy root@47.113.145.252 'cd /opt/sillyhub/deploy/deploy && \
docker tag multi-agent-platform-backend:backup-<时间> multi-agent-platform-backend:latest && \
docker tag multi-agent-platform-frontend:backup-<时间> multi-agent-platform-frontend:latest && \
docker compose --env-file .env up -d'
(<时间> 用 docker images | grep backup 查。)
ssh -i ~/.ssh/aliyun_deploy root@47.113.145.252 '
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun &&
systemctl enable --now docker &&
docker compose version'
ssh -i ~/.ssh/aliyun_deploy root@47.113.145.252 'mkdir -p /opt/sillyhub/deploy/deploy'
scp -r -i ~/.ssh/aliyun_deploy deploy/docker-compose.yml deploy/.env.example deploy/scripts \
root@47.113.145.252:/opt/sillyhub/deploy/deploy/
ssh -i ~/.ssh/aliyun_deploy root@47.113.145.252 'cd /opt/sillyhub/deploy/deploy && cp .env.example .env'
# 本地生成密钥:
python -c "import secrets; print('SECRET_KEY='+secrets.token_urlsafe(32)); print('SILLYSPEC_MASTER_KEY='+secrets.token_urlsafe(32))"
# SSH 进去填(或本地编辑后 scp 覆盖):
ssh -i ~/.ssh/aliyun_deploy root@47.113.145.252 'vi /opt/sillyhub/deploy/deploy/.env'
必填生产值(不要把真实 token/密码写进 skill 或提交):
BACKEND_PORT=8001
FRONTEND_PORT=3001
SECRET_KEY=<随机48字符>
SILLYSPEC_MASTER_KEY=<随机48字符>
ANTHROPIC_AUTH_TOKEN=<真实token>
NEXT_PUBLIC_API_BASE_URL=http://192.168.0.143:8001 # 生产前端访问后端地址,或公网域名
INTERNAL_API_BASE_URL=http://backend:8000
HOST_PATH_PREFIX=/tmp
CORS_ALLOWED_ORIGINS=["http://localhost:3001","http://192.168.0.143:3001"]
PLATFORM_BOOTSTRAP_ADMIN_EMAIL=admin@sillyhub.local
PLATFORM_BOOTSTRAP_ADMIN_PASSWORD=<强密码>
推荐:本地打包传镜像(和「更新部署」1-3 步完全一样,服务器不构建)。首次因为没有"旧 latest"可备份,跳过备份直接 load + up。
备选:服务器直接构建(2 核前端要 15-20 分钟,需服务器上有完整源码 + sillyhub-daemon/build/bundle/):
ssh -i ~/.ssh/aliyun_deploy root@47.113.145.252 'cd /opt/sillyhub/deploy/deploy && \
export COMMIT_SHA=$(cd /opt/sillyhub && git rev-parse --short HEAD 2>/dev/null || echo local) && \
docker compose --env-file .env up --build -d'
同「更新部署」第 4 步。首次额外建 workspace(root_path 落在 compose 挂载目录):
TOKEN=$(ssh -i ~/.ssh/aliyun_deploy root@47.113.145.252 'curl -fsS -H "Content-Type: application/json" \
-d "{\"email\":\"admin@sillyhub.local\",\"password\":\"<密码>\"}" \
http://127.0.0.1:8001/api/auth/login' | jq -r .access_token)
默认账号按
.env的PLATFORM_BOOTSTRAP_ADMIN_*。登录用 username 非 email(见 memorylogin-by-username-not-email,默认 admin/admin123 或.env密码)。
/opt/sillyhub/deploy/deploy/(双层 deploy),scp 和 ssh 都进深层目录,不是 /opt/sillyhub/deploy/。deploy/.env 的 NEXT_PUBLIC_API_BASE_URL=127.0.0.1:8001 是开发值,直接打包给生产,浏览器会连用户自己机器。用 PROD_API_URL=生产地址 覆盖(环境变量 > .env)。.gitattributes 已强制 *.sh eol=lf,scp 前确认 grep \r = 0,否则服务器 bash\r: bad interpreter。mirrors.aliyun.com 的 debian trixie Packages 索引缺失会让 backend build 卡死(2026-07-17 已改 tuna)。load-and-up.sh 自动 image prune -f + 删 tar。但 backup-<时间> tag 会累积,定期手动清:docker images | grep backup → docker rmi <旧backup>。unknown 是既有问题(compose 运行时 COMMIT_SHA 覆盖镜像 build 值),不影响功能,见 memory compose-commit-sha-runtime-override。alembic upgrade head。migration 链断裂会 crash-loop,看 logs 诊断;项目未上线,可 docker compose down -v 重置 DB(先确认数据可丢)。sillyhub-daemon/build/bundle/。daemon 的 src/ 改过必须 pnpm bundle 再打包;只改 scripts/install.* 不影响 bundle JS(随 rebuild 自动 COPY 最新源)。ppdmq-app/redis/mysql 是别的项目,部署只动 multi-agent-platform-* 容器。127.0.0.1(在服务器上 ssh 内执行),不要用 localhost(IPv6 解析问题)。