hexo自动部署+gitlab

前期工作

之前入手了一台miniPC安装好了Ubuntu,并通过frp内网穿透部署好了gitlab。现在决定重拾荒废的Blog,并做成自动部署。

本文想达到的目的是在任意一台主机编写Blog,并能够做到提交后自动部署。

当前hexo版本5.0以上(安装主题的方式有所不同)

条件

  • 云服务器,公网IP+域名
  • 服务器自行安装好Nginx+git
  • 本地安装好node

开始

本地安装hexo及初始化

1
2
3
4
5
npm install -g hexo-cli

hexo init myblog
cd myblog
npm install

创建服务端账户

一般我们需要专门为服务创建不同用户及用户组,以便做好权限管理。
当前是以root用户登录服务器的

1
2
3
useradd blog
passwd blog #设置用户密码
usermod -a -G root blog #设置组

为了方便,直接将blog用户加到了root组里面

在服务器创建空的git仓库

届时会通过git的钩子方法自动将文件复制到静态文件夹

1
2
3
4
5
mkdir /home/blog/repo/
chown -R blog:root /home/blog/repo/
chmod -R 755 /home/blog/repo/
cd /home/blog/repo/
git init --bare hexo_static.git

既然创建了专用的用户账号,就把相应的资源放在用户目录下/home/blog/就是用户home目录,我们将文件都放到home目录的repo目录中

在服务器创建hexo静态文件夹

作为站点root使用Nginx做web服务器

1
mkdir /home/blog/repo/hexo

在本地连接服务器(实现免密连接)

可以先检查下是否已经有了

1
cat ~/.ssh/id_rsa.pub

没有就创建公开密钥认证所需的SSH Key

1
2
3
4
5
6
$ ssh-keygen -t rsa -C "your_email@example.com"
Generating public/private rsa key pair.
Enter file in which to save the key
(/Users/your_user_directory/.ssh/id_rsa): 按回车键
Enter passphrase (empty for no passphrase): 输入密码
Enter same passphrase again: 再次

实现免密登录

1
ssh-copy-id -i ~/.ssh/id_rsa.pub  blog@服务器ip或域名
  • 注意: ssh-copy-id 将key写到远程机器的 ~/ .ssh/authorized_key文件中

本地配置hexo的部署方式

1
2
cd myblog
vi _config.yml

找到deploy并修改

1
2
3
deploy:
type: 'git'
repo: 'blog@ip:/home/blog/repo/hexo_static.git'

此时已经可以通过hexo g -d命令构建并部署文件到git仓库了,但是还差一步

添加自动部署钩子

利用git的hooks,在push的时候自动复制文件到hexo目录

1
2
3
cd /home/blog/repo/hexo_static.git
cd ./hooks
vi post-receive
1
2
#!/bin/bash
git --work-tree=/home/blog/repo/hexo --git-dir=/home/blog/repo/hexo_static.git checkout -f

给文件加好执行权限

1
chmod +x post-receive

运行

有变动才能提交,先修改一下

1
hexo g -d

检查文件是否已经到/home/blog/repo/hexo目录了,如过没有,很有可能是访问权限问题,git仓库目录应当和hexo属于同一个用户

配置nginx

自行探索,提供一个简单参考

1
2
3
4
5
server{
listen 80;
server_name blog.sumshare.cn;
root /home/blog/repo/hexo;
}

使用gitlab仓库实现代码管理

以上已经实现自动部署,我们进一步的目的是为了实现多态设备随时写作+发布。这一步其实只要有个代码管理仓库不管是github还是gitlab或者gitee都能实现。

可能的问题

  1. hexo d时ERROR Deployer not found: git只需要npm install --save hexo-deployer-git
  2. nginx 访问403,这个也是权限问题引起的,检查一下nginx是以什么用户启动的,nginx一般会有nginx用户和用户组,酌情考虑将启动用户改成root。否则你需要重新规划以哪个用户进行hexo的部署

参考链接

Author: sumshare
Link: http://blog.sumshare.cn/2021/02/13/hexo-auto-deploy/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.