ServerStatus-Rust 服务器探针搭建使用全指南/保姆级教程

本文介绍如何从头开始使用ServerStatus-Rust,基于Rust的ServerStatus,通过服务器探针检测服务器状态。
你可以来这里看看我的探针

搭建服务端

配置文件相关

Telegram 相关配置获得:

通过@BotFather获得bot_token,红框内打码内容就是你的token。

获得bot boken

通过@userinfobot获得chat_id,红框内打码内容就是你的chat id。

获得chat id

部署到Railway

我这边一开始是直接使用Railway部署的,但Railway免费一个月只有500小时额度,需要注意额度限制。

具体部署可以参考Railway · zdz/ServerStatus-Rust Wiki (github.com)

本地修改配置文件参考config.toml

后来考虑到Railway限额,我还是单独部署一下服务端吧。

部署到服务器

如果不是root用户记得sudo -i获得root权限

新建目录并且进入

mkdir -p /opt/ServerStatus && cd /opt/ServerStatus

编辑.sh文件

nano server.sh

如果是部署到ARM架构,记得按照注释修改OS_ARCH变量,文件内容如下:

#!/bin/bash
set -ex

WORKSPACE=/opt/ServerStatus
mkdir -p ${WORKSPACE}
cd ${WORKSPACE}

# 下载, arm 机器替换 x86_64 为 aarch64
OS_ARCH="x86_64"
latest_version=$(curl -m 10 -sL "https://api.github.com/repos/zdz/ServerStatus-Rust/releases/latest" | grep "tag_name" | head -n 1 | awk -F ":" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g')

wget --no-check-certificate -qO "server-${OS_ARCH}-unknown-linux-musl.zip"  "https://github.com/zdz/ServerStatus-Rust/releases/download/${latest_version}/server-${OS_ARCH}-unknown-linux-musl.zip"

unzip -o "server-${OS_ARCH}-unknown-linux-musl.zip"

# systemd service
mv -v stat_server.service /etc/systemd/system/stat_server.service

systemctl daemon-reload

# 启动
systemctl start stat_server

# 状态查看
systemctl status stat_server

# 使用以下命令开机自启
systemctl enable stat_server

# https://fedoraproject.org/wiki/Systemd/zh-cn
# https://docs.fedoraproject.org/en-US/quick-docs/understanding-and-administering-systemd/index.html

运行.sh文件:

bash -ex server.sh

修改config.toml配置文件,本地修改配置文件参考config.toml

nano /opt/ServerStatus/config.toml

测试配置文件

# 测试配置文件是否有效
./stat_server -c config.toml -t
# 根据配置发送测试消息,验证通知是否生效
./stat_server -c config.toml --notify-test

测试配置文件

重启服务端服务

systemctl restart stat_server

现在可以进入服务器ip:8080测试面板是否可以访问了

测试面板访问情况

通过lnmp配置反向代理(服务器)

本条与下一条二选一
接下来配置反向代理与域名,首先去自己的DNS解析服务提供商添加DNS配置信息(A记录,指向服务器ip或者反代服务器ip)。

这里使用[lnmp]()管理站点,手动配置反代。其他的同功能应用一样使用,例如Nginx Proxy Manager等。

然后通过lnmp创建vhost:

lnmp vhost add

vhost add

创建后修改站点nginx配置文件,配置文件路径/usr/local/nginx/conf/vhost,反代配置文件参考:

server
    {
        listen 80;
        #listen [::]:80;
        server_name probe.iocky.com ;

        #index index.html index.htm index.php default.html default.htm default.php;
        #root  /home/wwwroot/probe.iocky.com;

        #include rewrite/none.conf;
        #error_page   404   /404.html;

        # Deny access to PHP files in specific directory
        #location ~ /(wp-content|uploads|wp-includes|images)/.*\.php$ { deny all; }
                #反向代理
        location / {
            proxy_pass http://IP地址:端口; #代理本地项目的地址加端口,本探针服务端默认端口8080
            add_header X-Cache-Status $upstream_cache_status;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;

        }
        rewrite ^(.*)$ https://$host$1 permanent;
                #其他内容可以删除
        access_log  /home/wwwlogs/probe.iocky.com.log;
    }

server
    {
        listen 443 ssl http2;
        #listen [::]:443 ssl http2;
        server_name probe.iocky.com ;
              #同上
        #index index.html index.htm index.php default.html default.htm default.php;
        #root  /home/wwwroot/probe.iocky.com;
                
              #所有ssl内容保持不变
        ssl_certificate /x x x/fullchain.cer;
        ssl_certificate_key /x x x/probe.iocky.com.key;
        ssl_session_timeout x x x;
        ssl_protocols x x x;
        ssl_prefer_server_ciphers x x x;
        ssl_ciphers x x x
        ssl_session_cache x x x;
        # x x x
        ssl_dhparam /x x x/dhparam.pem;
              
        include rewrite/none.conf;
        #error_page   404   /404.html;

        # Deny access to PHP files in specific directory
        #location ~ /(wp-content|uploads|wp-includes|images)/.*\.php$ { deny all; }

        #include enable-php.conf;
                #反向代理
        location / {
            proxy_pass http://IP地址:端口; #代理本地项目的地址加端口,本探针服务端默认端口8080
            add_header X-Cache-Status $upstream_cache_status;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "Upgrade";
            proxy_read_timeout 3600s;
            root html;
            index index.html index.htm;
        }
  
        access_log  /x x x/probe.iocky.com.log;
    }

修改后重载nginx配置文件:

lnmp nginx reload

CleanShot 2023-04-07 at 20.32.16@2x

测试访问:

test_server

通过宝塔配置反向代理(服务器)

本条与上一条二选一
首先在宝塔内打开nginx管理,确认配置文件路径:

2023-05-17T07:48:53.png

然后在文件中打开对应路径:
2023-05-17T07:50:23.png

之后新建文件:子域名.主域名.com.conf类似格式,可以修改子域名主域名com,按需求修改文件名,文件内容参考:
文件需要修改子域名主域名、#ssl证书的配置文件的两个路径以及IP地址:端口

server {
    listen 80;
    server_name 子域名.主域名.com;
    location / {
        proxy_pass http://IP地址:端口; #代理本地项目的地址加端口
           add_header X-Cache-Status $upstream_cache_status;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

    }
    rewrite ^(.*)$ https://$host$1 permanent;
}

server {
    #test
    listen 443 ssl;
    server_name 子域名.主域名.com;
    ssl_certificate     /www/server/panel/vhost/ssl/Cloudflare/fullchain.pem; #ssl证书的配置文件
    ssl_certificate_key /www/server/panel/vhost/ssl/Cloudflare/privkey.pem; #ssl证书的配置文件
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;
    location / {
        proxy_pass http://IP地址:端口; #代理本地项目的地址加端口
            add_header X-Cache-Status $upstream_cache_status;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_read_timeout 3600s;
        root html;
        index index.html index.htm;
    }
        ## 重点强调一下,一定要存在次路径啊!!!!
      access_log  /www/wwwlogs/子域名.主域名.com.log;
}

主题配置

通过前后端分离实现主题配置,前端通过Vercel部署,参考Railway部署有办法塞主题吗 · zdz/ServerStatus-Rust · Discussion #37 (github.com),具体配置如下:

首先forkHinataKato/hotaru_theme_for_RustVersion: The frontend of ServerStatus-Hotaru based on Vue 3.0 (github.com)到自己账户下:

fork

然后使用Vercel部署fork过来的库:

CleanShot 2023-04-07 at 20.45.16@2x

import

直接部署即可,不需要修改任何东西,然后在部署的时候,将fork的库clone到本地,并且进行修改(或者直接在Github进行修改):

clone

在仓库根目录创建vercel.json,文件内容如下,将http://tz.xxx.com/改为自己的域名或IP地址:端口,如果支持HTTPS,记得将http://全部改为https://

{
    "routes": [
        {
            "src": "/json/stats.json",
            "dest": "http://tz.xxx.com/json/stats.json"
        },
        {
            "src": "/detail",
            "dest": "http://tz.xxx.com/detail"
        },
        {
            "src": "/map",
            "dest": "http://tz.xxx.com/map"
        },
        {
            "src": "/i",
            "dest": "http://tz.xxx.com/i"
        },
        {
            "src": "/report",
            "dest": "http://tz.xxx.com/report"
        }
    ]
}

然后commit并且推送到远程分支:

git add -A
git commit -m "add vercel.json"
git push origin main 

现在就应该可以看到成功链接上后端了,如图:

success_vercel

这个时候你可能会发现VPS的国旗图标没了,这是因为文件名不匹配导致的,你可以直接将src/assets/img/client路径下你需要使用的国旗文件改为小写,也可以直接上传重命名后的文件到这个目录,如图:

upload flag

现在应该就有国旗啦:

CleanShot 2023-04-07 at 21.04.05@2x

接下来在Vercel的项目Settings里配置个人域名按照要求添加DNS记录,如图:

CleanShot 2023-04-07 at 20.56.17@2x

服务器部分就配置完成啦!

搭建客户端

如果不是root用户记得sudo -i获得root权限

还是一样,从根目录新建目录并且进入(如果没有退出目录可以跳过这一步)

cd
mkdir -p /opt/ServerStatus && cd /opt/ServerStatus

编辑.sh文件

nano client.sh

如果是部署到ARM架构,记得按照注释修改OS_ARCH变量,文件内容如下:

#!/bin/bash
set -ex

WORKSPACE=/opt/ServerStatus
mkdir -p ${WORKSPACE}
cd ${WORKSPACE}

# 下载, arm 机器替换 x86_64 为 aarch64
OS_ARCH="x86_64"
latest_version=$(curl -m 10 -sL "https://api.github.com/repos/zdz/ServerStatus-Rust/releases/latest" | grep "tag_name" | head -n 1 | awk -F ":" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g')

wget --no-check-certificate -qO "client-${OS_ARCH}-unknown-linux-musl.zip"  "https://github.com/zdz/ServerStatus-Rust/releases/download/${latest_version}/client-${OS_ARCH}-unknown-linux-musl.zip"

unzip -o "client-${OS_ARCH}-unknown-linux-musl.zip"

# systemd service
mv -v stat_client.service /etc/systemd/system/stat_client.service

systemctl daemon-reload

# 启动
systemctl start stat_client

# 状态查看
systemctl status stat_client

# 使用以下命令开机自启
systemctl enable stat_client

# 停止
# systemctl stop stat_client

# https://fedoraproject.org/wiki/Systemd/zh-cn
# https://docs.fedoraproject.org/en-US/quick-docs/understanding-and-administering-systemd/index.html

# 修改 /etc/systemd/system/stat_client.service 文件,将IP改为你服务器的IP或你的域名

运行.sh文件:

bash -ex client.sh

如果需要使用vnstat数据,参考zdz/ServerStatus-Rust: ✨ Rust 版 ServerStatus 探针、威力加强版 (github.com)安装vnstat并配置:

# 在client端安装 vnstat
## Centos
sudo yum install epel-release -y
sudo yum install -y vnstat
## Ubuntu/Debian
sudo apt install -y vnstat

# 修改 /etc/vnstat.conf
# 一般来说只要修改BandwidthDetection和MaxBandwidth就够了
# BandwidthDetection 0
# MaxBandwidth 0
# 默认不是 eth0 网口的需要置空 Interface 来自动选择网口
# 没报错一般不需要改
# Interface ""
systemctl restart vnstat

# 确保 version >= 2.6
vnstat --version
# 测试查看月流量 (刚安装可能需等一小段时间来采集数据)
vnstat -m
vnstat --json m

在修改配置文件前,可以先试试看自己的服务是否可以使用:

./stat_client -a https://probe.iocky.com/report -u 用户名 -p 密码

如果可以使用,就可以修改stat_client.service配置文件了:

nano /etc/systemd/system/stat_client.service

参考如下,只修改ExecStart=/opt/ServerStatus/stat_client这一行,如果是HTTP记得将https改成http,不使用vnstat的话,请删除-n,即只保留-a "https://probe.iocky.com/report" -u 用户名 -p 密码

[Unit]
Description=ServerStatus-Rust Client
After=network.target

[Service]
User=root
Group=root
Environment="RUST_BACKTRACE=1"
WorkingDirectory=/opt/ServerStatus
# EnvironmentFile=/opt/ServerStatus/.env
ExecStart=/opt/ServerStatus/stat_client -a "https://probe.iocky.com/report" -u 用户名 -p 密码 -n
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure

[Install]
WantedBy=multi-user.target

# /etc/systemd/system/stat_client.service
# journalctl -u stat_client -f -n 100

修改完成后先重载文件再重启客户端服务:

systemctl daemon-reload
systemctl restart stat_client

通过systemctl status stat_client查看服务状态,如下就没问题了

CleanShot 2023-04-07 at 21.13.27@2x

评论

  1. ldsj007
    12 月前
    2023-5-03 17:41:18

    教程能否再做个宝塔部署的方法
    我比较菜鸡是小白,因服务器已有宝塔,通过宝塔部署没找到教程,完全按教程部署又怕和宝塔的nginx冲突!
    求教程,谢谢!

    • 博主
      ldsj007
      11 月前
      2023-5-17 15:55:31

      已更新

    • 博主
      ldsj007
      11 月前
      2023-5-17 15:59:34

      最近都在忙毕设 CA啥的 才搞完更新 不好意思啦

      • ldsj007
        du
        11 月前
        2023-5-18 18:47:07

        客气啦!
        十分感谢,赞赞赞!

  2. ksp
    11 月前
    2023-5-29 22:39:12

    浏览器访问:服务器ip:8080,出现空白页面。
    查看stat_server.service的状态是active (running)。
    甲骨文Amd机器。
    您知道如何解决吗?

    • 博主
      ksp
      Macintosh Chrome 119.0.0.0
      5 月前
      2023-11-09 5:26:39

      没有开放端口?

  3. keney
    10 月前
    2023-6-25 0:33:46

    请问搭建好的服务端怎么与其他服务器部署好的客户端关联起来?
    注意:这服务端是在服务器上搭建好的

    • 博主
      keney
      Macintosh Chrome 119.0.0.0
      5 月前
      2023-11-09 5:27:47

      文章中有写

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇