#分享 , #VPS , #Nginx , #docker , #Ghost
三年之期还没到,腾讯就开始给我上嘴脸了,每天的续费通知就像催命符似的发个没完,起初是准备换平台的,因为大厂的老用户都没办法买特价机器。
后来无意间发现腾讯云一个身份证可以认证最多5个账号,新认证的账号是可以作为新用户买特价机器的,且这些账号可以销户重来,理论上可以实现无限循环,就是可能每次都需要搬家。
所以我直接开了新身份重新入手了一太2c2g4m50g的轻量云机器,今天恰好有时间,索性就把家搬了。
其实搬家这个事已经盘算了好些日子了,新机器是23年10月27号便下手购置的,明日复明日拖到今天才算开始落地,有时候对自己这拖沓性格恨铁不成钢无可奈何。
不过,也是因为这VPS搬家的麻烦程度和现实世界搬家也并无太大区别了,这三年倒腾添置的零零碎碎一大堆,好在之前就担心过这个问题,所以后来几乎都是用docker起的服务,数据文件和衣柜里的衣服一样基本上都大致堆在了一起,这些核心的东西倒是不会出太大的错(好像还是太乐观了)。不过最担心的就是那种几年前弄的小东西,当时临时弄了一下,然后放在某个很理所当然的小角落,今天搬家就给遗忘了,不过已经做好搬过去后大小问题不断的心理准备了。
好了,闲话不多说,正式开始。
其实最好的搬家办法是用腾讯云的系统镜像服务直接整个服务器做个镜像共享给新服务器作为安装镜像使用,然后将域名对应的A记录做一下修改即可无损搬家。
不过这个上面有个腾讯挖的坑:新VPS的系统盘要大于等于之前服务器的系统盘
,我当时还不知道是咋回事,明明系统镜像制作、共享都成功了,为啥新机器那边不显示,后来还是问客服才知道的,总结如下:
还是你马爸爸会玩。
简单的方法行不通就只能手动搬家了,为了避免问题,这次搬家也琢磨了半个月,最后确定的方案是依据在使用的服务的主次来分优先级,大致思路如下:
1900.live
的主要服务「博客」,如果迁移失败基本上算是和互联网断联了。*.1900.live
的其他服务,如 Umami统计服务
、lx-sync洛雪歌单同步服务
、 memos笔记服务
等等,这些服务即便没有正常迁移也不会对访问有很大的影响。目前我只对SSH登录方面做了相关的优化。
/etc/ssh/sshd_config
)Port
行,将端口号更改为您想要的高端口号(建议选择大于1024的端口号)adduser newuser
usermod -aG sudo newuser
/etc/ssh/sshd_config
)PermitRootLogin
修改为 no
禁用Root登录PasswordAuthentication
修改为 no
禁用密码登录systemctl restart sshd
之前的MySQL是本地安装的,这次想用Docker起,然后老机器那边把数据dump出来,新服务器这边导入即可,docker-compose文件如下:
version: '3'
services:
mysql:
container_name: mysql
image: mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: 123456
ports:
- 3306:3306
volumes:
- /data/mysql-data/data:/var/lib/mysql
- /data/mysql-data/config:/etc/mysql/conf.d
network_mode: "host"
拉好容器后将老机器dump下来的Ghost博客数据文件 backup.sql
复制进入容器,然后进入容器登录mysql执行导入操作。
# 将数据文件复制到容器内部根目录
sudo docker cp backup.sql mysql:/backup.sql
# 进入容器内
sudo docker exec -it mysql bash
# 用root登录mysql,并将数据文件导入
mysql -u root -p < /backup.sql
因为dump下来的数据没有用户信息,所以需要自己根据Ghost那边的数据库账号信息创建:
#第一行:创建用户
#第二行:设置访问权限和登录host,%符号是任意都可以登录,可以根据需要换成127.0.0.1
#第三行:刷新权限
CREATE USER 'ghost-user'@'%' IDENTIFIED BY 'yourpassword';
GRANT ALL PRIVILEGES ON ghost_db.* TO 'ghost-user'@'%';
FLUSH PRIVILEGES;
之前Ghost博客就是用的Docker起的,所以起容器没啥大问题。
先将老服务器上的Ghost容器内的数据文件全部下载下来,并传到新服务器上,并复制以前的docker-compose配置文件过来,然后up即可,配置文件如下:
version: '3.1'
services:
ghost:
container_name: ghost
image: ghost:latest
restart: always
ports:
- "2306:2306"
environment:
server__host: "127.0.0.1"
server__port: 2306
portal__url: "https://npm.webcache.cn/@tryghost/portal@~{version}/umd/portal.min.js"
sodoSearch__url: "https://npm.webcache.cn/@tryghost/sodo-search@~{version}/umd/sodo-search.min.js"
sodoSearch__styles: "https://npm.webcache.cn/@tryghost/sodo-search@~{version}/umd/main.css"
comments__url: "https://npm.webcache.cn/@tryghost/comments-ui@~{version}/umd/comments-ui.min.js"
comments__styles: "https://npm.webcache.cn/@tryghost/comments-ui@~{version}/umd/main.css"
logging__level: "error"
# 配置事务邮件
mail__transport: SMTP
mail__options__service: Mailgun
mail__options__auth__user: "noreply@1900.live"
mail__options__auth__pass: "testb0e79eb0b21b5e5757160c9-af778b4b-f76ed900"
# see https://ghost.org/docs/config/#configuration-options
# 配置数据库
database__client: mysql
database__connection__host: "127.0.0.1"
database__connection__port: 3306
database__connection__user: "ghost-uset"
database__connection__password: "yourpassword"
database__connection__database: "ghost_db"
# 配置又拍云图床插件
storage__active: "ghost-upyun-store"
storage__ghost-upyun-store__bucket: "blog"
storage__ghost-upyun-store__operator: "ghost"
storage__ghost-upyun-store__password: "XHVtAfAzp"
storage__ghost-upyun-store__domain: "https://test.1900.live"
storage__ghost-upyun-store__prefix: "assets/"
storage__ghost-upyun-store__folder: "YYYY/MM/D"
storage__ghost-upyun-store__suffix: ""
# this url value is just an example, and is likely wrong for your environment!
url: https://1900.live
# contrary to the default mentioned in the linked documentation, this image defaults to NODE_ENV=production (so development mode needs to be explicitly specified if desired)
#NODE_ENV: development
volumes:
- /home/user/ghost-data:/var/lib/ghost/content
network_mode: "host"
在这个地方卡了我很久。
和MySQL一样,我Nginx之前也是安装在本地,所以在新家这边我也打算直接用Docker来运行,但是在实际操作过程中遇到了很多问题,同样无法解决,也在V2ex上发了求助帖:我又来了,还是 docker 的问题: docker 起的 nginx,老是提配置文件打不开。 多数大佬都建议这种基础服务不要用docker,避免出现一些路径、端口等莫名其妙的问题。
所以最后还是使用了本地安装,不过在实际安装后发现好像并没有那么复杂:
sudo apt update
sudo apt install nginx
sudo systemctl start nginx
sudo systemctl enable nginx
完成后将老服务器上的 snippets
文件夹内的文件,sites-available
文件夹下的站点配置文件复制到新服务器即可。
另外,此时可能无法直接使用 nginx -s reload
等命令管理nginx服务,可进行以下操作:
whereis nginx
找到nginx的安装位置,我这边是在 /usr/sbin/nginx
下vim.bashrc
export PATH=$PATH:/usr/sbin
source ~/.bashrc
详细教程可以看我之前的教程:全站 HTTPS 【完】:acme.sh 泛域名证书生成和配置 ,现在都还是很好使。
然后将域名的DNS记录修改为新服务器IP即可。
至此博客已顺利的完成了迁移,其他子域名服务多是Docker版本的,只需要将对应的数据文件拷贝过去,通过docker-compose文件重新拉起即可,还是十分方便的。
虽然看起来文章很短,但是实际整个博客迁移过程花了我两天。
如果不是因为我平时在日常使用的过程中已经有意识的对系统产生的数据做了大致归拢汇总,不至于在真的要要搬家的时候茫然无措、丢三落四,否则整个迁移过程恐怕会更加难缠。
加入评论