# Nexus 手动发布命令清单(2026-07-08) > 适用场景:Codex 远程 SSH 审批不可用时,由人工在本机和线上服务器执行。 > 发布包已通过本地 Gate 和发布包扫描。 ## 本地发布包 ```text C:\Users\uzuma\Documents\Codex\2026-07-06\yuu\outputs\nexus-release-20260708.tar.gz ``` SHA256: ```text 46299832fb78e8cc196f85cf1928f34eea4deee82dbc83b67883394f0359036b ``` ## 方案 A:使用现有 deploy/deploy-production.sh(推荐) 前提: - 本机能通过 SSH 访问线上 Host:`nexus` - 或设置 `NEXUS_SSH=user@host` - 线上已有 `/opt/nexus` 或 `/www/wwwroot/api.synaglobal.vip` 在源码快照目录执行: ```bash cd /c/Users/uzuma/Documents/Codex/2026-07-06/yuu/work/nexus_code_context/snapshots/nexus-source-20260707-112042 bash deploy/deploy-production.sh ``` 如果不用 SSH config: ```bash export NEXUS_SSH='root@你的线上服务器IP' export NEXUS_DEPLOY_PATH='/opt/nexus' bash deploy/deploy-production.sh ``` 发布脚本会: 1. 本地同步源码到线上。 2. 排除 `.venv-*`、`node_modules`、缓存、误生成文件。 3. Docker 模式下执行 `nexus-1panel.sh upgrade --skip-git`。 4. 构建并上传旧 `/app/`。 5. 构建并上传新 `/app-v2/`。 6. Docker 模式下同步 `web/app` 与 `web/app-v2` 到容器。 7. 检查 `/health`、`/app/`、`/app-v2/`。 ## 方案 B:发布 tar.gz 包到线上 ### 1. 上传 Windows CMD / PowerShell: ```cmd scp C:\Users\uzuma\Documents\Codex\2026-07-06\yuu\outputs\nexus-release-20260708.tar.gz nexus:/tmp/nexus-release-20260708.tar.gz ``` ### 2. 线上校验 ```bash cd /tmp sha256sum nexus-release-20260708.tar.gz ``` 必须等于: ```text 46299832fb78e8cc196f85cf1928f34eea4deee82dbc83b67883394f0359036b ``` ### 3. 线上备份 假设部署目录为 `/opt/nexus`: ```bash sudo mkdir -p /opt/nexus-backups sudo tar czf /opt/nexus-backups/nexus-before-20260708.tar.gz -C /opt nexus ``` ### 3B. 使用服务器侧脚本自动应用发布包(推荐) 如果线上已存在当前项目的 `deploy/apply-release-bundle.sh`,或者你先把发布包解开到临时目录后使用新脚本,可以执行: ```bash sudo bash /opt/nexus/deploy/apply-release-bundle.sh \ --tarball /tmp/nexus-release-20260708.tar.gz \ --sha256 46299832fb78e8cc196f85cf1928f34eea4deee82dbc83b67883394f0359036b \ --deploy-path /opt/nexus ``` 如果脚本尚未在旧线上目录中,可以先临时解出脚本: ```bash cd /tmp tar xzf nexus-release-20260708.tar.gz nexus-release/deploy/apply-release-bundle.sh sudo bash /tmp/nexus-release/deploy/apply-release-bundle.sh \ --tarball /tmp/nexus-release-20260708.tar.gz \ --sha256 46299832fb78e8cc196f85cf1928f34eea4deee82dbc83b67883394f0359036b \ --deploy-path /opt/nexus ``` 这个脚本会自动: 1. 校验 SHA256。 2. 检查发布包内必须路径和禁止路径。 3. 备份当前 `/opt/nexus`。 4. rsync 覆盖代码,但保留 `.env`、`docker/.env.prod`、`web/data`。 5. Docker 模式下执行 `nexus-1panel.sh upgrade --skip-git`。 6. 同步 `/app/` 和 `/app-v2/` 静态资源到容器。 7. 验证本机 `/health`、`/app/`、`/app-v2/`。 ### 4. 解包覆盖 ```bash sudo mkdir -p /opt/nexus sudo tar xzf /tmp/nexus-release-20260708.tar.gz -C /tmp sudo rsync -a --delete \ --exclude='.env' \ --exclude='docker/.env.prod' \ --exclude='web/data' \ /tmp/nexus-release/ /opt/nexus/ ``` ### 5. 重建/重启 Docker/1Panel 模式: ```bash cd /opt/nexus sudo env NEXUS_ROOT=/opt/nexus bash deploy/nexus-1panel.sh upgrade --skip-git ``` 如果是 Supervisor 模式: ```bash sudo supervisorctl restart nexus ``` ### 6. Docker 容器内静态资源同步 Docker 模式建议执行: ```bash cd /opt/nexus sudo env NEXUS_ROOT=/opt/nexus bash deploy/sync_webapp_to_container.sh ``` ## 方案 C:Python 发布辅助脚本(推荐替代手工 scp/ssh) 默认只上传并执行服务器侧 preflight,不会正式 apply: ```cmd cd /d C:\Users\uzuma\Documents\Codex\2026-07-06\yuu\work\nexus_code_context\snapshots\nexus-source-20260707-112042 .venv-py312-codex\Scripts\python.exe scripts\publish_release_bundle.py ^ --remote nexus ^ --tarball C:\Users\uzuma\Documents\Codex\2026-07-06\yuu\outputs\nexus-release-20260708.tar.gz ^ --sha256 46299832fb78e8cc196f85cf1928f34eea4deee82dbc83b67883394f0359036b ``` preflight 输出确认无误后,再加 `--apply` 正式发布: ```cmd .venv-py312-codex\Scripts\python.exe scripts\publish_release_bundle.py ^ --remote nexus ^ --tarball C:\Users\uzuma\Documents\Codex\2026-07-06\yuu\outputs\nexus-release-20260708.tar.gz ^ --sha256 46299832fb78e8cc196f85cf1928f34eea4deee82dbc83b67883394f0359036b ^ --apply ``` 详见:`Nexus-release-python-publisher-20260708.md`。 ## 发布后验证 本机执行: ```cmd cd /d C:\Users\uzuma\Documents\Codex\2026-07-06\yuu\work\nexus_code_context\snapshots\nexus-source-20260707-112042 .venv-py312-codex\Scripts\python.exe scripts\verify_online_release.py --base-url https://api.synaglobal.vip ``` 线上执行: ```bash curl -s https://api.synaglobal.vip/health curl -I https://api.synaglobal.vip/app/ curl -I https://api.synaglobal.vip/app-v2/ ``` 期望: ```text /health => ok /app/ => HTTP 200 /app-v2/ => HTTP 200 ``` ## 宝塔专项验证 发布后在 Nexus 后台验证: 1. 打开 `/app/` 旧后台,确认宝塔列表正常。 2. 打开 `/app-v2/` 新后台,确认页面可访问。 3. 对同一台宝塔连续点击一键登录,冲突时应该返回 HTTP 409。 4. 对新增宝塔执行一键登录,应触发 hardcoded_3600 检测/修复兜底。 5. 多台宝塔同时打开后,2 小时刷新不应因为 `task.py` hardcoded `3600` 陆续掉线。 ## 回滚 如果异常: ```bash cd /opt sudo mv nexus nexus-bad-20260708 sudo tar xzf /opt/nexus-backups/nexus-before-20260708.tar.gz -C /opt cd /opt/nexus sudo env NEXUS_ROOT=/opt/nexus bash deploy/nexus-1panel.sh upgrade --skip-git ``` ## Server preflight command Before applying the release on the production host, run: ```bash bash /tmp/nexus-release/deploy/preflight-release-host.sh \ --tarball /tmp/nexus-release-20260708.tar.gz \ --sha256 46299832fb78e8cc196f85cf1928f34eea4deee82dbc83b67883394f0359036b \ --deploy-path /opt/nexus ``` This checks required commands, checksum, release tar paths, deploy path, runtime hints, disk space, and current local endpoints before applying changes.