97 lines
4.2 KiB
Markdown
97 lines
4.2 KiB
Markdown
# 在线安装与更新
|
||
|
||
Kaidi ERP 的生产安装不依赖 Docker。安装器支持 64 位 Linux 和 macOS,生产数据库固定为 PostgreSQL 15 或更高版本;生产 JAR 不包含 SQLite 运行库,SQLite 仅保留给源码目录下的本地开发和测试。
|
||
|
||
## 发布链路
|
||
|
||
推送 `v*` Git tag 后,[release.yml](../.gitea/workflows/release.yml) 会完成前端构建、Spring Boot 打包、Ed25519 签名,并在 Gitea 中创建或更新对应 Release。每个可安装 Release 必须包含:
|
||
|
||
- `kaidi-erp-<version>.tar.gz`
|
||
- `SHA256SUMS`
|
||
- `SHA256SUMS.sig`
|
||
|
||
Gitea Actions runner 需要预装 Java 17 或更高版本、Node.js/npm、Python 3、tar、curl 和 OpenSSL 3。
|
||
|
||
在仓库 Actions 设置中创建:
|
||
|
||
- Secret `RELEASE_GITEA_TOKEN`:具备当前仓库 Release 写权限的 Gitea token。
|
||
- Secret `RELEASE_PRIVATE_KEY_B64`:Ed25519 私钥的单行 Base64 内容。
|
||
- Variable `GITEA_BASE_URL`:生产 Gitea 的 HTTPS 外部地址。
|
||
- Variable `GITEA_ALLOW_INSECURE_HTTP`:生产环境不要设置;当前 HTTP 测试服务器必须显式设为 `1`。
|
||
|
||
本机现有签名私钥位于 `~/.config/kaidi-erp/release-signing-key.pem`,不得提交到 Git。macOS 可用以下命令生成 Secret 值:
|
||
|
||
```bash
|
||
base64 < ~/.config/kaidi-erp/release-signing-key.pem | tr -d '\n'
|
||
```
|
||
|
||
发布稳定版本:
|
||
|
||
```bash
|
||
git tag v0.2.0
|
||
git push origin v0.2.0
|
||
```
|
||
|
||
## 首次安装
|
||
|
||
推荐给 Gitea 配置 HTTPS 域名,然后执行:
|
||
|
||
```bash
|
||
curl -fsSL https://git.example.com/awaioi/ERP/raw/branch/main/install.sh \
|
||
| sudo -E bash -s -- \
|
||
--gitea-url https://git.example.com \
|
||
--repository awaioi/ERP
|
||
```
|
||
|
||
安装器会从终端读取现有 PostgreSQL 的主机、端口、数据库、用户和密码。通过管道运行时也会直接读取 `/dev/tty`,不会把管道中的脚本内容误当成密码。
|
||
|
||
无人值守安装示例:
|
||
|
||
```bash
|
||
export ERP_DB_HOST=127.0.0.1
|
||
export ERP_DB_PORT=5432
|
||
export ERP_DB_NAME=kaidi_erp
|
||
export ERP_DB_USER=kaidi_erp
|
||
export ERP_DB_PASSWORD='replace-with-a-strong-password'
|
||
export ERP_DB_SSLMODE=require
|
||
|
||
curl -fsSL https://git.example.com/awaioi/ERP/raw/branch/main/install.sh \
|
||
| sudo -E bash -s -- --non-interactive --gitea-url https://git.example.com
|
||
```
|
||
|
||
在 apt 系 Linux 上也可以让安装器创建本机 PostgreSQL:
|
||
|
||
```bash
|
||
curl -fsSL https://git.example.com/awaioi/ERP/raw/branch/main/install.sh \
|
||
| sudo -E bash -s -- --db-mode local --gitea-url https://git.example.com
|
||
```
|
||
|
||
当前 `http://38.76.196.225:10099` 仅用于开发测试,必须同时传入 `--allow-insecure`。HTTP 会暴露安装脚本、Release 元数据和 Gitea token,不应作为生产部署方式。
|
||
|
||
## 在线更新
|
||
|
||
管理员进入“应用定制平台 -> 系统更新”,点击“检查更新”,确认版本和 Release notes 后执行更新。后端启动独立更新助手,更新助手会:
|
||
|
||
1. 下载三个 Release 资产并验证 Ed25519 签名和 SHA-256。
|
||
2. 拒绝路径穿越、符号链接和结构不完整的安装包。
|
||
3. 可选执行 `pg_dump`,再写入独立版本目录。
|
||
4. 原子切换 `current` 链接并终止旧进程,由 systemd 或 launchd 拉起新版本。
|
||
5. 等待健康检查;失败时切回上一版本并再次验证健康状态。
|
||
|
||
更新过程使用操作系统文件锁,同一安装目录同时只允许一个更新任务。手动触发可执行:
|
||
|
||
```bash
|
||
/opt/kaidi-erp/current/bin/erp-update install 0.2.0
|
||
```
|
||
|
||
在线更新依赖安装器注册的 systemd 或 launchd 服务来拉起新旧版本。使用 `--no-service` 时后台更新默认关闭;如由其他进程管理器接管,须先确认它会在 ERP 进程退出后自动重启,再手工启用 `OA_UPDATE_ENABLED=true`。健康检查默认最多等待 120 秒、每 2 秒轮询一次,可分别通过 `ERP_UPDATE_HEALTH_TIMEOUT_SECONDS` 和 `ERP_UPDATE_HEALTH_POLL_SECONDS` 调整。
|
||
|
||
Linux 默认目录:
|
||
|
||
- 程序:`/opt/kaidi-erp`
|
||
- 配置:`/etc/kaidi-erp/erp.env`
|
||
- 状态:`/var/lib/kaidi-erp/update-state.json`
|
||
- 服务:`kaidi-erp.service`
|
||
|
||
应用回滚不等于数据库回滚。发布包含不可逆 Flyway 迁移前,应先保证旧应用仍兼容新结构,并在安装时设置 `ERP_UPDATE_BACKUP_MODE=pg_dump`。数据库恢复仍需人工确认后使用 `pg_restore`,更新助手不会自动覆盖生产数据。
|