42 lines
4.0 KiB
Markdown
42 lines
4.0 KiB
Markdown
# Veyra 自动部署
|
||
|
||
开发在 `dev` 分支进行,不直接提交或推送 `master`。Gitea 中的 `master` 保护规则禁用直接推送、强制推送和管理员绕过;通过合并请求进入 `master`。流水线只监听 `master` 的 push,合并提交也会触发;不监听 `dev` 或 PR 事件。因此合并前由本地检查把关,流水线在合并后验证,验证失败不部署。
|
||
|
||
## 当前部署目标
|
||
|
||
- Gitea:`https://git.sundynix.cn/Blizzard/Veyra`,使用已有全局 Runner 的 `ubuntu-latest` 标签。
|
||
- SSH:`root@192.168.100.132`;目录:`/home/workspace/sundynix-veyra`。
|
||
- 默认管理端与 API:`http://192.168.100.132:8080`,同一个镜像、同源服务。
|
||
- 应用配置:服务器 `configs/.env`,权限 600;日志:服务器 `logs/`,由容器 UID 10001 写入并轮转。
|
||
- PostgreSQL、Redis 使用已有内网服务;不额外部署数据库容器,不覆盖数据、身份或加密主密钥。
|
||
|
||
仓库 Actions 已启用,部署使用 `DEPLOY_PASSWORD`、`DEPLOY_KNOWN_HOSTS` 两个仓库 Secret。服务器地址、用户和目录在工作流中明确配置;SSH 严格校验已知服务器公钥。可选 `VEYRA_ENV_FILE` 仅用于新服务器首次创建配置,已有文件永不覆盖。当前服务器已通过 SSH 安全初始化,无需设置此可选 Secret。
|
||
|
||
应用环境文件必须采用无外层引号的 `KEY=VALUE` 格式。Compose 使用 `env_file.format: raw`,保留密码中的 `$`、`#` 等字符,不把应用配置作为 Compose 插值文件。需要 Docker、Compose >=2.30、bash、flock、gzip、sha256sum;当前服务器 Compose 2.36.2 满足要求。
|
||
|
||
## 流水线
|
||
|
||
1. 使用 Gitea job token 下载当前提交归档,与参考项目保持一致,避免 Git HTTP pack 检出问题。
|
||
2. Docker 内检查 App 类型、12 项客户端测试、iOS/Android Hermes 导出;管理端类型检查、构建、Go embed;gofmt、go vet 与 Go race 测试。构建阶段使用已验证可达的 `https://goproxy.cn,direct` 下载 Go 依赖,保留默认 checksum 校验;运行镜像不包含此构建设置。PostgreSQL 集成测试使用独立、用后清理的 CI 容器,不访问开发库。部署脚本也有成功、校验失败、迁移失败、健康失败回滚、配置保留测试。
|
||
3. 所有检查通过才构建 `sundynix/veyra:<完整提交 SHA>`,打包压缩并生成 SHA-256 校验文件,通过 SSH 传入服务器的独立发布目录。
|
||
4. 服务器加锁串行发布,校验压缩包、加载镜像,执行同一可执行文件的 `-command db-create` 和 `-command db-migrate`,再启动 Compose。
|
||
5. `/readyz` 检查 PostgreSQL 与 Redis。新版本就绪后才更新 `.current-image`;失败则恢复上一版镜像与 Compose,首次部署失败则停止应用。迁移失败不替换运行中的服务。不会自动回退数据库迁移;后续迁移应保持与上一版应用兼容,破坏性迁移需单独设计。
|
||
|
||
回测 Python 引擎和管理端已包含在运行镜像中;App 导出仅用于 CI 检查,不是 TestFlight、IPA 发布或 Expo OTA 更新。
|
||
|
||
目前认证与行情、交易研究仍处于开发阶段,服务器沿用本地 `APP_ENV=local` 配置以支持现有开发身份。此部署不代表生产认证、安全与正式行情授权已完成;改为生产环境前需完成正式登录流程。
|
||
|
||
## 本地检查
|
||
|
||
```sh
|
||
bash deploy/check.sh # 需要运行中的 Docker;完成容器内全部检查
|
||
python3 deploy/tests/test_release.py # 无需 Docker,检查发布决策与配置保留
|
||
npm --prefix web/admin run build
|
||
go vet ./...
|
||
go build -trimpath -o bin/veyra .
|
||
```
|
||
|
||
服务器排查使用 `docker compose --env-file /dev/null -f docker-compose.yml`,同时将 `VEYRA_IMAGE` 设为 `.current-image` 中的值。不要将含凭据的 `docker compose config`、环境文件或容器完整 inspect 输出到日志;配置语法检查使用 `config --quiet`。
|
||
|
||
配置语义参考 [Gitea Actions](https://docs.gitea.com/usage/actions/) 与 [Docker Compose env_file](https://docs.docker.com/reference/compose-file/services/#env_file)。
|