fleetdfleetd
指南
设计
  • English
  • 简体中文
GitHub
指南
设计
  • English
  • 简体中文
GitHub
  • 介绍
  • 快速开始
  • 部署服务端
  • 接入机器
  • 命令和终端
  • 客户端更新
  • 告警
  • 配置参考
  • 常见问题

部署服务端

本页在一台带 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 才会采用代理传来的客户端地址和协议。

nginx
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;
    }
}
Caddy
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。

在 GitHub 上编辑此页
最后更新: 2026/11/3 11:50
贡献者: weiyi
Prev
快速开始
Next
接入机器