Nezha 探针的版本已经迭代到 v1,但我个人还是更喜欢 v0,打算继续使用 v0 “养老”。目前 tz 部署在一台 VPS 上,不过这台 VPS 再过 40 多天就到期了,之后就不打算续费了。我打算将其迁移到另一台 VPS上,同时记录下整个迁移过程,以便未来再次迁移时更加方便。
因为是通过docker部署面板,所以迁移过程也相当便利。主要步骤如下:
- 服务器A镜像备份导出,数据文件备份导出
- 服务器A传输镜像、数据文件、执行脚本到服务器B
- 服务器B导入镜像,解压数据文件到对应目录,运行启动脚本
- 服务器B配置反向搭理,是域名能够正确访问到服务器
前置操作
为了便利后续使用scp
命令传输文件,先在服务器A中创建ssh密钥对
#创建ssh-key
ssh-keygen -t rsa -b 4096 -C "dandyapi@outlook.com"
ssh连接到服务器B,将服务器A中.ssh/id_rsa.pub
的内容添加到目标机器的.ssh/authorized_keys
中
确认服务器A和服务器B的系统版本都一致,都是debian12
,面板的docker容器id为id为3d39d0a3ec2a
服务器A上操作
导出nezha的docker镜像
docker commit c9cfba311710 nezha-dashboard:local
docker save -o nezha_dashboard.tar nezha-dashboard:local
备份/opt/nezha/目录下的dashboard
cd /opt/nezha/ && tar czf /root/dashboard_data_backup.tar.gz dashboard
传输镜像文件、数据备份、运行脚本到服务器B (ip地址换成自己的新VPS)
# 默认22端口
scp nezha_dashboard.tar dashboard_data_backup.tar.gz nezha.sh root@ip:/root
# 非默认端口,假设为2222
scp -P 2222 nezha_dashboard.tar dashboard_data_backup.tar.gz nezha.sh root@ip:/root
服务器B上操作
安装docker
apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/nul
apt update
apt install docker-ce docker-ce-cli containerd.io
安装openResty
apt update
apt install -y curl gnupg2 ca-certificates lsb-release
curl -fsSL https://openresty.org/package/pubkey.gpg | gpg --dearmor -o /usr/share/keyrings/openresty.gpg
echo "deb [signed-by=/usr/share/keyrings/openresty.gpg] https://openresty.org/package/debian $(lsb_release -sc) openresty" | tee /etc/apt/sources.list.d/openresty.list
apt update
apt install -y openresty
解压数据文件
mkdir -p /opt/nezha
tar xzf dashboard_data_backup.tar.gz -C /opt/nezha
docker导入镜像文件
docker load -i nezha_dashboard.tar
docker images #查看镜像是否正确导入,显示如下
REPOSITORY TAG IMAGE ID CREATED SIZE
nezha-dashboard local dcf0fbd1c1b4 4 hours ago 77.7MB
运行启动脚本
./nezha.sh
选择1-docker运行
选择3-启动面板
配置反向代理
上传ssl证书
mkdir ssl-key #创建文件夹
上传fullchain.pem和privkey.pem到这个目录/root/ssl-key
创建openResty配置文件
mkdir -p /etc/openresty/conf.d
vim /etc/openresty/conf.d/tz_dandyapi_com.conf
文件内容如下:
server {
listen 80;
server_name tz.dandyapi.com;
# 自动重定向 HTTP 到 HTTPS
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name tz.dandyapi.com;
ssl_certificate /root/ssl-key/fullchain.pem;
ssl_certificate_key /root/ssl-key/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location ^~ / {
proxy_pass http://127.0.0.1:8008;
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 REMOTE-HOST $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
add_header X-Cache $upstream_cache_status;
add_header Cache-Control no-cache;
proxy_ssl_server_name off;
proxy_ssl_name $proxy_host;
add_header Strict-Transport-Security "max-age=31536000";
}
}
载入配置文件并重启服务
vim /usr/local/openresty/nginx/conf/nginx.conf
#在http模块中加入下列内容
include /etc/openresty/conf.d/*.conf;
/usr/local/openresty/nginx/sbin/nginx -t #检查配置
systemctl restart openresty #重启服务
知识补充
刚开始使用了跟前面jellyfin
一样的配置文件,但是探针面板的页面无法正常显示状态,打开控制台一直提示wss报错,发现原先的配置可能无法满足wss的反代,后修改了配置,使其范围更广,路径匹配范围更大,保证了 WebSocket 请求不会因 location
规则错误而被阻止。
为啥探针会一直迁来迁去呢,当然是为了降本增效了,今年尽量缩减那些不需要的吃灰小鸡。