部署服务端
本页在一台带 systemd 的 Linux 上部署 fleetd-server,数据库用 PostgreSQL,前面放 HTTPS 反向代理。
1. 生成发布私钥
客户端只安装用你的发布私钥签过名的版本。在你自己的电脑上生成一次即可:
go run ./server/cmd/fleetd-release keygen -key release.key
它会输出 release_key: …,这是公钥,稍后写进服务端配置。release.key 要离线保存并备份,绝对不要拷到服务端:拿到它的人可以给所有机器推送客户端程序。
2. 编译
VERSION=0.1.0 deploy/build.sh
需要 Go 和 Node.js。脚本会编译后台页面,以及 amd64 和 arm64 两种架构的静态程序,放在 bin/ 下;因为有 release.key,还会生成签好名的客户端包 bin/fleetd-agent-0.1.0-<架构>.release。只编译一种架构就设 ARCHES=amd64。
3. 数据库
创建用户和数据库,例如:
CREATE ROLE fleetd LOGIN PASSWORD 'change-me';
CREATE DATABASE fleetd OWNER fleetd;
服务端每次启动时会自动建表、升级表结构。
4. 安装服务端
install -m 755 bin/fleetd-server-amd64 /usr/local/bin/fleetd-server
useradd -r -s /usr/sbin/nologin fleetd
mkdir -p /etc/fleetd
cp deploy/server.example.yaml /etc/fleetd/server.yaml
编辑 /etc/fleetd/server.yaml:设置 database,填上 release_key,中文告警加 language: zh,其余见配置参考。然后:
fleetd-server -config /etc/fleetd/server.yaml keygen # 生成服务端密钥
chown -R root:fleetd /etc/fleetd
chmod 640 /etc/fleetd/server.yaml /etc/fleetd/server.key
fleetd-server -config /etc/fleetd/server.yaml admin-add -totp admin
cp deploy/fleetd-server.service /etc/systemd/system/
systemctl enable --now fleetd-server
服务端默认只监听 127.0.0.1:8480。
5. HTTPS 反向代理
客户端和后台页面共用一个地址。反向代理要能转发 WebSocket,并且允许长时间保持连接。在服务端配置里设 trust_loopback_proxy: true,fleetd 才会采用代理传来的客户端地址和协议。
server {
listen 443 ssl;
http2 on;
server_name fleetd.example.com;
ssl_certificate /etc/letsencrypt/live/fleetd.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/fleetd.example.com/privkey.pem;
client_max_body_size 128m; # 上传客户端发布包
location / {
proxy_pass http://127.0.0.1:8480;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto https;
proxy_buffering off;
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
}
}
fleetd.example.com {
reverse_proxy 127.0.0.1:8480
}
提示
像上面这样把 X-Forwarded-For 设成客户端地址本身。fleetd 取最后一个值,客户端自己伪造的地址链不起作用。
6. 上传客户端版本
打开 https://fleetd.example.com 登录,在「设置 → 客户端发布包」上传 bin/ 下的 .release 文件。一键安装会从这里下载各架构的最新版本。
7. 生成签名密钥
在「设置 → 签名密钥」点「在这个浏览器里生成签名密钥」。私钥留在这个浏览器里;公钥登记到服务端,之后新装的每台机器都会信任它。
接下来接入机器。
内网接入
如果部分机器和服务端在同一个 VPN 里(WireGuard、Tailscale 等),可以让它们走内网连接。把内网地址加到 listen,并设置 internal_agent_url:
listen: ["127.0.0.1:8480", "10.0.0.1:8480"]
internal_agent_url: ws://10.0.0.1:8480/agent/ws
后台的安装命令就会多一个「走内网」选项。这里用不加密的 ws:// 没关系,客户端通信本身已经用 Noise 加密和认证。
用 Docker 运行
仓库里的 docker-compose.yml 会启动服务端和 PostgreSQL。正式使用时,修改 deploy/docker/server.yaml(数据库密码、release_key),并在 8480 端口前放一个 HTTPS 代理。Docker 里代理不是从本机回环地址连进来的,所以保持 trust_loopback_proxy: false。