Files
Nexus/docs/release/20260708/Nexus-manual-deploy-commands-20260708.md
T
r 9b583ccc91
Nexus CI/CD / test (push) Waiting to run
Nexus CI/CD / e2e (push) Blocked by required conditions
Nexus CI/CD / deploy (push) Blocked by required conditions
Nexus Pre-commit Checks / quick-check (push) Waiting to run
docs(release): 主与 release 分支合并功能清单 + 导入 release 文档目录
便于 Gitea 上 main ↔ release/20260708-axs 合并评审与冲突对照。
2026-07-09 01:14:32 +08:00

6.3 KiB
Raw Blame History

Nexus 手动发布命令清单(2026-07-08)

适用场景:Codex 远程 SSH 审批不可用时,由人工在本机和线上服务器执行。
发布包已通过本地 Gate 和发布包扫描。

本地发布包

C:\Users\uzuma\Documents\Codex\2026-07-06\yuu\outputs\nexus-release-20260708.tar.gz

SHA256

46299832fb78e8cc196f85cf1928f34eea4deee82dbc83b67883394f0359036b

方案 A:使用现有 deploy/deploy-production.sh(推荐)

前提:

  • 本机能通过 SSH 访问线上 Host:nexus
  • 或设置 NEXUS_SSH=user@host
  • 线上已有 /opt/nexus/www/wwwroot/api.synaglobal.vip

在源码快照目录执行:

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

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/appweb/app-v2 到容器。
  7. 检查 /health/app//app-v2/

方案 B:发布 tar.gz 包到线上

1. 上传

Windows CMD / PowerShell

scp C:\Users\uzuma\Documents\Codex\2026-07-06\yuu\outputs\nexus-release-20260708.tar.gz nexus:/tmp/nexus-release-20260708.tar.gz

2. 线上校验

cd /tmp
sha256sum nexus-release-20260708.tar.gz

必须等于:

46299832fb78e8cc196f85cf1928f34eea4deee82dbc83b67883394f0359036b

3. 线上备份

假设部署目录为 /opt/nexus

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,或者你先把发布包解开到临时目录后使用新脚本,可以执行:

sudo bash /opt/nexus/deploy/apply-release-bundle.sh \
  --tarball /tmp/nexus-release-20260708.tar.gz \
  --sha256 46299832fb78e8cc196f85cf1928f34eea4deee82dbc83b67883394f0359036b \
  --deploy-path /opt/nexus

如果脚本尚未在旧线上目录中,可以先临时解出脚本:

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 覆盖代码,但保留 .envdocker/.env.prodweb/data
  5. Docker 模式下执行 nexus-1panel.sh upgrade --skip-git
  6. 同步 /app//app-v2/ 静态资源到容器。
  7. 验证本机 /health/app//app-v2/

4. 解包覆盖

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 模式:

cd /opt/nexus
sudo env NEXUS_ROOT=/opt/nexus bash deploy/nexus-1panel.sh upgrade --skip-git

如果是 Supervisor 模式:

sudo supervisorctl restart nexus

6. Docker 容器内静态资源同步

Docker 模式建议执行:

cd /opt/nexus
sudo env NEXUS_ROOT=/opt/nexus bash deploy/sync_webapp_to_container.sh

方案 C:Python 发布辅助脚本(推荐替代手工 scp/ssh)

默认只上传并执行服务器侧 preflight,不会正式 apply

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 正式发布:

.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

发布后验证

本机执行:

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

线上执行:

curl -s https://api.synaglobal.vip/health
curl -I https://api.synaglobal.vip/app/
curl -I https://api.synaglobal.vip/app-v2/

期望:

/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 陆续掉线。

回滚

如果异常:

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 /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.