自由尋覓快樂別人從沒法感受

0%

从Github迁移Hexo博客

从GitHub迁移Hexo博客

博客项目重启之后,鉴于GitHub的访问速度,我便想着将博客迁移到服务器上。经过一番研究之后,我成功地实现了博客的迁移,并且Github和阿里云服务器能同步更新博客。

1. 所需环境一览

  • 本地环境:

    • 由于之前在GitHub上搭建过博客,因此本地留有Hexo的根目录,我的Hexo根目录文件夹名称为blog
    • 系统:macOS Mojave
    • 环境:Git-v2.17,Node.js-v8.9.3,hexo,ssh
    • 任务:创建RSA公钥,本地生成静态网页文件,用Git同时推送到Github和阿里云服务器上
  • 阿里云服务器环境:

    • 系统:Centos7
    • 环境:Git-v1.8,Node.js-v6.17.2,Nginx(推荐更新为最新版,我使用该版本没什么问题)
    • 任务:创建Git仓库用于储存静态网页文件,使用Nginx作为网页服务器
  • Github环境:

    • 环境:保存本地环境中的RSA公钥
    • 任务:创建Git仓库用于储存静态网页文件,使用Github Pages设置网页主页

2. 云服务器的配置

各个环境所需的依赖请自行安装,在此就不贴出安装步骤了

2.1 创建新用户,配置Git

创建一个新用户用于网站的配置(推荐),也可以使用现有用户

1
2
3
4
useradd fisher	# 添加名为fisher的新用户
passwd fisher # 修改fisher的密码
chmod 740 /etc/sudoers # 将fisher添加到sudo名单中
vim /etc/sudoers

找到如下行,在下面添加一行

1
2
3
4
# Allow root to run any commands anywhere
root ALL=(ALL) ALL
# 添加以下行
fisher ALL=(ALL) ALL

保存并推出,将文件权限改回来

1
chmod 400 /etc/sudoers

2.2 添加RSA公钥

在本地电脑上打开终端,使用Git Bash创建密钥。如果要使用已有的密钥,这一步可以跳过

1
ssh-keygen -t rsa	# 一路回车即可

注意:该密钥不可以泄漏给其他人,一旦泄漏服务器很危险。这里生成的key仅用做演示,因此没有打码

切换至“fisher”用户,创建“.ssh”文件夹以及“authorized_keys”文件并将刚刚生成的“key.pub”中的内容复制粘贴到里面

1
2
3
su fisher
mkdir ~/.ssh
vim ~/.ssh/authorized_keys

修改“authorized_keys”的权限

1
2
3
cd ~
chmod 600 .ssh/authorized_keys
chmod 700 .ssh

2.3 测试到服务器的连接

使用ssh连接到服务器

1
ssh fisher@ADDRESS	# ADDRESS是你服务器的IP地址

如果不需要输入密码就能连上服务器,则说明你的RSA公钥配置成功

3. Github仓库的配置

由于之前我在搭建Github Pages的时候没有使用RSA公钥,我的部署全部是用用户名和密码的。因此本次迁移,我顺便把Github的博客仓库也配置上RSA公钥

3.1 添加RSA公钥

打开位于Github上面的博客仓库,点击“Settings”,点击“Deploy Keys”,点击“Add deploy key”

然后将“key.pub”中的内容粘贴进去,勾选选项,点击确认并输入密码

到此,Github上的RSA公钥就配置完成了

4. 云服务器的Nginx配置

4.1 创建网站根目录,配置Nginx

以fisher用户登录服务器,在用户根目录下创建网站根目录

1
mkdir /blog

在Nginx的配置文件中添加网站目录

1
sudo vim /etc/nginx/nginx.conf

如果使用HTTP协议,则在80端口中的server添加网站目录。如果使用HTTPS协议,则在443端口中添加网站目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name fiher.lazybone.xyz; # 修改为自己的域名
root /home/fisher/blog; # 修改为网站的根目录

# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;

location / {
}

error_page 404 /404.html;
location = /40x.html {
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}

重新载入Nginx,使配置生效

1
service nginx reload

4.2 建立Git仓库

创建一个Git裸库,只用于保存Repository信息

1
2
cd ~
git init --bare blogit.git

使用Git-Hooks同步网站根目录,这里使用的是Git中的“post-receive”,当有Git收发的时候会调用该脚本,自动将最新内容同步到网站根目录中

1
vim blogit.git/hooks/post-receive

将以下语句写入文件中

1
2
#!/bin/sh
git --work-tree=/home/fisher/blog --git-dir=/home/fisher/blogit.git checkout -f

保存并赋予执行权限

1
chmod +x /home/fisher/blogit.git/hooks/post-receive

5. 本地配置

5.1 配置”_config.yml”

打开位于Hexo博客根目录下的“_config.yml”文件,找到“deploy”并修改

1
2
3
4
5
6
7
deploy:
- type: git
repo: fisher@ADDRESS:/home/fisher/blogit.git # ADDRESS是服务器地址
branch: master # 分支
- type: git
repo: https://github.com/fisherwy/fisherwy.github.io.git # 换成自己Github上的仓库地址
branch: master

5.2 部署

至此,整个博客的迁移工作只剩下最后一步,就是重新部署一次了,以后按照以前的部署步骤来就可以了

1
2
3
hexo clean
hexo g
hexo d

6. 总结

迁移的教程最初来自此处:StaunchKai的博客。非常感谢StaunchKai提供的教程!

整个迁移工作下来,重点其实只有3个:

  • 在云服务器上配置RSA公钥
  • 建立网站根目录,配置Nginx的网页根目录
  • 建立博客仓库,与网站根目录挂钩,同步更新

掌握了这3个重点的操作之后,其他的操作其实很简单

于是乎在云服务器上,我又重新开始记录我的日常点滴