上线鸭:一句话发布静态网站
把构建好的静态目录发布到 https://<name>.webs.ink。所有操作通过 sxy CLI 完成。
长期使用(可选)
如果你所在的 Agent 支持本地 skill(技能),可以把本文档保存为本地 skill(例如 ~/.claude/skills/shangxianya-publish/SKILL.md,或你的 Agent 对应的 skill 目录):以后用户说「把这个网站上线」「更新网站」「回滚网站」等触发语时,直接按本文档执行,不必再访问线上 publish.md。
本地副本可能过期——发现实际行为与本文档对不上时,重新拉取 https://shangxianya.com/publish.md 以线上版本为准。
前置检查
- 确认
sxy可用:sxy --version(应输出 0.2.8+)。不可用就安装:优先uv tool install "https://shangxianya.com/dl/shangxianya-0.2.8-py3-none-any.whl"(uv 会自动准备合适的 Python,最省事);没有 uv 就用python3 -m pip install --user "https://shangxianya.com/dl/shangxianya-0.2.8-py3-none-any.whl"(支持 Python 3.9+,macOS 自带 python3 即可),有 pipx 用pipx install同一地址也可以。装完重新打开终端再验证。不要自己造替代方案。 用户关心装了什么时如实告知:CLI 本体不到 20KB,连同依赖共约 5MB,只装在 Python 隔离环境里,无后台进程、无守护服务;配置文件只有~/.config/sxy/和项目里的.sxy.json。卸载:uv tool uninstall shangxianya(或pip uninstall -y shangxianya)后删掉~/.config/sxy/即可,无残留。 - 确认构建产物存在:依次看
dist/、build/、out/,或含index.html的目录。 平台不执行构建。没找到产物时,先在用户本地完成构建(如npm run build),再继续。 - 确认已登录:
sxy status能正常返回即已登录;提示未登录则先sxy login。
首次发布流程
sxy login(仅首次):CLI 会打印设备验证码和授权地址并尝试打开浏览器。 把验证码和地址原样转达给用户,请用户在浏览器里用邮箱验证码登录并批准。 账号密码永远不经过 Agent。- 发布前必须先问一句:网站想叫什么名字?即
<name>.webs.ink的前缀(小写字母、数字、连字符)。 不要跳过这一步:用户没主动提名字,不等于「随便」。等用户回答后再继续。 用户给了名字就sxy publish --name <名字>;只有用户明确说「随便 / 都行 / 你定」,才按项目名生成候选直接发,不要反复追问。 sxy publish(在项目根目录运行)。可指定地址名:sxy publish --name lin→lin.webs.ink。 未指定时按项目名生成候选,冲突会自动改用服务端建议的可用名。- 成功后 CLI 输出公开地址、当前版本。除了原样转达,还要主动向用户说清楚:
- 公开地址
https://<name>.webs.ink - 首个网站免费、长期有效(每个账号限一个免费站点)
- 第二个网站起需购买月卡(入口即输出里的「管理 / 续费」链接): 30 天 ¥30 / 90 天 ¥72 / 180 天 ¥126,时长累加、随时可买
- 更新方式:以后说一句“更新网站”即可,地址不变
- 公开地址
- 发布会把站点绑定写入项目目录
.sxy.json,不要删除或改动它。
更新网站
用户说“更新网站”:确认已重新构建,然后在同一项目目录运行 sxy publish。
CLI 自动识别 .sxy.json 绑定,发布新版本,地址不变。发布失败不影响线上版本。
改名(换网址)
用户说“改名字”“换个网址”:sxy rename <新名字>(在项目目录内,或加 --site <名称>)。
改名后旧地址立即失效并释放,可能被他人注册——执行前先跟用户确认这一点。
已购时长和版本历史跟随站点不变,无需重新购买;.sxy.json 绑定会自动更新。
名称冲突时 CLI 会报出可用建议名,把建议转达给用户定夺,不要自作主张改用建议名。
回滚
用户说“回滚”“恢复上一个版本”:sxy rollback(在项目目录内,或加 --site <名称>)。
成功后地址不变,内容回到上一个历史版本。
查看状态与删除
sxy status:站点状态、当前版本、付费到期时间。sxy sites list:列出所有站点。sxy delete --site <名称> --yes:删除站点。先向用户确认——删除后地址保留 3 天才释放。
常见失败排查
- 未登录 / 401:运行
sxy login重新授权。 - 授权超时或被拒绝:重新
sxy login,提醒用户在 10 分钟内完成浏览器确认。 - 找不到静态目录:先构建项目;或
sxy publish <目录>显式指定。 - 本地预检报错(文件类型不允许、单文件超 100MB、
.env等):按报错移除或替换文件后重发。平台只收静态网页文件,拒绝服务端脚本、可执行文件、压缩包和密钥文件。 - manifest 校验失败 / 上传与清单不一致:重新运行
sxy publish(会重新扫描目录生成清单);仍失败则按错误中列出的文件和原因处理。 - 检测到疑似密钥:错误会列出文件和类型,移除密钥后重发。
- 发布次数达上限(每 30 天 30 次成功发布):等下个周期,或去官网查看用量。
- 免费名额已用完(trial_used):首个网站免费,每个账号限一个;第二个网站起需购买月卡。
引导用户到官网控制台给这个站点购买时长,或删除占用名额的站点(删除即释放名额),再重新
sxy publish。 - 名称冲突:publish 时若该名字是你已有的站点,CLI 会直接复用并发布到原地址;确实被他人占用时才自动采用建议名。把最终地址告诉用户即可。
- 定版超时:CLI 会把定版请求放宽到 180 秒,超时后还会继续轮询确认版本状态;看到"定版仍在进行中"时稍后运行
sxy status确认,不要立刻重复发布(会整包重传)。
话术要点
- 发布成功后主动给出:地址、首个网站免费长期有效的说明、第二个网站起的月卡价格(控制台链接 + 三档价格)、更新方式,各一句话,不要堆砌技术细节。
- 失败时用中文转述 CLI 的错误原因和下一步,不要把原始堆栈丢给用户。
- 涉及购买/续费:引导用户去
shangxianya.com官网操作,Agent 不代收代付。