赞
踩
hexo作为一款优秀的静态博客生成器有着一些显著的优点如免费快速简洁轻量,但也存在一些明显的缺点例如更换电脑不便需要重新安装环境,无法在线写文章(修改文章),随着文章和插件的增加hexo三连的速度会越来越慢,使用github actions集成化部署再配合hexoplusplus可以在很大程度上改善hexo的使用体验。
个人服务器是自建了 git 库,利用 hook
钩子发布到网站根目录。所以这篇教程最终是利用 hexo deploy
进行上传到服务器操作。具体可以查阅往期教程:点击这里
获取token是为了保证上传到GitHub公开的网站仓库(编译后的静态页面存放的仓库)有足够的权限可以上传,如果你只是要部署到服务器不同步到GitHub page可以忽略这一步。
登录GitHub点击该链接再点击generate new token
,创建token名称可以随意填写,但是必须勾选全部的repo,其他权限不用勾选。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZxaJWPRT-1622593802428)(…/npmimgbed/image-20210524101951927.png)]
生成token后请复制保存到安全的地方确保已经正确记录token因为token只会显示这一次,如果忘记了只能重新生成,这样做也是为了保护账号安全防止被人盗取token为所欲为。
使用私有仓库是因为涉及到自己文章如果开源仓库可能会导致别人盗取文章的风险同时开源也会暴露站点yml里的token可能会被别有用心获取肆意操作你的github仓库。所以必须闭源。
deploy:
- type: git
repo: https://GitHub用户名:上一步获取的token@github.com/GitHub用户名/GitHubpages对应的仓库.git
branch: master #GitHubpages对应的仓库存放的分支2020年十二月以后默认分支为main注意修改
- type: git
repo: git@服务器ip:/home/git/blog.git #仓库地址
branch: master
以我自己的配置为例,token、ip使用*号进行加密。
deploy:
- type: git
repo: https://brqs:ghp_fG8Z*****************bV1SR@github.com/brqs/brqs.github.io.git #开源页面仓库地址
branch: master
- type: git
repo: git@49.***.72.57:/home/git/blog.git #服务器仓库地址
branch: master
GitHub Actions 的配置文件叫做 workflow 文件,存放在代码仓库的.github/workflows
目录。
workflow 文件采用 YAML 格式,文件名可以任意取,但是后缀名统一为.yml
,比如foo.yml
。一个库可以有多个 workflow 文件。GitHub 只要发现.github/workflows
目录里面有.yml
文件,就会自动运行该文件。
所以需要在本地站点目录新建文件夹.github注意前面有点在里面再新建workflows文件夹。目录结构如下所示
blog (repository)
└── .github
└── workflows
└── autodeploy.yml
新建autodeploy.yml
里面输入如下内容这个yml来源于akilar我加了一点服务器验证内容用于验证连接的服务器。注意你需要修改其中GitHub用户名、邮箱、服务器ip 、token信息。
# 当有改动推送到main分支时,启动Action name: 自动部署 on: push: branches: - main #2020年10月后github新建仓库默认分支改为main,注意更改 release: types: - published jobs: deploy: runs-on: ubuntu-latest steps: - name: 检查分支 uses: actions/checkout@v2 with: ref: main #2020年10月后github新建仓库默认分支改为main,注意更改 - name: 安装 Node uses: actions/setup-node@v1 with: node-version: '12.x' - name: 安装 Hexo run: | export TZ='Asia/Shanghai' npm install hexo-cli -g - name: 缓存 Hexo uses: actions/cache@v1 id: cache with: path: node_modules key: ${{runner.OS}}-${{hashFiles('**/package-lock.json')}} - name: 安装依赖 if: steps.cache.outputs.cache-hit != 'true' run: | npm install --save - name: 生成静态文件 run: | hexo clean hexo generate - name: 服务器验证 env: ACTION_DEPLOY_KEY: ${{ secrets.HEXO_DEPLOY_PRI }} run: | sudo timedatectl set-timezone "Asia/Shanghai" mkdir -p ~/.ssh/ echo "$ACTION_DEPLOY_KEY" > ~/.ssh/id_rsa chmod 600 ~/.ssh/id_rsa ssh-keyscan 49.***.72.57 >> ~/.ssh/known_hosts #此处填写你的服务器IP git config --global user.name "brqs" git config --global user.email "3447851674@qq.com" #修改为你的GitHub用户名邮箱 - name: 部署 run: | git config --global user.name "brqs" git config --global user.email "3447851674@qq.com" git clone https://brqs:ghp_fG8*************CR2bV1SR@github.com/brqs/brqs.github.io.git .deploy_git #修改为你的GitHub用户名邮箱 # 此处务必用HTTPS链接。SSH链接可能有权限报错的隐患,模仿 # =====注意.deploy_git前面有个空格===== # 这行指令的目的是clone博客静态文件仓库,防止Hexo推送时覆盖整个静态文件仓库,而是只推送有更改的文件 hexo deploy
登录GitHub进入私有仓库点击settings->secrets->new repository secret添加密钥name填HEXO_DEPLOY_PRI
,Value填生成再c盘.ssh文件夹中id_rsa打开该文件全选内容复制粘贴即可.
通常站点根目录下有很多文件夹但是他们中并不都需要上传到私有仓库,添加屏蔽项可以减少上传所需时间同时避免上传无意义的文件到仓库。新建.gitignore文本文件已有进入修改,写入以下内容。
.DS_Store
Thumbs.db
db.json
*.log
node_modules/
public/
.deploy*/
.deploy_git*/
第一次使用git管理博客源码,在根目录下git here运行如下指令
git init #初始化
git remote add origin git@github.com:github用户名/私有仓库名.git#可以从github仓库quick setup复制,连接github仓库
git branch -M main#切换到main分支
#以后每次上传内容的时候需要运行以下三条命令
git add . #添加目录下所有文件
git commit -m "github action update" #上传描述必须有
git push -u origin main #上传到github
如果已经管理过可以将根目录下.git文件夹(点击查看显示隐藏文件夹)删除,再进行上述操作.
每次上传内容的时候我们都需要运行三条命令很繁琐容易把我们累死,所以我弄了一个上传脚本(如果你不在意每次的上传描述,就可以实现一键上传)当然更推荐你每次都添加描述手动上传。根目录下新建up.sh写入以下内容。
DIR=./themes
function deploy()
{
git add .
git commit -m "github action update"
git push origin main
}
if [[ -d $DIR ]]; then
deploy
else
echo -e "\033[31mPlease run in the root directory\033[0m"
fi
然后以后每次上传你都只需要运行bash up.sh
即可。
到这里基本上就完成了集成部署,那么集成部署以后可以做什么呢?你可以通过github网页修改文章的错别字错误的图片路径,只要检测到main分支内文件发生变动action就会自动帮你完成部署。那么也可能会产生一个问题仓库修改内容以后会和本地仓库不一致导致出现问题可以利用拉取仓库文件覆盖本地文件来解决。
git pull --rebase origin main #拉取仓库文件覆盖本地文件,建议在开始写东西前先拉取一下避免不一致。
同时可以接入hexo plus plus这个项目来实现云端写作功能进行实时写作目前hpp项目支持的功能有云端写作图床管理,引用hpp首页一句话总所周知Hexo+HexoPlusPlus+Twikoo=Typecho
而且以后hpp可能会推出更多功能。hexoplusplus官网地址
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。