昨天下午浏览博客,突然发现博客无法访问,服务器上部署的的其他网站也全挂了。顿时大感不妙,赶忙打开远程链接工具看看到底怎么回事。然后发现,SSH 也连不上了,换成平时使用最流畅的电信线路还是不行。脑子里突然冒出一个想法:难不成商家跑路这事真被我遇上了?不过好在所有网站的数据我在本地都有备份,就算跑路数据也不会丢,就是重新部署有些麻烦。当然这只是最坏的结果。

后来打开服务器厂商官网,进入管理后台,一切都很顺利,后台显示服务器状态正常,这说明最坏的结果没有发生。我重启了服务器后再次尝试连接 SSH 还是连接不上,我又想是不是 IP 被墙了,我在本地 ping 了很多次都都 ping 不通,然后又换 ping.pe 试了几次,发现海外是没问题的,大陆的大部分地区丢包率都是接近 100%,这才反应过来可能是线路炸了,开启代理后 SSH 也能连上了。大概过了几个小时后,线路也都逐渐恢复了,虚惊一场~

现在为了能够更方便地查看服务器和网站状态,我想还是部署一个探针比较好,最后选择了相对轻量化的 ServerStatus,简单记录一下(Docker)部署过程。

部署服务端

ServerStatus 分为服务端和客户端,也就是监控中心和被监控的服务器(可以部署在同一台机器上),首先部署服务端。

下载配置文件

1
sudo mkdir -p /srv/docker_data/server_status/server_status_monthtraffic && sudo wget --no-check-certificate -qO /srv/docker_data/server_status/server_status_config.json https://raw.githubusercontent.com/cppla/ServerStatus/master/server/config.json

自定义 json 文件

根据自己的需要进行修改,我删除了官方提供的 json 文件内自己不需要的内容

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
// 编辑完成后建议删除注释,包括这一行,以免产生错误
{
    "servers": [
        {
            "disabled": false, // 是否隐藏服务器
            "username": "s01", // 客户端连接时所需的用户名
            "name": "node1", // 页面显示的节点名称
            "type": "kvm", // 服务器虚拟化类型
            "host": "host1",
            "location": "🇺🇸", // 服务器位置
            "password": "USER_DEFAULT_PASSWORD", // 客户端连接时所需的密码
            "monthstart": 1 //流量刷新日期
        },
        {
            "disabled": true,
            "username": "s02",
            "name": "node2",
            "type": "vmware",
            "host": "host2",
            "location": "🇯🇵",
            "password": "USER_DEFAULT_PASSWORD",
            "monthstart": 1
            }
    ],

    "monitors": [
        {
            "name": "Google", // 要监控的站点名称
            "host": "https://www.google.com/", // 站点地址
            "interval": 600, // 请求间隔
            "type": "https" // 协议类型
        },
        {
            "name": "example",
            "host": "1.1.1.1",
            "interval": 600,
            "type": "tcp"
        }
    ]
}

部署 Docker 容器

1
2
3
cd /srv/docker_data/serverstatus/

touch docker-compose.yaml

在 docker-compose.yaml 文件内输入以下内容:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
version: '3.9'
services:
    serverstatus:
        image: 'cppla/serverstatus:latest'
        ports:
            - '35601:35601'
            - '7380:80'
        volumes:
            - '/srv/docker_data/server_status/server_status_monthtraffic:/usr/share/nginx/html/json'
            - '/srv/docker_data/server_status/server_status_config.json:/ServerStatus/server/config.json'
        container_name: serverstatus
        restart: always

部署容器

1
sudo docker compose up -d

至此服务端就部署完成了,浏览器输入服务器 IP:7380 就可以查看监控页面了,接下来部署客户端。

部署客户端

Python 脚本会下载到当前所在目录,所以下载前先 cd 到想要存放脚本的目录

下载前一定要修改下面的内容

1
2
3
4
5
# {$SERVER} 改为客户端服务器的 IP
# {$USER} 改为服务端 username 对应的名称
# {$PASSWORD} 改为服务端 password 对应的名称

get --no-check-certificate -qO client-linux.py 'https://raw.githubusercontent.com/cppla/ServerStatus/master/clients/client-linux.py' && nohup python3 client-linux.py SERVER={$SERVER} USER={$USER} PASSWORD={$PASSWORD} >/dev/null 2>&1 &

至此客户端也已部署完成,接下来可以绑定域名进行反向代理。

卸载 ServerStatus

最后说一下卸载方法

卸载客户端

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 删除容器
sudo docker ps # 查看容器 ID
sudo docker stop <容器 ID>
sudo docker rm <容器 ID>

# 删除镜像
sudo docker images # 查看容器 ID
sudo docker rmi <镜像 ID>

# 最后进入"/srv/docker_data/"目录删除"serverstatus"目录

卸载服务端

1
2
3
4
5
6
7
# 查看 python3 对应进程 PID
ps

# 结束 python3 对应的进程
kill -9 PID

# 最后删除下载的名为“client-linux.py”的 Python 脚本