安装
Tiyi 是一个 Go 二进制。挑一种构建路径、把二进制放到主机、写一份小 YAML 配置,并按主机在集群中扮演的角色挑一个运行模式。
从源码构建
从一份新的 Tiyi 仓库 checkout:
$ make proto # 从 proto/ 重新生成 Connect Go + Protobuf Go
$ make web # 把 Vben Admin 前端构建到 web/dist/
$ make build # 编译嵌入前端的 bin/tiyi
构建发布产物时使用带保护的一键目标。它会拒绝脏工作树、校验内嵌厂商授权公钥的指纹、重新构建 proto / 前端,并产出同一个单一二进制:
$ make release
构建依赖:
- Go 1.25+ —— 模块下限。基于
modernc.org/sqlite的纯 Go SQLite 意味着没有 CGo,可以干净跨平台编译。 - Node 20+ 与 pnpm 9+ —— 用于
make web。下次make build时会经由go:embed嵌入产物。 - buf —— 已捆绑在
tmp/buf/bin/buf,用于重新生成 proto。改完proto/tiyi/v1/*.proto后跑make proto刷新生成的 Connect/PB Go。
预构建二进制
Tiyi 是单一签名二进制 —— 在单节点上免费且功能完整。权威安装脚本发布在 https://www.tiyisec.com/install.sh:
$ curl -fsSL https://www.tiyisec.com/install.sh | bash
$ tiyi --version
tiyi v3.0.0-rc.1-57-gf297a22 linux/amd64
脚本会下载与平台匹配的二进制,比对 SHA-256 manifest,并放到 /usr/local/bin/tiyi。linux/amd64 与 linux/arm64 是一等目标。
从已运行的服务端引导节点
已运行的 Tiyi 服务端暴露 GET /download/tiyi,一个无鉴权端点会流式输出当前运行的二进制。在干净的机器上引导节点:
$ curl -fsSL -o /usr/local/bin/tiyi http://primary:8080/download/tiyi
$ chmod +x /usr/local/bin/tiyi
跨平台下载,附加 ?os=linux&arch=arm64,会改为提供已导入的二进制 release。
配置文件
Tiyi 读取一份 Koanf 风格的 YAML 配置。从下面这份最小配置起步,其余靠默认:
# /etc/tiyi/tiyi.yaml
api:
addr: "0.0.0.0:8080"
storage:
state_db: "/var/lib/tiyi/state.db"
crypto:
kek_file: "/etc/tiyi/kek.bin" # 32 字节静态加密密钥
auth:
jwt_secret: "<32+ 字节随机>" # HS256 签名密钥
proxy:
http_addr: ":80"
https_addr: ":443"
caddy_admin_socket: "/var/lib/tiyi/caddy-admin.sock"
用 --config 传入:
$ tiyi standalone --config /etc/tiyi/tiyi.yaml
上线前两个字段必须显式设置。crypto.kek_file 与 auth.jwt_secret 都有不能跨重启幸存的开发友好回退。详见部署 → 生产加固。
运行模式
同一个二进制暴露五个子命令。按这台主机的角色挑一个:
standalone- 主控 + 节点合一。单机部署的默认值。可写;数据平面也在同一节点上代理。五分钟安装路径。
server- 集群控制平面 leader,外加自带嵌入式节点。接受节点注册、对外提供 API 与 dashboard、代理流量。
secondary- 热备控制平面,外加自带嵌入式节点。只读 API、代理流量、用
tiyi promote手工切主。 agent- 纯数据平面:Caddy + Coraza,从主节点接收已签名的配置 bundle。无控制平面职责。
dashboard- 仅 UI,用于不代理流量的拆分部署。
入网一个节点
节点用主节点签发的一次性 token 入网。在主节点上:
$ TOKEN="$(tiyi agents issue-token --tag edge-c | jq -r .token)"
在节点主机上,确保二进制已就位:
$ tiyi agent \
--api http://primary:8080 \
--enrollment-token "$TOKEN" \
--state-dir /var/lib/tiyi/agent \
--proxy-http-addr 0.0.0.0:80 \
--proxy-https-addr 0.0.0.0:443
token 在首次接入时被消耗。入网后节点把身份持久化到 <state-dir>/identity.json,token 不再需要。丢了 state 目录就需要新的 token 重新入网。
systemd 单元
长期运行的部署用你的 init 系统跑 Tiyi。一个最小的 systemd unit:
# /etc/systemd/system/tiyi.service
[Unit]
Description=Tiyi WAF
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=tiyi
Group=tiyi
ExecStart=/usr/local/bin/tiyi server --config /etc/tiyi/tiyi.yaml
Restart=on-failure
RestartSec=2s
AmbientCapabilities=CAP_NET_BIND_SERVICE
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
NoNewPrivileges=true
ProtectSystem=strict
ReadWritePaths=/var/lib/tiyi /etc/tiyi
ProtectHome=true
PrivateTmp=true
[Install]
WantedBy=multi-user.target