12 KiB
generated: true (请先修改 Gitea Wiki,禁止直接编辑本文件) wiki_page: Deployment-and-Operations wiki_url: https://git.ilapage.cn/OPC/goauto/wiki/Deployment-and-Operations.- wiki_revision: df033d06fd94a4b02a447a27ced8d711521342f3 synchronized_at: 2026-09-08T02:23:08Z
部署与运维
当前线上拓扑
- 外部入口:
http://185.216.248.75:9527,Nginx 同时承载 Admin 静态资源并反向代理 GoAuto API。 - GoAuto 服务监听:
127.0.0.1:8010。 - 常驻服务:systemd
goauto.service。 - 工作目录:
/home/goauto/current,指向/home/goauto/releases/<发布标识>。 - 服务配置:
/home/goauto/current/config/settings.yml;敏感环境变量由/etc/goauto/goauto.env提供,不写入 Git、Wiki、工单或日志。 - Agent APK 私有目录:相对工作目录的
var/goauto-agent-releases;下载必须通过已认证接口。
Agent HTTP 例外
服务端生产模式默认要求 Agent 使用 HTTPS。当前线上入口只有 HTTP,因此经 #181 用户明确确认,在 /etc/goauto/goauto.env 设置:
GOAUTO_ALLOW_INSECURE_AGENT_HTTP=true
该开关只放宽全部 /api/agent/v1/**,包括注册、心跳、采集、采购、Agent 版本检查与下载;不放宽 Admin、PDD、SYB、OCR 或其他第三方地址的安全约束。HTTP 会明文传输 Device Token、任务内容、设备状态和执行结果。后续启用 HTTPS 后应删除该变量或设为 false。
GOAUTO_TRUST_FORWARDED_PROTO=true 只表示信任受控反向代理传入的 X-Forwarded-Proto: https,不能把实际 HTTP 请求视为加密链路,也不能替代上述显式 HTTP 开关。
发布与验证
- 在本地完成服务端测试/构建和 Android 单测/APK 构建,记录提交、versionCode、SHA-256 与大小。
- 创建新的
/home/goauto/releases/<发布标识>,复制服务端二进制、Web 静态资源和非敏感配置;保留旧发布目录用于回滚。 - 原子切换
/home/goauto/current后重启goauto.service,确认systemctl is-active goauto.service为active,并从外部入口验证 API。 - 上传 APK 到 Admin Agent 版本并按需设为当前;服务端解析 Manifest,校验 versionCode 唯一性并保存 SHA-256。
- 真机安装前确认设备没有运行中的任务。Android 系统安装确认仍由人工完成,Agent 不静默安装。
发布、重启、设置当前 Agent 版本和真机安装都属于高风险操作,必须有对应工单和人工确认。不得在部署过程中执行付款、创建订单或清理生产数据。
API 长请求超时约束
Admin 蝦皮规格 AI 匹配会同步等待外部 Provider:Provider 配置允许 3~600 秒,复合的一键匹配共享 600 秒总预算,Admin 客户端等待 610 秒。因此服务端 settings.application.writetimeout 必须至少为 620 秒,受版本管理的标准配置固定为 620;启动时低于该值必须明确失败,禁止以 2 秒等短写超时运行,否则连接会在领域错误返回前被截断并表现为代理 502。反向代理的读/发送超时也必须大于服务端窗口。
Provider 故障日志只允许记录调用关联 ID、操作类型、耗时、上游 HTTP 状态码或网络错误分类;不得记录 API Key、Authorization、Provider URL、模型输入、候选规格、商品原始内容或响应正文。Provider 失败时接口返回 HTTP 503 与 AI_MATCHING_UNAVAILABLE,供 Admin 显示安全中文提示。
回滚
服务异常时把 /home/goauto/current 切回上一已验证发布目录并重启 goauto.service,随后复核服务状态和 Agent 接口。不要删除当前或历史 APK/发布目录来代替回滚;数据库变化如需回退必须单独评估。
蝦皮规格自动匹配任务运维(#195)
- 迁移
1788290000000_shopee_spec_auto_match.go创建运行与工作状态表,并幂等写入sys_job.invoke_target=GoAutoShopeeSpecAutoMatch。首次部署状态为关闭,迁移重跑不会覆盖管理员后来修改的 Cron、参数或启停状态。 - 默认 Cron 为
0 15 * * * *(每小时第 15 分钟),默认batchLimit为 20,合法范围 1~100。上线后先保持关闭,在 Admin 蝦皮商品列表手动执行小批次并核对运行摘要和映射,再由管理员在定时任务页明确启用。 - 定时和手动触发共享数据库唯一活动槽。看到“已有自动匹配正在运行”属于正常互斥结果;运行租约超过 30 分钟会在下次触发时安全释放并把旧运行标记失败。处理每个商品前会续租。
- Provider 临时失败的商品至少 60 分钟后重试,最多 3 次;低置信度或无结果在输入指纹不变时不会重复调用。排错优先查看
shopee_spec_auto_match_run的结构化计数与脱敏错误,以及shopee_spec_auto_match_work_item的状态、尝试次数、下次尝试时间和租约;不得输出或复制 API Key、Provider 原始响应、商品原始 JSON 或个人数据。 - 紧急回退只需关闭系统任务并停止使用 Admin 手动入口;保留运行记录和既有已确认映射用于审计,不删除数据,也不回滚 #194。
SYB 异常规格 AI 定时任务(#198)
- 追加迁移
1788354164329_syb_spec_ai_parse.go创建 AI 确认字段、syb_spec_ai_parse_run、syb_spec_ai_parse_work_item,并幂等写入sys_job.invoke_target=GoAutoSYBSpecAIParse。 - 系统任务默认关闭,默认 Cron 为每小时第 5 分钟、参数
{"batchLimit":20};迁移重跑不得覆盖管理员后续修改的 Cron、参数或启停状态。建议先运行该任务,再由默认第 15 分钟的 #195 完成蝦皮到 PDD 的规格匹配。 - 多实例通过可空唯一活动槽和租约保证全局单批运行;逐行工作项按输入指纹去重。Provider 临时失败至少 60 分钟后重试且最多 3 次,低置信度/无结果在输入不变时不重复调用。
- 上线顺序为:备份数据库、执行追加迁移、发布服务并保持任务关闭、核验表/字段/任务种子,再由管理员决定是否启用。排错只查看运行计数、工作状态和脱敏错误,不输出 API Key、Provider 原始响应、完整 RawJSON 或订单数据。
定时任务执行历史运维(#199)
- 发布 #199 时先备份数据库,再执行追加迁移
1788357000000_sys_job_execution_log.go,随后发布服务与 Web。迁移创建sys_job_execution_log、登记GET /api/v1/sysjob/:id/execution-logs,并只为原本绑定隐藏菜单JobLog的角色写入精确读取权限;菜单缺失时迁移明确失败,不扩大角色授权。 - 服务启动会将上次进程遗留的
running执行记录标记为interrupted。该恢复依赖当前线上每个数据库只运行一个调度器实例;扩展为多调度器前必须另建工单引入实例租约,不能直接复用此判断。 - 排错从 Admin 定时任务页单选任务后进入“日志”,按状态和开始时间查询。记录只含稳定错误码和脱敏摘要;需要定位细节时查看受控服务日志,不得把任务参数、Provider 配置/响应、密钥或业务原始数据复制进执行历史。
- 当前没有执行历史删除接口和自动保留策略;删除定时任务不删除历史。数据库容量治理需要另建工单评估。#198 的
GoAutoSYBSpecAIParse在 #199 发布和迁移后仍保持关闭,启用必须由管理员另行确认。
客户端密钥部署与验证(#237)
实现基线 71f7751;2026-09-07 已按用户授权完成本机 MySQL 迁移、管理员菜单写入和 Server/Web 构建重启;管理页面 HTTP 列表与模块加载已验证。2026-09-08 经用户授权,线上已发布 Server/Web 基线 d403f3b,执行迁移 1788798000000 并重启 GoAuto/Nginx;迁移记录、两张密钥表、仅管理员菜单关联已回读。HTTP 页面与健康检查通过;未登录管理请求 HTTP 200、业务码 401。真实密钥创建及客户端业务读写闭环尚未验证。
- 发布前须单独授权追加迁移
server/cmd/migrate/migration/version-local/1788798000000_client_api_key.go,按既有迁移流程创建 client_api_key、client_api_key_audit 和“采采管理/客户端密钥”管理员菜单。前置父菜单必须存在;不应以赋予普通用户管理员角色代替迁移或权限核验。 - 用户于 2026-09-07 明确确认默认兼容 HTTP/HTTPS、不设开关并接受明文风险;部署本版本并执行迁移后,现有
http://185.216.248.75:9527可以使用客户端密钥管理及客户端 API。2026-09-08 线上部署及未登录拒绝检查已通过,真实密钥读写验收仍待进行。HTTP 会明文传输密钥和业务数据,仍建议使用 HTTPS。 - 客户端密钥功能不依赖 GOAUTO_TRUST_FORWARDED_PROTO、X-Forwarded-Proto 或 Agent HTTP 例外。既有其他路由的协议和代理配置保持不变;不伪造协议头,不新增明文放行开关。
- 代理、APM、应用日志均不得记录 Authorization、创建响应 secret 或原始业务载荷。应用对两类客户端密钥路由跳过旧请求/响应正文日志,使用专用元数据审计;实际代理日志脱敏仍须部署验收。
- 请求审计 status=0 可能表示在途、进程中断或结果审计更新失败;先按请求关联号核对业务结果,不自动重试采购、采集、同步等操作。停用阻止后续认证,不保证取消已开始的业务操作。
- 隔离验证:Server
go test ./app/goauto/clientkey ./app/goauto/clientapi ./cmd/migrate/migration/version-local;Webpnpm exec jest tests/unit/client-keys.spec.js --runInBand与pnpm run build:prod。浏览器模拟入口/tests/fixtures/client-keys.html仅由本地 Vite 开发服务承载,使用内存模拟请求和无效示例密钥,不连接真实数据库,不证明线上鉴权已验收。 - 真实部署验收须另行验证实际 HTTP/HTTPS 入口、管理员创建/编辑/停用、普通用户拒绝、读写/独立动作隔离、停用后的后续请求拒绝及日志无密钥;任何真实业务执行继续按独立授权范围进行。
Windows 本机运行目录与 #237 迁移验证(2026-09-07)
- Supervisor 实际配置
D:/supervisor/programs/goauto.conf;程序仅goauto-admin-api和goauto-admin-ui。从已有干净工作区D:/OPC/goauto-worktrees/main-runtime的 main 分支运行;源码运行基线ac3c63e,版本化启动模板更新提交9a10d82。 - 原目录
D:/OPC/goauto的用户改动保持原样;本机敏感配置继续读取D:/OPC/goauto/config.yaml,不复制凭据到运行工作区或版本库。数据库127.0.0.1:3307/goauto,APIhttp://127.0.0.1:8010,Webhttp://127.0.0.1:9527。 - API 命令:
pwsh.exe -NoLogo -NoProfile -File "D:/OPC/goauto-worktrees/main-runtime/scripts/start-server.ps1" -ConfigPath "D:/OPC/goauto/config.yaml" -SkipMigration;Web 同目录scripts/start-web.ps1与相同 ConfigPath。已验证无需 ExecutionPolicy Bypass。 - 真实迁移必须单独授权并先确认唯一待执行版本;常驻 API 加
-SkipMigration,日常重启不自动执行未来待审核迁移。#237 迁移1788798000000_client_api_key.go已执行,sys_migration 记录1788798000000、两张密钥表及管理员菜单已回读;其他角色未新增菜单关联。任务启停状态未改。 - 范围明确的服务控制:
D:/supervisor/supervisord.exe -c D:/supervisor/supervisord.conf ctl status goauto-admin-api goauto-admin-ui,启动/停止/重启将 status 分别替换为 start/stop/restart。不得为了 GoAuto 重启整个 Supervisor 或其他项目。配置内容变化后需重新读取配置;本次调用supervisor.reloadConfig,再对上述两个程序定向 start,已通过进程命令行核对新目录。 - 日志:
D:/supervisor/logs/goauto-admin-api.log、D:/supervisor/logs/goauto-admin-ui.log;对外分享只能保留脱敏结构摘要。迁移输出不得暴露凭据或业务原文。 - 管理员刷新页面后可进入
http://127.0.0.1:9527/#/client-keys/index;菜单缓存未更新时重新登录。已验证列表空态、创建弹窗加载 12 模块及 HTTP 风险提示;未实际创建密钥,真实客户端读写及停用闭环仍待范围明确的验证。本节为 2026-09-07 本机验证记录;线上已于 2026-09-08 另行授权发布,见上节。