将Hexo博客部署到服务器

之前一直将博客放在GitHub Pages上面,因为其部署起来很方便(参考这篇:从Hugo到Hexo),但随着博客数量的增多,发现加载速度越来越慢,所以最近又将博客挪到了服务器上,访问速度又上去了,还摆脱了百度SEO的问题。

部署步骤

服务器端

1
2
3
4
5
6
7
8
# 在服务器端安装git
yum install git
# 在服务器端创建工作文件夹、裸仓库
mkdir /home/git
mkdir /home/git/hexoblog
git init --bare /home/git/hexo.git
# 新建钩子文件
vim /home/git/hexo.git/hooks/post-receive

在该文件中写入

1
2
#!/bin/bash
git --work-tree=/home/git/hexoblog --git-dir=/home/git/hexo.git checkout -f

1
2
3
4
5
6
7
# 为文件添加执行权限
chmod +x /home/git/hexo.git/hooks/post-receive
# 安装nginx并启动
yum install -y nginx
systemctl start nginx
# 修改配置文件
vim /etc/nginx/nginx.conf

修改以下这两个地方保存即可

1
2
3
4
server{
root /home/git/hexoblog; # 即存放静态文件的目录
server_name suixinblog.cn; # 域名
}

最后,重启nginx服务:

1
systemctl restart nginx

PC端

在PC端也要安装git。
在本机的Hexo配置文件_config.yml中修改如下:

1
2
3
4
deploy:
- type: git
repo: root@IP:/home/git/hexo.git
branch: master

如果服务器登录端口不是默认的22,则配置文件中repo应改为repo: ssh://root@IP:2333/home/git/hexo.git,此处2333改为自己的端口即可。
当然还可以设置本机和服务器的ssh免密登录,就不用每次部署的时候都需要输入密码了。

为网站添加HTTPS安全证书

上面的步骤部署的nginx服务是HTTP的,默认使用80端口,如果你使用Chrome浏览器,前面会有一个不安全的字样,这是提醒该网站不是HTTPS站,所以我们需要为网站添加HTTPS安全证书。
Let’s Encrypt 获得网站域名的免费的证书。Certbot是Let’s Encrypt推出的获取证书的客户端,可以让我们免费快速地获取Let’s Encrypt证书。
参考官网,选择软件和系统之后下面就会出现具体的部署教程,我的是NginxCentOS/RHEL7
几步即可搞定:

1
2
sudo yum install certbot python2-certbot-nginx
sudo certbot --nginx

之后输入邮箱、需要部署的域名、部署方式,看到Congratulations就已经部署成功了。
再回到nginx的配置文件中把信息更新一下即可访问。
由于Let的加密证书有效期是90天,之后就会过期,需要重新再做一次上面的操作,Certbot提供了一个自动续期的功能,只需:

1
sudo certbot renew --dry-run

踩坑

部署的时候,上面的所有操作都顺风顺水,但部署完之后打开页面总是403Forbidden,修改了nginx.conf的user为与nginx启动用户一致的root,还是不管用。查了很久,发现原来是SELinux的锅。。。之前就被SELinux坑了一次,这次决定直接关闭:

1
vim /etc/selinux/config

将其中的SELINUX=enforcing改为SELINUX=disabled,之后重启服务器即可生效。再重启nginx服务即可访问。

参考

https://bujige.net/blog/hexoBlog-deployed-server.html
https://www.weiweiblog.cn/https/
https://www.cnblogs.com/huchong/p/10031523.html