AYNUR / RELEASE MANAGEMENT

aynur-deploy

多项目发布,让每次切换都有检查与退路。

一个独立的 Gitee Tag 发布服务。按项目校验仓库与标签,串行准备版本、切换发布目录,并在健康检查失败时恢复已有的上一版本。进程重载由项目配置显式连接。

项目类型
独立 Rust HTTP 服务 + CLI
触发入口
Gitee Tag Push WebHook
状态 / 配置
SQLite · 项目 TOML

01 / ARCHITECTURE

把发布当作一次可追踪的版本切换。

Gitee 事件经校验后持久化进入 FIFO 串行队列。部署服务准备版本目录,再切换 current 链接、执行重载和健康检查。

健康检查失败时恢复已有的上一版本并重载 · 小屏可在图内横向滚动单独查看架构图

一个服务,多个项目

每个项目有独立 TOML、仓库、标签规则、发布路径和健康检查。SQLite 保存部署记录,Git mirror / worktree 用于取出标签所指的代码。

激活与回滚

迁移命令在切换前执行;currentPath 通过符号链接原子切换。若有可恢复的上一版本,健康失败会回滚链接并执行重载。数据库迁移不会随文件回滚自动撤销。

02 / QUICKSTART

为第一个项目建立发布入口。

默认服务监听 127.0.0.1:9091,由 HTTPS 反向代理对外提供 WebHook。

初始化服务

在开发机或构建机安装。目标 Linux 服务器推荐安装匹配架构的预编译二进制,再初始化服务并添加项目。

Terminal · 初始化
cargo install aynur-deploy --locked

# 以下在部署服务器执行
sudo aynur-deploy init
sudo aynur-deploy add my-site

配置项目与启动

编辑 /etc/aynur-deploy/projects/my-site.toml 中的仓库、路径和健康检查,保存后检查配置。serve 是常驻服务,可交给 Aynur 或 systemd 守护。

Terminal · 检查并启动
sudo aynur-deploy check
sudo aynur-deploy serve

连接 Gitee Tag Push

在仓库 WebHook 设置中勾选 Tag Push,Password 使用该项目生成的 webhookToken。发布前先将提交推送到仓库,再推送符合 tagPattern 的标签。

Terminal · 创建发布标签
# 示例标签需使用你本次发布的实际时间
git tag deploy-20261030-120000
git push origin deploy-20261030-120000

WebHook URL:https://deploy.example.com/v1/hooks/gitee/my-site。将示例域名换成你的发布服务域名;所有项目共用一个服务入口,通过 projectId 区分。

03 / CONFIGURATION

项目配置决定怎么发布。

以下为静态站点结构示例。仓库信息、域名与目录需按实际项目填写,项目配置文件权限保持 0600。

选择发布目标

  • static:发布仓库中已经构建好的静态产物。
  • binary:运行仓库中已有的二进制产物。
  • rust:在服务器执行 Cargo 构建,并收集指定二进制和资源。

小规格服务器适合在本地或 CI 完成构建,减少线上编译压力。当前 binary 模式从 Git 仓库读取产物;本地压缩包经 SSH 上传属于额外发布流程,不能直接当作现有 WebHook 能力使用。

与 Aynur 组合

在二进制项目的 [reload] 中配置固定参数命令:

commands = [["aynur", "reload", "api", "--update-env"]]

该应用应事先由 Aynur 注册并指向项目 current 下的二进制,且两者使用同一运行用户和状态目录。

my-site.toml · 结构示例
projectId = "my-site"
currentPath = "/var/www/my-site/current"
repositoryFullName = "your-team/my-site"
repositoryUrl = "git@gitee.com:your-team/my-site.git"
webhookToken = "替换为 add 生成的项目密码"
tagPattern = "^deploy-[0-9]{8}-[0-9]{6}$"
retainReleases = 3

[healthCheck]
url = "https://site.example.com/"
attempts = 5
intervalMs = 2000
timeoutMs = 5000

[deployment]
type = "static"
entryFile = "index.html"

04 / OPERATIONS

用状态和明确的操作管理发布。

项目名是脚本中的稳定标识。list 显示的序号随项目集合变化。

Terminal · 发布运维
aynur-deploy list
aynur-deploy status my-site

# 停止接收新发布;已有任务继续完成
aynur-deploy stop my-site

# 恢复接收与队列处理
aynur-deploy start my-site

服务健康与项目健康

GET /healthz 检查发布服务与 SQLite。项目的健康检查单独使用 TOML 中的 healthCheck.url。

若项目因失败进入 blocked,先处理根因,再执行 aynur-deploy unblock my-site。需要回滚到指定版本时使用 aynur-deploy rollback my-site <commitSha>。

05 / SOURCE & DOCS

配置契约与发布实现。

web.rs 校验事件,db.rs 记录队列,deploy.rs 完成版本准备、激活与回滚。

每个工具各有职责,按你的项目需要组合。

浏览全部相关工具