Github Actions是GitHub的持续集成服务,可以预设动作(如:main分支push)来触发一些自动化操作。可以用来自动化部署hexo博客。
背景
hexo是常用的一个博客框架,搭配GitHub Pages可以搭建博客。有个问题就是无论用户站点
还是项目站点
,git库必须是Public的,一个分支放博客站点,一个分支放博客源文件,源文件也开放多少有些不好。
当然也有人建两个库,Public的是站点库,Private是源文件的库。这种分库的也可以用Github Actions去自动部署。
还有使用GitHub Pages在国内访问慢是不可避免的问题,有人用github 和 gitee同时部署,国内外分别解析到不同站点。
本文不说博客搭建问题,主要介绍使用Github Actions实现push博客源文件自动化部署博客到云服务器。
云服务器建站
宝塔创建站点
使用宝塔创建站点,会设置好域名和网站目录,然后做好域名解析。(国内服务器域名需要备案)
在创建好的文件目录中会初始化一些文件,有一个.user.ini
,是php的防跨站文件,需要在后面的.yml
文件中忽略,否则在部署时会报错:
1 | rsync: delete_file: unlink(.user.ini) failed: Operation not permitted (1) |
设置ssh密钥
在宝塔的终端里,cd ~/.ssh
,去到.ssh
目录下,查看是否有authorized_keys
、id_rsa
、id_rsa.pub
。如果没有,使用下面的命令创建:
1 | ssh-keygen -m PEM -t rsa -b 4096 |
注意私钥需要pem
格式,不然部署时会报错,问题说明见:ssh-deploy/issues
创建完成之后,需要将公钥拷贝到authorized_keys
中,使用命令:
1 | cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys |
至此,服务器中的设置完成。
GitHub建库
在GitHub中创建hexo源文件库,可以是私有库。建完库之后,设置Secret
设置ACCESS_TOKEN
在项目的 Settings -> Secrets 中新建一个Sectet,设置ACCESS_TOKEN
,名称可以自定义,注意在后面写workflow
时文件名要对应。
ACCESS_TOKEN
对应的值是上面在服务器中生成的私钥id_rsa
,查看id_rsa
命令:
1 | cat ~/.ssh/id_rsa |
设置REMOTE_HOST
REMOTE_HOST
对应的值是服务器的ip地址
设置REMOTE_USER
REMOTE_USER
对应的值是root
设置TARGET
TARGET
对应的值是创建的站点根目录,如上图中/www/wwwroot/xxx.com
设置完成如下图:
这些值设置在Sectets中,相对来说比较安全。这些值设定之后无法再查看,只能更新或删除。
设置workflow
在项目的Actions
中设置workflow
,这是一个.yml
文件。这个文件会被放在项目的.github/workflow/xx.yml
,文件名可自定义。GitHub会自动执行这个目录下的.yml
文件。
更详细的知识点请见:阮老师的GitHub Actions 入门教程
下面是部署hexo博客到云服务器的完整workflow
:
1 | main.yml |
Deploy脚本详见:ssh-deploy
设置好Actions保存之后,会立即执行一次自动化部署,之后只需要写博客push到GitHub,即会自动部署。香的很!