Files
Veyra/deploy

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 严格校验已知服务器公钥。服务器配置需在首次部署前初始化;当前服务器已通过 SSH 安全初始化。发布不传输或覆盖配置。

应用环境文件必须采用无外层引号的 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. Runner 只传提交源码,检查和构建在部署服务器独立 builds/ 目录中执行,复用服务器 Docker 依赖层缓存;使用独立构建锁避免并发资源争用。所有检查通过才构建 sundynix/veyra:<完整提交 SHA>,在服务器本地打包并生成 SHA-256 校验文件。不在 Runner 重复下载基础镜像,也不跨主机传输大型镜像。
  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。

HTTPS 反向代理

域名 veyra.sundynix.cn 的 Nginx 将全部页面与 API 代理至 http://192.168.100.132:8080,传递原始 Host。服务器 configs/.env 设置 PUBLIC_ORIGIN=https://veyra.sundynix.cn,使 HTTPS Origin 校验和 Secure Cookie 正确工作;应用不信任任意 X-Forwarded-Proto。域名 Nginx 由用户按已提供配置操作。