记一次更换系统博客迁移经历

文章发布时间:

最后更新时间:

文章总字数:
1.3k

预计阅读时间:
5 分钟

记一次更换系统博客迁移经历

参考文章(主要流程,实际上因为配置环境等各种各样的问题也查了不少文章):https://zhuanlan.zhihu.com/p/205758058

挺简单的事还是搞了一个下午,记录一下遇到的问题和解决,下次换云服务器或者重装系统可以快一点完成博客的迁移。

首先在阿里云控制台点击更换系统,直接完成重装,这里我重装完是 ubuntu 22.04 。重装完系统不用换源,阿里帮你换好了。先加一个 sudo 特权用户,再进行软件的升级。

1
2
3
4
sudo adduser newuser
sudo usermod -aG sudo newuser
sudo apt update
sudo apt upgrade

然后开始搭建服务器的环境,安装 git 和创建 git 用户并给权限(git 用户千万不要设置弱密码!!!!,后面用 rsa 密钥登录,不会让你输密码的)

1
2
3
4
5
sudo apt install git
sudo git --version
sudo adduser git
sudo usermod -aG sudo git
sudo passwd git

创建 git 仓库并配置 git-hooks ,并在本地将 hexo 渲染的页面推过去

1
2
3
4
5
6
7
8
9
10
11
12
root@VM-0-11-ubuntu:/home# su git
git@VM-0-11-ubuntu:/home$ cd ~
git@VM-0-11-ubuntu:/home$ git init --bare blog.git
git@VM-0-11-ubuntu:/home$ mkdir ~/hexo
git@VM-0-11-ubuntu:~$ vim ~/blog.git/hooks/post-receive
git@VM-0-11-ubuntu:~/blog.git/hooks$ cat post-receive

#!/bin/sh
git --work-tree=/home/git/hexo --git-dir=/home/git/blog.git checkout -f
# /home/git/hexo 网站根目录
# /home/git/blog.git 服务器的git裸仓路径
git@VM-0-11-ubuntu:~/blog.git/hooks$ chmod +x post-receive

这里要注意一点,这个网站根目录一定要自己先创建好,这个 post-receive 不会自动帮你创建,没有这个根目录远程拉了和没拉一样。

然后配置 rsa 密钥对免密码登录:由于服务器 ip 没变,重装了系统,以前记录的 hosts 失效了,导致 ssh 登录报错,按照提示的路径将原来记录的 ip 公钥删掉即可。本地计算机 ssh-keygen -t rsa 生成公钥和私钥 ,pub 后缀的是公钥,放到服务器上:

1
2
3
4
git@VM-0-11-ubuntu:~$ mkdir ~/.ssh
git@VM-0-11-ubuntu:~$ vim ~/.ssh/authorized_keys
git@VM-0-11-ubuntu:~$ chmod 600 ~/.ssh/authorized_keys
git@VM-0-11-ubuntu:~$ chmod 700 ~/.ssh

然后需要对 ssh 的默认设置进行更改:

1
2
3
4
5
6
7
vim /etc/ssh/sshd_config

// 找到 PubkeyAuthentication

PubkeyAuthentication yes

service sshd restart

就可以直接ssh -v git@serverip免密码登录,如果还是不行,可以通过ssh -vvv git@serverip输出详细信息,然后根据具体报错的信息来进行操作。

本地计算机上(就是运行 hexo 命令的计算机),首先修改一下hexo/_config.ymldeploy标签下repo的路径,这决定了远程位置:

1
2
3
4
5
deploy:
type: git
repo: git@serverip:/home/git/blog.git
branch: master
message: message

使用 hexo clean && hexo g && hexo d ,拉完之后到服务器的网站根目录下,如果能看到网站的各种文件就是拉取成功了。

然后需要配置服务器上的 nginx ,上面这篇参考文章里面是直接命令行安装 nginx 的,安装了一遍之后我发现依然不能正常解析,80 端口只有 nginx 的默认页面,于是打算使用宝塔面板来安装,需要先将原先安装的 nginx 彻底删除:

1
2
3
sudo rm -rf $(sudo find / -name nginx)
nginx -v
Command 'nginx' not found, but can be installed with

用 apt purge 删,你会发现删完之后 nginx 依然在,而且 80 还是他的默认页面。

安装一个宝塔面板,并且修改默认的帐号密码,在宝塔面板里面安装 nginx ,安装完之后添加站点,根目录设置为刚刚拉取的网站的根目录,/home/git/hexo ,设置域名,并且找到当年在阿里云申请的免费 ssl 证书配置上:

1
wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh

image-20231204211900333

image-20231204212007147

这里已经是运行中了,就可以去访问一下域名,如果正常,就结束了,然后我这里显示 403 forbiden ,查看一下 nginx 日志(这里有个挺坑的地方,宝塔给你装的 nginx ,路径并不在默认的 nginx 路径,也就是说你在网上找到的几乎所有解决这类问题的文章,按着文章里的路径,你什么文件都找不到,只能用前面的办法,自己 find)

image-20231204212446186

看日志可以发现,nginx 没有权限访问网站的根目录,这也是宝塔一个坑的地方,自动帮你装的 nginx ,启动的时候会以 www 用户来启动,而网站根目录是 git 的,当然没有权限访问。两个办法,网站根目录权限改成 777(试过了没用),修改 nginx 启动用户,修改成 git(别听网上的直接改成 root ,以 root 运行网站,渗透老哥连提权都不用了),修改启动用户需要找到配置文件,同样,需要 find 。

image-20231204212817809

把第一行的用户从 www 改成 git 之后,在宝塔的页面重载 nginx ,再访问博客网址即可正常解析。
不知道为什么,ssh 断掉了之后 nginx 会自动暂停(过了一会突然访问不上网站),于是加一个停止之后马上自行开始:

1
2
3
4
5
6
7
8
9
vim /lib/systemd/system/nginx.service



[Service]
Restart=always
RestartSec=1
Type=forking
PIDFile=/run/nginx.pid