237 lines
6.3 KiB
Markdown
237 lines
6.3 KiB
Markdown
# 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.
|