112 lines
6.8 KiB
Markdown
112 lines
6.8 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`
|
||
- `kaidi-erp-installer-<version>.jar`
|
||
- `SHA256SUMS`
|
||
- `SHA256SUMS.sig`
|
||
|
||
Gitea Actions runner 需要预装 Java 17 或更高版本、Node.js/npm、Python 3、tar、curl 和 OpenSSL 3。
|
||
|
||
流水线使用 Gitea 1.27 提供的短期 `GITEA_TOKEN`,权限限定为代码只读、当前仓库 Release 可写,不需要创建个人访问令牌。仓库 Actions 设置只需创建:
|
||
|
||
- Secret `RELEASE_PRIVATE_KEY_B64`:Ed25519 私钥的单行 Base64 内容。
|
||
- Variable `ERP_RELEASE_ALLOW_INSECURE_HTTP`:正式 HTTPS 服务器保持未设置;仅隔离的 HTTP 开发镜像才允许设为 `1`。Gitea 不允许仓库变量名以保留前缀 `GITEA_` 或 `GITHUB_` 开头。
|
||
|
||
本机现有签名私钥位于 `~/.config/kaidi-erp/release-signing-key.pem`,不得提交到 Git。macOS 可用以下命令生成 Secret 值:
|
||
|
||
```bash
|
||
base64 < ~/.config/kaidi-erp/release-signing-key.pem | tr -d '\n'
|
||
```
|
||
|
||
发布稳定版本(先确认发布提交已经同步到 `main` 和 `dev`):
|
||
|
||
```bash
|
||
git switch main
|
||
git pull --ff-only origin main
|
||
git tag -a v0.3.8 -m 'Kaidi ERP v0.3.8'
|
||
git push origin v0.3.8
|
||
```
|
||
|
||
## 首次安装
|
||
|
||
官方 Gitea 已启用 HTTPS,Linux 可直接执行:
|
||
|
||
```bash
|
||
curl -fsSL https://git.awaioi.com/awaioi/ERP/raw/branch/main/install.sh | sudo -E bash
|
||
```
|
||
|
||
命令行只检查并安装 Java 17+、curl、tar、Python 3 和 OpenSSL 3,然后启动独立安装器并输出带一次性 token 的网页地址。数据库、管理员和密码全部在首次网页向导填写;安装器会真实测试 PostgreSQL 15+、数据库所有权、`public` schema 建表权限和 `pg_trgm` 所有权,迁移完成并确认正式服务健康后才写 `install.lock`,随后物理删除安装器目录。
|
||
|
||
安装器默认从 `https://git.awaioi.com/awaioi/ERP` 获取签名 Release。安装地址优先使用 `--public-url`(或 `ERP_PUBLIC_URL`);未指定时依次尝试探测公网 IP、回退局域网 IP,并始终额外输出 `Local URL`。ERP 已绑定独立业务域名时可显式传入例如 `--public-url https://erp.example.com`。参数支持 HTTPS 域名、端口、路径和已有查询参数,安装器会安全追加 token,不会用局域网 IP 覆盖显式公网地址。
|
||
|
||
目标 PostgreSQL 必须是专用空数据库,网页中填写的账号必须是该数据库的所有者。只拥有连接权限的账号会在网页连接测试阶段被拒绝,不再等到 Flyway 迁移后才显示笼统错误。
|
||
|
||
Linux 生产服务要求主机使用 systemd;没有 systemd 的容器、WSL 或精简系统只能显式使用 `--no-service` 做开发验收,在线更新也会保持关闭。
|
||
|
||
正式安装和更新不得启用 `--allow-insecure`。需要锁定版本时,应从固定 tag 下载引导脚本并验证本版本记录的 SHA-256。
|
||
|
||
当前 `v0.3.8` 安装命令:
|
||
|
||
```bash
|
||
(
|
||
set -e
|
||
tmp="$(mktemp)"
|
||
trap 'rm -f -- "$tmp"' EXIT
|
||
curl -fsSL https://git.awaioi.com/awaioi/ERP/raw/tag/v0.3.8/install.sh -o "$tmp"
|
||
printf '%s %s\n' 'ae6a6613d4abe37ba24b41e1901eaa3b29cc32939583302c7f62277922fbbe9b' "$tmp" | sha256sum -c -
|
||
sudo -E bash "$tmp" --version 0.3.8
|
||
)
|
||
```
|
||
|
||
完整卸载并清空本项目数据库 schema 后重装:
|
||
|
||
```bash
|
||
(
|
||
set -e
|
||
tmp="$(mktemp)"
|
||
trap 'rm -f -- "$tmp"' EXIT
|
||
curl -fsSL https://git.awaioi.com/awaioi/ERP/raw/tag/v0.3.8/uninstall.sh -o "$tmp"
|
||
printf '%s %s\n' '98c56fed2fd4d01874e4ab5a1a4f3ec42ec3e29b315ffd87385a95488d587546' "$tmp" | sha256sum -c -
|
||
sudo -E bash "$tmp" --purge-database --yes
|
||
)
|
||
```
|
||
|
||
该命令会先确认安装路径与 `erp.env` 一致、systemd 服务已经停止,再删除目标数据库 `public` schema 中的全部对象以及 `/opt/kaidi-erp`、`/etc/kaidi-erp`、`/var/lib/kaidi-erp`、`/var/log/kaidi-erp`。只允许对 Kaidi ERP 专用数据库执行。
|
||
|
||
## 在线更新
|
||
|
||
管理员可从顶部工具栏、用户菜单、手机导航抽屉或“应用定制平台 -> 系统更新”进入 `/appdev/update`。入口只对 `ADMIN` 角色显示;发现新版本时顶部和手机入口会显示版本提示。
|
||
|
||
更新源由首次安装器写入 `ERP_CONFIG_FILE` 指向的 `erp.env`。更新页面不会要求管理员重复填写 Gitea 地址、仓库、Token、通道或 HTTP 开关。`v0.3.8` 会把旧官方 HTTP 地址自动迁移到 `https://git.awaioi.com`,但不会覆盖其他自定义源;需要变更基础设施参数时,由服务器运维人员修改 `OA_UPDATE_*` 环境变量并重启服务。
|
||
|
||
点击“检查更新”后,页面会展示当前版本、在线最新版本、发布日期、最新版本更新日志和历史正式版本记录。点击“安装并重启”后持续显示下载、验签、安装、重启和回滚进度;服务重启短暂断开期间页面会自动重连。后端启动独立更新助手,更新助手会:
|
||
|
||
1. 下载正式归档、`SHA256SUMS` 和签名并验证 Ed25519/SHA-256;独立安装器资产只在首次安装使用。
|
||
2. 拒绝路径穿越、符号链接和结构不完整的安装包。
|
||
3. 可选执行 `pg_dump`,再写入独立版本目录。
|
||
4. 原子切换 `current` 链接并终止旧进程,由 systemd 或 launchd 拉起新版本;Linux unit 使用 `KillMode=process`,让更新助手继续执行健康检查和必要的回滚。
|
||
5. 等待健康检查;失败时切回上一版本并再次验证健康状态。
|
||
|
||
更新过程使用操作系统文件锁,同一安装目录同时只允许一个更新任务。手动触发可执行:
|
||
|
||
```bash
|
||
/opt/kaidi-erp/current/bin/erp-update install 0.3.8
|
||
```
|
||
|
||
在线更新依赖安装器注册的 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`,更新助手不会自动覆盖生产数据。
|