本文介绍如何从头开始使用ServerStatus-Rust,基于Rust的ServerStatus,通过服务器探针检测服务器状态。
你可以来这里看看我的探针。
搭建服务端
配置文件相关
Telegram 相关配置获得:
通过@BotFather获得bot_token
,红框内打码内容就是你的token。
通过@userinfobot获得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
创建后修改站点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
测试访问:
通过宝塔配置反向代理(服务器)
本条与上一条二选一
首先在宝塔内打开nginx管理,确认配置文件路径:
然后在文件中打开对应路径:
之后新建文件:
子域名.主域名.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)到自己账户下:
然后使用Vercel部署fork过来的库:
直接部署即可,不需要修改任何东西,然后在部署的时候,将fork的库clone到本地,并且进行修改(或者直接在Github进行修改):
在仓库根目录创建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
现在就应该可以看到成功链接上后端了,如图:
这个时候你可能会发现VPS的国旗图标没了,这是因为文件名不匹配导致的,你可以直接将src/assets/img/client
路径下你需要使用的国旗文件改为小写,也可以直接上传重命名后的文件到这个目录,如图:
现在应该就有国旗啦:
接下来在Vercel的项目Settings里配置个人域名按照要求添加DNS记录,如图:
服务器部分就配置完成啦!
搭建客户端
如果不是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
查看服务状态,如下就没问题了
教程能否再做个宝塔部署的方法
我比较菜鸡是小白,因服务器已有宝塔,通过宝塔部署没找到教程,完全按教程部署又怕和宝塔的nginx冲突!
求教程,谢谢!
已更新
最近都在忙毕设 CA啥的 才搞完更新 不好意思啦
客气啦!
十分感谢,赞赞赞!
浏览器访问:服务器ip:8080,出现空白页面。
查看stat_server.service的状态是active (running)。
甲骨文Amd机器。
您知道如何解决吗?
没有开放端口?
请问搭建好的服务端怎么与其他服务器部署好的客户端关联起来?
注意:这服务端是在服务器上搭建好的
文章中有写