开始使用

安装

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

构建依赖:

预构建二进制

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/tiyilinux/amd64linux/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_fileauth.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

下一步阅读