Files
Veyra/deploy/README.md
T

4.0 KiB
Raw Blame History

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 配置以支持现有开发身份。此部署不代表生产认证、安全与正式行情授权已完成;改为生产环境前需完成正式登录流程。

本地检查

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 与 Docker Compose env_file。