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

237 lines
6.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.