前期工作
之前入手了一台miniPC安装好了Ubuntu,并通过frp内网穿透部署好了gitlab。现在决定重拾荒废的Blog,并做成自动部署。
本文想达到的目的是在任意一台主机编写Blog,并能够做到提交后自动部署。
当前hexo版本5.0以上(安装主题的方式有所不同)
条件
- 云服务器,公网IP+域名
- 服务器自行安装好Nginx+git
- 本地安装好node
开始
本地安装hexo及初始化
1 | npm install -g hexo-cli |
创建服务端账户
一般我们需要专门为服务创建不同用户及用户组,以便做好权限管理。
当前是以root用户登录服务器的
1 | useradd blog |
为了方便,直接将blog用户加到了root组里面
在服务器创建空的git仓库
届时会通过git的钩子方法自动将文件复制到静态文件夹
1 | mkdir /home/blog/repo/ |
既然创建了专用的用户账号,就把相应的资源放在用户目录下/home/blog/就是用户home目录,我们将文件都放到home目录的repo目录中
在服务器创建hexo静态文件夹
作为站点root使用Nginx做web服务器
1 | mkdir /home/blog/repo/hexo |
在本地连接服务器(实现免密连接)
可以先检查下是否已经有了
1 | cat ~/.ssh/id_rsa.pub |
没有就创建公开密钥认证所需的SSH Key
1 | $ ssh-keygen -t rsa -C "your_email@example.com" |
实现免密登录
1 | ssh-copy-id -i ~/.ssh/id_rsa.pub blog@服务器ip或域名 |
- 注意: ssh-copy-id 将key写到远程机器的 ~/ .ssh/authorized_key文件中
本地配置hexo的部署方式
1 | cd myblog |
找到deploy并修改
1 | deploy: |
此时已经可以通过hexo g -d命令构建并部署文件到git仓库了,但是还差一步
添加自动部署钩子
利用git的hooks,在push的时候自动复制文件到hexo目录
1 | cd /home/blog/repo/hexo_static.git |
1 | #!/bin/bash |
给文件加好执行权限
1 | chmod +x post-receive |
运行
有变动才能提交,先修改一下
1 | hexo g -d |
检查文件是否已经到/home/blog/repo/hexo目录了,如过没有,很有可能是访问权限问题,git仓库目录应当和hexo属于同一个用户
配置nginx
自行探索,提供一个简单参考
1 | server{ |
使用gitlab仓库实现代码管理
以上已经实现自动部署,我们进一步的目的是为了实现多态设备随时写作+发布。这一步其实只要有个代码管理仓库不管是github还是gitlab或者gitee都能实现。
可能的问题
- hexo d时ERROR Deployer not found: git只需要
npm install --save hexo-deployer-git - nginx 访问403,这个也是权限问题引起的,检查一下nginx是以什么用户启动的,nginx一般会有nginx用户和用户组,酌情考虑将启动用户改成root。否则你需要重新规划以哪个用户进行hexo的部署
参考链接
工作清单
为了避免长时间不接触忘了工作流,整理一份操作清单
- 拉取分支更新
hexo new draft b建立草稿
1 | --- |
-
hexo publish b发布草稿 -
hexo g -d
