yagamil 发表于 2025-1-13 14:43:08

Rust 版 ServerStatus 探针安装步骤

> 适用系统:Debian 系发行版,包括 Ubuntu 和 Armbian,其他发行版按流程稍改命令一般也可。

Github: (https://forum.naixi.net/goto.php?url=https%3A%2F%2Fgithub.com%2Fzdz%2FServerStatus-Rust)

!(https://ib.ahfei.blog/imagesbed/serverstatus-rust-web-23-11-51.png)

**前置准备**:

1. 一个域名解析到作为服务端机子的ip上,比如 serverstatus.ahfei.blog 。既可用于web端界面访问,也可用于客户端联系服务端。
2. VPS 的网络可以访问GitHub

### 安装 ServerStatus-Rust

确保安装了一些软件工具

```sh
apt install -y curl unzip
```

获取机器架构,查找最新版本

```sh
# get_architecture
arch=$(uname -m)
# 设置 ARCHITECTURE 变量
if [[ $arch == "aarch64" ]]; then
    ARCHITECTURE="aarch64"
elif [[ $arch == "x86_64" ]]; then
    ARCHITECTURE="x86_64"
else
    ARCHITECTURE="unknown"
fi

github_project="zdz/ServerStatus-Rust"
tag=$(curl -m 10 -sL "https://api.github.com/repos/$github_project/releases/latest" | grep "tag_name" | head -n 1 | awk -F ":" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g')
echo ${tag}
```

创建安装目录(比如用家目录下的 myserve/serverstatus)

```sh
mkdir -p ~/myserve/serverstatus && cd ~/myserve/serverstatus
```

------

**安装服务端**

下载和解压服务端

```sh
curl -L -O https://github.com/zdz/ServerStatus-Rust/releases/download/${tag}/server-${ARCHITECTURE}-unknown-linux-musl.zip && \
unzip -o "server-${ARCHITECTURE}-unknown-linux-musl.zip" && \
rm "server-${ARCHITECTURE}-unknown-linux-musl.zip"
```

------

**安装客户端**

下载和解压客户端

```sh
curl -L -O https://github.com/zdz/ServerStatus-Rust/releases/download/${tag}/client-${ARCHITECTURE}-unknown-linux-musl.zip && \
unzip -o "client-${ARCHITECTURE}-unknown-linux-musl.zip" && \
rm "client-${ARCHITECTURE}-unknown-linux-musl.zip"
```

> 作为服务端的机器,除了要安装 ServerStatus-Rust 的服务端,还需要安装客户端。

serverstatus 结构,客户端主动上报服务端:

!(https://ib.ahfei.blog/imagesbed/serverstatus-structure-23-11-14.webp)

### ServerStatus 服务端

先开启防火墙

```sh
myserve="serverstatus"
sudo ufw allow 8080,9394/tcp comment $myserve && sudo ufw reload
```

#### 服务端配置

进入工作目录,编辑服务端的配置文件

```sh
cd ~/myserve/serverstatus && sudo vim config.toml
```

配置文件示例

```toml
# 默认安装的路径
workspace = "/home/vfly2/myserve/serverstatus"

# 侦听地址, ipv6 使用 [::]:9394
grpc_addr = "0.0.0.0:9394"
http_addr = "0.0.0.0:8080"
# 默认30s无上报判定下线
offline_threshold = 30

# 管理员账号,不设置的话,默认随机生成,用于查看 /detail, /map
admin_user = "admin_user"
admin_pass = "112233"

hosts = [
{name = "vfly2bwg", password = "123456", alias = "Bwg", location = "US", type = "KVM", labels = "os=debian;ndd=2024/1/15;spec=2C/2G/40G;"},
{name = "vfly2ht", password = "123456", alias = "HT", location = "TR", type = "VMware", labels = "os=debian;ndd=2024/3/28;spec=1C/1G/20G;"},
{name = "vfly2as", password = "123456", alias = "alongserver", location = "AS", type = "arm", labels = "os=arch;ndd=2029/11/25;spec=4C/2G/14G;", notify = false},
]

# 告警间隔默认为30s
notify_interval = 30


# 开关 true 打开
enabled = false
bot_token = "<tg bot token>"
chat_id = "<chat id>"

title = "❗<b>Server Status</b>"
online_tpl ="{{config.title}} \n😆 {{host.location}} {{host.alias}} 主机恢复上线啦"
offline_tpl = "{{config.title}} \n😱 {{host.location}} {{host.alias}} 主机已经掉线啦"
```

必须要自定义的的变量: workspace、admin_user 和 admin_pass、hosts,其他可以不管,不影响基本使用。

```toml
hosts = [
{name = "vfly2bwg", password = "123456", alias = "Bwg", location = "US", type = "KVM", labels = "os=debian;ndd=2024/1/15;spec=2C/2G/40G;"},
{name = "vfly2ht", password = "123456", alias = "HT", location = "TR", type = "VMware", labels = "os=debian;ndd=2024/3/28;spec=1C/1G/20G;"},
{name = "vfly2as", password = "123456", alias = "alongserver", location = "AS", type = "arm", labels = "os=arch;ndd=2029/11/25;spec=4C/2G/14G;", notify = false},
]
```

说明:

- name 主机唯一标识,不可重复。待会客户端那里要用。
- password 对应的密码,客户端那里用的
- alias 展示名
- location 国家缩写即可,如 cn us 等,所有国家见 https://github.com/zdz/ServerStatus-Rust/tree/master/web/static/flags/4x3
- type 机器类型
- 自定义标签 labels = "os=debian;ndd=2022/11/25;spec=2C/4G/60G;"
- os 可选,不填则使用上报数据(可用 centos debian ubuntu alpine pi arch windows linux)
- ndd(next due date) 下次续费时间
- spec 为主机规格
- notify = false 禁止该机器的告警,一般针对网络差,频繁上下线的机器
- monthstart = 1 没启用 vnstat 时,表示月流量从每月哪天开始统计
- disabled = true 单机禁用

怎么获取 bot token: (https://forum.naixi.net/goto.php?url=https%3A%2F%2Ftechnique.vfly2.com%2F2023%2F08%2Fregister-telegram-bot-and-build-a-bot-using-python%2F)

------

测试配置文件是否有效

```sh
./stat_server -c config.toml -t
```

根据配置发送测试消息,验证通知是否生效

```sh
./stat_server -c config.toml --notify-test
```

#### 服务端运行

```sh
./stat_server -c config.toml
```

这时,如果没有出错,访问 IP:8080 即可看到 Web 网页。

不过,很明显,现在如果断开 SSH 连接,服务端也就不运行了,使用 systemd 守护进程解决这个问题,具体内容请往下看。

若想查看地图,访问 IP:8080/map

!(https://ib.ahfei.blog/imagesbed/serverstatus-rust-map-23-11-30.webp)

查看帮助

```bash
./stat_server -h
```

更多内容:[服务端说明 - Rust 版 ServerStatus 云探针 (ssr.rs)](https://forum.naixi.net/goto.php?url=https%3A%2F%2Fdoc.ssr.rs%2Fserver%2F)

### ServerStatus 客户端

运行客户端

```sh
./stat_client -a "http://serverstatus.vfly2.com:8080/report" -u vfly2bwg -p 123456
# 也可以用 grpc 协议,选一种即可
./stat_client -a "grpc://serverstatus.vfly2.com:9394" -u vfly2bwg -p 123456
```

- -a:服务端的网址
- -u:这台机器的在服务端配置文件 hosts 里设置的用户名
- -p:~设置的密码

如果正常启动,在 Web 网页就能看到这台机器了。

依然是,如果断开 SSH 连接,客户端也就不运行了,使用 systemd 守护进程解决这个问题,具体内容请往下看。

------

查看帮助

```bash
./stat_client -h
```

更多选项可以查看文档: [客户端说明 - Rust 版 ServerStatus 云探针 (ssr.rs)](https://forum.naixi.net/goto.php?url=https%3A%2F%2Fdoc.ssr.rs%2Fclient%2F)

### Systemd 守护进程

#### 客户端

```bash
sudo vim /etc/systemd/system/stat_client.service
```

注意修改 User、Group、WorkingDirectory、ExecStart

```ini
cat > /etc/systemd/system/stat_client.service <<EOF
# /etc/systemd/system/stat_client.service

Description=ServerStatus-Rust Client
After=network.target


User=vfly2
Group=vfly2
Environment="RUST_BACKTRACE=1"
WorkingDirectory=/home/vfly2/myserve/serverstatus
ExecStart=/home/vfly2/myserve/serverstatus/stat_client -a "http://serverstatus.vfly2.com:8080/report" -u vfly2bwg -p 123456
ExecReload=/bin/kill -HUP \$MAINPID
Restart=on-failure


WantedBy=multi-user.target
EOF
```

加载配置

```bash
sudo systemctl daemon-reload
```

开机自启,立即启动

```sh
sudo systemctl enable --now stat_client
sudo systemctl stop stat_client
sudo systemctl start stat_client
sudo systemctl restart stat_client
sudo systemctl status stat_client
```

查看日志

```sh
journalctl -u stat_client -f -n 100
```

#### 服务端

```bash
sudo vim /etc/systemd/system/stat_server.service
```

注意修改 User、Group、WorkingDirectory、ExecStart

```ini
cat > /etc/systemd/system/stat_server.service <<EOF
# /etc/systemd/system/stat_server.service

Description=ServerStatus-Rust Server
After=network.target


User=vfly2
Group=vfly2
Environment="RUST_BACKTRACE=1"
WorkingDirectory=/home/vfly2/myserve/serverstatus
ExecStart=/home/vfly2/myserve/serverstatus/stat_server -c /home/vfly2/myserve/serverstatus/config.toml
ExecReload=/bin/kill -HUP \$MAINPID
Restart=on-failure


WantedBy=multi-user.target

EOF
```

加载配置

```bash
sudo systemctl daemon-reload
```

开机自启,立即启动

```sh
sudo systemctl enable --now stat_server
sudo systemctl stop stat_server
sudo systemctl start stat_server
sudo systemctl restart stat_server
sudo systemctl status stat_server
```

### 一键安装脚本

***如果你是第一次使用,建议跳过此节,先了解安装步骤。***

这个脚本会安装客户端并用 systemd 守护进程,开机自启;另外,服务端可选安装。

- 对于被监控的机子,只需要运行一次这个脚本即成功安装客户端,无须其他操作。
- 对于服务端机子,还需要编辑服务端配置文件并重启。

脚本仓库: (https://forum.naixi.net/goto.php?url=https%3A%2F%2Fgithub.com%2FAhFeil%2Fbash-script%2Fblob%2Fmain%2Finstall-rust_serverstatus.sh)

**下载脚本**

```bash
curl -LO https://raw.githubusercontent.com/AhFeil/bash-script/main/install-rust_serverstatus.sh
```

**执行脚本**--(既安装客户端、又安装服务端)使用示例

```sh
sudo bash install-rust_serverstatus.sh "http://serverstatus.vfly2.com:8080/report" "/home/vfly2/myserve/serverstatus" vfly2 "vfly2rn" "123456" yes
```

参数:(根据实际情况自行修改)

1. 服务端地址: "http://serverstatus.vfly2.com:8080/report"
2. 安装目录:"/home/vfly2/myserve/serverstatus"
3. 运行软件的用户,如 root 或 1000
4. ssr_uid:"vfly2rn" , rust_serverstatus 配置文件里的用户名
5. ssr 密码: "123456" ,rust_serverstatus 配置文件里用户名对应的密码
6. 是否安装服务端,填任意字符即安装服务端

> 若之前执行过脚本,再次运行就会覆盖原来的,也就是实现了更新。
> 不过需要重启客户端或服务端 `systemctl restart stat_client`

若服务端部署完毕,打开 http://<你的IP>:8080/ ,访问地图打开 http://<你的IP>:8080/map 。

------

脚本显然对客户端安装的加速最明显,只要部署好了服务端,在机器安装客户端时,要需要修改往往只有 ssr_uid:

```sh
sudo bash install-rust_serverstatus.sh "http://serverstatus.vfly2.com:8080/report" "/home/vfly2/myserve/serverstatus" vfly2 "vfly2bwg" "123456"
```

------

> 原文链接: (https://forum.naixi.net/goto.php?url=https%3A%2F%2Ftechnique.vfly2.com%2F2023%2F06%2Finstallation-tutorial-of-serverstatus-rust%2F)

> 版权声明:本博客所有文章除特別声明外,均为 AhFei 原创,采用 (https://forum.naixi.net/goto.php?url=https%3A%2F%2Fcreativecommons.org%2Flicenses%2Fby-nc-sa%2F4.0%2Fdeed.zh) 许可协议。转载请注明来源 [技焉洲 (technique.vfly2.com)](https://forum.naixi.net/goto.php?url=https%3A%2F%2Ftechnique.vfly2.com%2F) 。

yazzi 发表于 2025-1-13 14:53:06

这个牛,等把wireguard搞懂之后,再来学习一下rust

wxjerry 发表于 2025-1-13 14:55:04

666感谢分享

fsaeafsd 发表于 2025-1-13 19:15:23

666牛逼的教程
页: [1]
查看完整版本: Rust 版 ServerStatus 探针安装步骤