语雀 + GitHub + Hexo 三端同步的自动化部署博客的搭建

本文完整版已转移至 [yuque-hexo 自动化同步: PC & GitHub & Server 的安装与配置](https://www.yuque.com/toulzx/website-sync/ yuque-hexo-guide)

食用声明

本文的目的是实现 **语雀** 编辑发布后,**GitHub Actions**** 自动同步到 **github.io** 以及 ****个人服务器**由于没有找到类似的教程,便自己根据网络上的资料总结了一份,有些需要修改的地方会在本篇提出,相同的操作直接链接到了原文相应段落处,跳转查看即可,本文不再赘述。

如果你没有服务器并只想同步到 **github.io** ,那么阅读这篇文章足以:[**语雀自动同步到 hexo 博客**](https://www.yuque.com/hxfqg9/web/gtb5ck#rOPSH)

**如果你符合如下要求,你将获得更好的体验: **

  • GitHub 使用基础
  • 云服务器&域名 购买和项目部署经历
  • 使用搜索引擎解决问题的能力
  • 能够稳定的访问 GitHub 和 Google

本文目前仅在[**语雀**](https://www.yuque.com/toulzx/website-sync/yuque-github-hexo)[**个人博客**](https://toulzx.github.io/)发布发布,不允许转载。

本地与服务器端的安装与配置、GitHub 个人仓库创建

这篇文章已经写的很详细了:[安装 Hexo 博客并部署到 GitHub 或云服务器](https://blog.csdn.net/qq_43187818/article/details/104468721?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-3.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-3.no_search_link),此处不再赘述。
但请注意,当阅读到[部署到云服务器](https://blog.csdn.net/qq_43187818/article/details/104468721?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-3.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-3.no_search_link#t5)一节,完成安装 Git 以及配置仓库后,你需要停止并继续阅读本文。

补充:本地通过 ssh 连接云服务器

请注意,这一步不是必须的。它只是方便你在电脑本地直接控制服务器,而不是使用云服务器的在线控制台。因此,如果你已经安装并配置过 XShell,或者你并不常使用服务器,这一步看起来就多此一举了。你可以跳过这一步。

如果你正在使用 Windows,我推荐你使用 git bash 而不是 cmd 来完成配置。
按照教程,我们应该使用以下命令:

1
$ ssh -v git@[云服务器的公网IP地址]

代码块符号说明:

  • $ 表示这后面一条控制指令,你不需要输入$
  • [这里会解释填什么] 表示这是个变量,它往往因人而异

然后你可能遇到如下报错:

1
Permission denied (publickey,gssapi-keyex,gssapi-with-mic)

你可以尝试登录 root 账户测试,但结果是一样的:

1
2
3
4
5
$ ssh -v root@[云服务器的公网IP地址]

...
...
Permission denied (publickey,gssapi-keyex,gssapi-with-mic)

解决方法参考此文:[Permission denied (publickey,gssapi-keyex,gssapi-with-mic) 解决方法](https://xiaojueguan.blog.csdn.net/article/details/84946557?utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link)
在 root 用户下,修改配置文件:

1
$ sudo vim /etc/ssh/sshd_config

找到被 # 注释的如下命令,按 i 进入编辑模式,取消注释并修改成:

1
2
PasswordAuthentication yes
PermitRootLogin yes

esc 退出编辑模式,输入 :wq 保存修改。

再执行:

1
$ sudo systemctl restart sshd

然后本地(PC)再次尝试登录服务器:

1
$ ssh -v git@[云服务器的公网IP地址]

此时应该可以登录成功。

自动化部署

此处参考了[Hexo 博客部署到腾讯云服务器全流程](https://blog.csdn.net/StaunchKai/article/details/82878928?utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.no_search_link&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.no_search_link)并根据实际情况补充了内容

创建 git 裸库

1
2
3
4
5
6
7
8
9
10
11
$ su root													# 注意是 root 用户下

$ cd /home/git

$ ls # 什么都没有

$ git init --bare [website].git # 创建裸库,这里我就命名为 website.git

$ ls # 可以发现,目录下已被新建 website.git

$ chown git:git -R [website].git # 授权

使用 git-hooks 同步网站根目录

这使用的是 post-receive/post-update 这个钩子,当 git 有收发的时候就会调用这个钩子。 在 website.git 裸库的 hooks 文件夹中,新建 post-receive / post-update 文件(不同 git 版本不同,此处默认都创建):

1
$ vim [website].git/hooks/post-receive
1
$ vim [website].git/hooks/post-receive

添加如下内容,并保存退出:

1
git --work-tree=/home/www/website --git-dir=/home/git/[website].git checkout -f

赋予此文件权限:

1
$ chmod +x /home/git/[website].git/hooks/post-receive
1
chmod +x /home/git/[website].git/hooks/post-update

hexo 同步 语雀 内容:

此处内容参考[语雀自动同步到hexo博客](https://www.yuque.com/hxfqg9/web/gtb5ck#PV23h)

语雀知识库路径设置

仓库设置 -> 知识库信息 -> 路径
image.png
image.png

语雀 Token

个人头像 -> 账户设置 -> Token -> 新建 -> 勾选读权限
image.png
image.png
image.png

安装并配置 [yuque-hexo](https://github.com/x-cold/yuque-hexo)

1
$ npm i -g yuque-hexo

然后在创建的 Hexo 项目的目录下的 package.json 文件中添加:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
"yuqueConfig": {
"postPath": "source/_posts",
"cachePath": "yuque.json",
"mdNameFormat": "slug",
"adapter": "hexo",
"concurrency": 5,
"baseUrl": "https://www.yuque.com/api/v2",
"login": "[语雀用户名]",
"repo": "[语雀用以更新博客的知识库路径名]",
"token": "[语雀Token]",
"onlyPublished": true,
"onlyPublic": true
},
"devDependencies": {
"yuque-hexo": "^1.6.0"
}

配置本地 _config.yml 文件

此处的配置仅是方便本地手动上传,也可跳过。

在创建的 Hexo 项目的目录下,打开此文件,找到 #deployment,添加如下内容:

1
2
3
4
5
6
7
deploy:
- type: git
repo: https://github.com/[username]/[username].github.io
branch: master
- type: git
repo: git@[服务器公网IP]:/home/git/website.git
branch: master

后来创建的仓库默认 branch-name 可能是 main,请根据实际情况修改,当你不确定的时候,可以除去 branch 项,你只需确保仓库仅有一个分支即可。

这时候使用以下命令,就会把语雀的文章给下载下来,下载到 \source_posts:

1
2
3
4
5
6
7
$ yuque-hexo sync		# 把语雀的文章给下载下来,下载到 \source\_posts

$ hexo generate # 生成静态文件

$ hexo server # 可在浏览器输入 localhost:4000 查看预览

$ hexo deploy # 部署(到服务器)

GitHub Actions 自动更新

此处参考了:[Github Actions 自动部署 Hexo 博客至个人服务器](https://blog.csdn.net/qq_51661411/article/details/117458995#t3)

创建 GitHub Token 、仓库 以及 仓库Secrets

直接看[此处](https://www.yuque.com/hxfqg9/web/gtb5ck#rOPSH) 。图文并茂,简单明了。

请注意,仓库 Secrets,除了 GH_TOKENGH_REF 之外,你还需要额外创建几个 Secrets,这在链接中没提及。

  • HEXO_DEPLOY_PRI :它的内容取自本地 C:\Users\[PC-username]\.ssh\id_rsa,将该文件所有内容复制出来即可。
  • GH_USERNAME :填写你的 GitHub 名称
  • GH_EMAIL :填写你的 GitHub 绑定的邮箱

并且,workflow 的内容以此处为准:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
name: website-sync

on:
[push, repository_dispatch]

jobs:

blog-sync-deploy:

name: Hexo blog build & deploy

runs-on: ubuntu-latest

env:
TZ: Asia/Shanghai

steps:

- name: Checkout codes
uses: actions/checkout@v2

- name: Setup node
uses: actions/setup-node@v1
with:
node-version: '12.x'

- name: Cache node modules
uses: actions/cache@v1
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}

- name: Install dependencies
run: |
npm install hexo-cli -g
npm install yuque-hexo -g
npm install

- name: Sync
run: yuque-hexo sync

- name: Generate files
run: |
hexo clean
hexo generate

- name: Server Authentication
env:
ACTION_DEPLOY_KEY: ${{ secrets.HEXO_DEPLOY_PRI }}
run: |
mkdir -p ~/.ssh/
echo "$ACTION_DEPLOY_KEY" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan ${{ secrets.GH_IP }} >> ~/.ssh/known_hosts
git config --global user.name "${{ secrets.GH_USERNAME }}"
git config --global user.email "${{ secrets.GH_EMAIL }}"

- name: Deploy blog
run: |
git config --global user.name "${{ secrets.GH_USERNAME }}"
git config --global user.email "${{ secrets.GH_EMAIL }}"
git clone https://${{ secrets.GH_USERNAME }}:${{ secrets.GH_TOKEN }}@${{ secrets.GH_REF }}.git .deploy_git
hexo deploy

注意,此代码块中的 [] 不是上文规定的意思, [] 是代码中包含的内容,请勿除去。

配置 serverless 云函数

请看此处

大功告成

恭喜你!

参考资料

语雀 + GitHub + Hexo 三端同步的自动化部署博客的搭建

http://www.toulzx.top/2021/09/20/yuque-github-hexo/

作者

tou

发布于

2021-09-20

更新于

2021-09-21

许可协议

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×