41 lines
2.2 KiB
Markdown
41 lines
2.2 KiB
Markdown
# Ubuntu 源码生产部署
|
||
|
||
正式支持 Ubuntu 22.04 LTS 与 Ubuntu 24.04 LTS x86_64。服务器管理员预先提供 Node.js 22 LTS、pnpm 10、Nginx,以及 MySQL 5.7、Redis、RocketMQ 5.x 或相应外部服务;项目不负责安装、升级或修改系统软件源。
|
||
|
||
## 构建发布目录
|
||
|
||
```bash
|
||
uname -m
|
||
node --version
|
||
pnpm --version
|
||
pnpm install --frozen-lockfile
|
||
pnpm check:contracts
|
||
pnpm verify
|
||
```
|
||
|
||
架构必须为 `x86_64`,Node.js 必须为 22.x,pnpm 必须为 10.x。每次发布使用 `/opt/a-share-analysis/releases/<版本或提交>/` 新目录,验证后再原子切换 `/opt/a-share-analysis/current`,禁止在 current 中原地覆盖。
|
||
|
||
## 配置与 systemd
|
||
|
||
生产配置放在 `/etc/a-share-analysis/api.env`、`scheduler.env`、`worker.env`,建议权限 `root:a-share 0640`;Web 的 `VITE_` 公开变量在构建前注入。三个 systemd 单元通过各自的 `EnvironmentFile=` 只读取本进程需要的键,运行用户为非登录系统用户 `a-share`。
|
||
|
||
```bash
|
||
sudo install -m 0644 deploy/systemd/a-share-*.service.example /etc/systemd/system/
|
||
sudo install -m 0644 deploy/nginx/a-share-analysis.conf.example /etc/nginx/conf.d/a-share-analysis.conf
|
||
sudo systemd-analyze verify /etc/systemd/system/a-share-api.service.example
|
||
sudo systemd-analyze verify /etc/systemd/system/a-share-scheduler.service.example
|
||
sudo systemd-analyze verify /etc/systemd/system/a-share-worker.service.example
|
||
sudo nginx -t
|
||
sudo systemctl daemon-reload
|
||
sudo systemctl restart a-share-api.service.example
|
||
sudo systemctl restart a-share-scheduler.service.example
|
||
sudo systemctl restart a-share-worker.service.example
|
||
curl --fail http://127.0.0.1:3000/api/v1/health
|
||
```
|
||
|
||
当前工程尚无业务表迁移;后续新增迁移后必须在切换 current 前执行并记录结果。生产环境禁止 `synchronize: true`,开发流程也禁止用生产数据库做 Schema 基线或连接测试。
|
||
|
||
## 检查与回退
|
||
|
||
使用 `systemctl status`、`journalctl -u`、HTTP 健康端点和 Nginx 访问结果确认发布。失败时把 `current` 原子切回上一完整发布目录,重启三个服务并再次验证。生产配置和数据不随代码目录覆盖;RocketMQ 的 NameServer、Broker、Proxy 与 CommitLog 由运维独立维护。
|