---
title: 自建服务器发布流程
doc_type: operations-runbook
domain: runtime
keywords:
  - 自建发布
  - 版本发布
  - 更新清单
  - stock.peakarea.online
summary: 固化当前 1.0.9 起的自建服务器发布流程，统一生成 macOS 安装包、Windows 自助构建包、release-index.json 和下载页。
when_to_read:
  - 你准备把一个新版本发布到 stock.peakarea.online
  - 你想复用仓库脚本，不再手工拼更新 JSON 和下载页
read_next:
  - ./self-hosted-update-server.md
  - ./mixed-release-bundle.md
  - ./windows-self-build-for-testers.md
---
# 自建服务器发布流程

当前仓库已经把自建服务器发布收口成一个正式脚本：

- [scripts/publish_self_hosted_release.mjs](/Users/winkd/my-projects/ai-stock-assistant-project/ai-stock-assistant-desktop-tauri/scripts/publish_self_hosted_release.mjs)

默认入口：

```bash
npm run publish:self-hosted
```

## 默认行为

脚本默认会按下面顺序执行：

1. 运行 `npm run verify:logic`
2. 运行 `npm run build:local-release`
3. 运行 `node scripts/assemble_release_bundle.mjs --mode local-release --skip-build`
4. 生成发布目录
5. 上传到 `stock.peakarea.online`
6. 修正远端静态文件权限

## 默认发布目标

当前脚本内置这组默认值：

- SSH 脚本：`/Users/winkd/Downloads/connect-tencent.111.229.170.53.sh`
- 远端目录：`/opt/ai-stock-assistant-desktop-release-server/current/public`
- 公网域名：`https://stock.peakarea.online`

## 发布后会生成什么

脚本会同步这些内容到服务器：

- 根 `latest.json`
- `release-index.json`
- `downloads/index.html`
- macOS `dmg`
- macOS updater 包和 `.sig`
- Windows 自助构建 zip

当前正式口径里，动态更新 JSON 由 Node 服务根据 `release-index.json` 实时返回，不再预生成静态 `update/.../<version>` 文件。

## 常用参数

```bash
# 已经手动做过校验和本地打包，只负责发布
npm run publish:self-hosted -- --skip-verify --skip-build
```

## APP 检查更新的接入状态

当前这套发布流程已经接入 APP 更新检查：

- macOS：正式接入，应用内检查更新会命中 `/update/darwin/aarch64/<current_version>`
- Windows：当前仍属于“发现新版本后打开下载页”口径，下载内容是自助构建包 zip，不是自动安装器

## 发布流程口径

当前正式发布流程是：

1. 本地执行 `npm run verify:logic`
2. 本地构建并归集版本产物
3. 生成 `release-index.json`
4. 上传制品和索引到服务器
5. 由 Node 更新服务按索引对外响应 `/update/*` 和 `/downloads`

这意味着以后只需要上传新版本索引和制品，不再手工维护多份版本路径文件。

一句话：

`现在已经不是只有服务器有文件，APP 也已经开始消费这套更新协议。`
