昨天下午浏览博客,突然发现博客无法访问,服务器上部署的的其他网站也全挂了。顿时大感不妙,赶忙打开远程链接工具看看到底怎么回事。然后发现,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 脚本
|