Github Actions自动部署Hexo博客至个人服务器

hexo作为一款优秀的静态博客生成器有着一些显著的优点如免费快速简洁轻量,但也存在一些明显的缺点例如更换电脑不便需要重新安装环境,无法在线写文章(修改文章),随着文章和插件的增加hexo三连的速度会越来越慢,使用github actions集成化部署再配合hexoplusplus可以在很大程度上改善hexo的使用体验。

个人服务器是自建了 git 库,利用 hook 钩子发布到网站根目录。所以这篇教程最终是利用 hexo deploy 进行上传到服务器操作。具体可以查阅往期教程:点击这里

获取token

获取token是为了保证上传到GitHub公开的网站仓库(编译后的静态页面存放的仓库)有足够的权限可以上传,如果你只是要部署到服务器不同步到GitHub page可以忽略这一步。

登录GitHub点击该链接再点击generate new token,创建token名称可以随意填写,但是必须勾选全部的repo,其他权限不用勾选。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZxaJWPRT-1622593802428)(…/npmimgbed/image-20210524101951927.png)]

生成token后请复制保存到安全的地方确保已经正确记录token因为token只会显示这一次,如果忘记了只能重新生成,这样做也是为了保护账号安全防止被人盗取token为所欲为。

创建存放hexo源码的私有仓库

使用私有仓库是因为涉及到自己文章如果开源仓库可能会导致别人盗取文章的风险同时开源也会暴露站点yml里的token可能会被别有用心获取肆意操作你的github仓库。所以必须闭源。

修改站点_config.yml deploy

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 Action

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

前往私有仓库添加secrets密钥

登录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官网地址

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3CNP03X2-1622593918232)(https://hesifan.top/npmimgbed/image-20210524151225670.png)]

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以的,Github Actions可以用来自动化前端项目的部署到云服务器。以下是一个简单的例子: 1. 首先,在你的Github仓库中创建一个`.github/workflows`文件夹,并在该文件夹下创建一个`deploy.yml`文件。 2. 在`deploy.yml`文件中设置触发部署的事件,例如push到master分支。然后设置一个`job`,该`job`会在触发事件后运行。 3. 在该`job`中,使用`actions/checkout` action拉取代码,并使用`actions/setup-node` action安装依赖。 4. 接下来,使用你喜欢的打包工具打包你的前端代码,例如webpack或者parcel。打包后的文件会被存储在一个`dist`文件夹中。 5. 然后,使用`appleboy/ssh-action` action将打包后的文件上传到云服务器。该action会使用SSH登录到你的服务器,并将文件复制到服务器上的指定目录。 下面是一个示例的`deploy.yml`文件: ```yml name: Deploy to Cloud Server on: push: branches: - master jobs: deploy: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v2 - name: Setup Node uses: actions/setup-node@v1 with: node-version: '12.x' - name: Install dependencies run: npm install - name: Build run: npm run build - name: Deploy to Cloud Server uses: appleboy/ssh-action@master with: host: ${{ secrets.HOST }} username: ${{ secrets.USERNAME }} password: ${{ secrets.PASSWORD }} port: ${{ secrets.PORT }} script: | cd /path/to/your/project rm -rf * scp -r /path/to/your/project/dist/* ./ ``` 这个例子是使用密码登录到云服务器的。如果你使用的是SSH Key,你需要相应地修改`deploy.yml`文件。此外,你需要在Github仓库的`Settings`中添加`secrets`,以保存你的服务器信息和登录凭证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值