Hexo使用Qexo进行后台管理的部署配置

Qexo云后台部署管理

实现思路

步骤 内容 资源
GitHub自动部署
①本地Hexo源文件同步到GitHub私有仓库 Qexo搭建教程 - JustPureH2O的博客
②GitHub Actions自动部署 Hexo博客自动部署-時光
Vercel在线部署云后台
1. Qexo源代码fork到GitHub仓库(可跳过) Abudu的Qexo源码
2. Vercel一键部署 一键部署
3. Vercel添加Storage
4. Vercel修改Node.js版本为18
5. Vercel重新部署
6. Vercle初始化和配置 GitHub_tokenVercel_token、Vercel项目ID
7. Vercel绑定自定义域名
本地部署
使用SQlite数据库
同步
Qexo/仓库 同步到本地
本地同步到仓库
图床配置 帝少123/telegraph-image图床配置 · Qexo

一.GitHub自动部署

1. 本地Hexo源文件同步到GitHub私有仓库

来源:Qexo搭建教程 - JustPureH2O的博客

  在Github里新建仓库,用于存放博客源码。接着在本地转到你的博客源码文件夹中(就是你执行 hexo clean & hexo g & hexo d 的文件夹),右键点击 git bash here,依次键入以下的代码:

  1. (“查看”里勾选“显示隐藏的文件”后,若源码目录下没有名为 .git 的文件夹,有则跳过该步骤)git init
  2. 复制仓库的网页地址,例:https://github.com/<username>/<repo>
  3. 输入 git remote add <name> https://github.com/<username>/<repo>.git(这里的 <name> 任取,但保证先前未创建过,且不与已经存在的 <name> 重复,否则将可能不会上传当前的文件夹)
  4. 输入 git pull <name> mastermaster 可更改,但保证和新建仓库的主branch同名
  5. 输入 git add .(注意有个点)
  6. 输入 git commit -m "Commit内容"(内容可更改,但需要用半角双引号包裹起来)
  7. 输入 git push <name> mastermaster 保持前后一致即可)

  如果是第一次上传,按顺序执行以下七步操作;如果已经上传过了,想要提交一些个人的更改,执行第四到第七步即可。“Github 仓库”这一项就填刚刚创建并上传的源码仓库,格式是 <username>/<repo>(例:mynameisabcd/BlogSourceCode)。

  “项目分支”填源代码仓库的主要分支,一般是 master;“博客路径”留空即可。

2. GitHub Actions自动部署

来源:Hexo博客自动部署-時光 _一次成功_🎉

① 获取token(保存好,只显示一次)

点击获取GitHub_token

手动获取路径:Settings—Developer Settings—Personal access tokens—Tokens(classic)——Generate new token

Expiration:No Expiration(永不过期)
Select scopes:勾选 repoworkflow

生成后保存好,只显示一次,丢失需要重新生成

② 修改 config.yml

大部分人之前应该都是在本地进行博客编写,所以连接 GitHub 的方式一般都是使用的 ssh ,我们为了方便后续自动部署,需要把 config.yml 文件中的 deploy => repository => github 值改成 token url 的形式。

1
2
3
4
deploy:
- type: git
repo: shiguang://liyao231381.github.io.git
branch: main

改为

1
2
3
deploy:
- type: git
repo: https://{$GH_TOKEN}@github.com/liyao231381/liyao231381.github.io.git,main

   将 {$GH_TOKEN} 替换成刚才生成的 token ,仓库地址是博客静态文件最终存放的仓库地址,即开通 Github Pages 服务的那个仓库地址。

   这里可以同时部署到多个仓库,只需复制一份配置信息即可

1
2
3
4
5
deploy:
- type: git
repo: https://{$GH_TOKEN}@github.com/your-name/your-name.github.io.git,main
- type: git
repo: https://{$GH_TOKEN}@github.com/your-name/your-repo.git,main

③ 创建 GitHub Actions 脚本

GitHub Actions 的工作流文件存放在源代码仓库的 .github/workflows 目录。workflow 文件采用 YAML 格式,文件名可以任意取,但是后缀名统一为 .yml,比如 deploy.yml。一个库可以有多个 workflow 文件。GitHub 在我们完成预设触发条件时,只要发现 .github/workflows 目录里面有 .yml文件,就会自动读取运行该文件。
可以手动建立此文件,或者通过源代码仓库 => Actions => 选择 Setup Node创建,但最终同样都需 push 到远端源代码仓库中。

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
name: Lee's Blog CI/CD # 脚本 workflow 名称

on:
push:
branches: [main, master] # 当监测 main,master 的 push
paths: # 监测所有 source 目录下的文件变动,所有 yml,json 后缀文件的变动。
- '*.json'
- '**.yml'
- '**/source/**'

jobs:
blog: # 任务名称
timeout-minutes: 30 # 设置 30 分钟超时
runs-on: ubuntu-latest # 指定最新 ubuntu 系统
steps:
- uses: actions/checkout@v2 # 拉取仓库代码
- uses: actions/setup-node@v2 # 设置 node.js 环境
with:
node-version: '18' # 根据你的 Node.js 版本进行调整
- name: Cache node_modules # 缓存 node_modules,提高编译速度,毕竟每月只有 2000 分钟。
uses: actions/cache@v2
env:
cache-name: cache-node-modules
with:
path: ~/.npm
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-build-${{ env.cache-name }}-
${{ runner.os }}-build-
${{ runner.os }}-
- name: Init Node.js # 安装源代码所需插件
run: |
npm install
echo "init node successful"
- name: Install Hexo-cli # 安装 Hexo
run: |
npm install -g hexo-cli --save
echo "install hexo successful"

- name: Build Blog # 编译创建静态博客文件
run: |
hexo clean
hexo g
echo "build blog successful"
- name: Deploy Shiguang's Blog # 设置 git 信息并推送静态博客文件
run: |
git config --global user.name "your name"
git config --global user.email "your email"
hexo deploy

- run: echo "Deploy Successful!"

代码提交前需要检查下是否已安装一键部署插件 hexo-deployer-git

1
npm install hexo-deployer-git --save

若提示 Deployer not found: git 则说明尚未引入该插件依赖

作者: 時光
来源:【Hexo】博客自动部署 | 時光

二.Qexo部署

1.Qexo源代码fork到GitHub仓库

来源:点击一键部署Abudu的Qexo源码

2.Vercel一键部署

来源:点击一键部署
  部署失败是正常的,不用管

3.Vercel添加Storage

  我用的是Neon,华盛顿

4.Vercel修改Node.js版本为18

  路径:Vercel—项目—设置—常规—Node.js版本
改为18.x 版本

5.Vercel重新部署

  路径:Vercel—项目—部署—重新部署
  英文:Vercel—项目—Deployments-Redeploy

6.Vercle初始化和配置

  重新部署成功即完成初始化
  配置:

① 用户配置

API留空自动生成,用户名和密码自定义

② 博客配置

Github密钥:前面生成的 GitHub_token
Github仓库:存放博客源文件的自动化部署仓库
项目分支:源文件所在的分支
博客路径:默认留空

③ Vercel配置

Vercel密钥:点击获取Vercel_token 头像—Account Settings—Tokens
项目ID:Vercel—项目—设置—常规—项目ID

7. Vercel绑定自定义域名

这一步可有可无。因为部署成功会自动生成一个域名用来访问,但是这个域名比较长,而且国内无法访问,需要挂梯子。可以通过自定义域名托管在cloudflare进行间接访问,并且也更好记。

前提是拥有自己的域名,例如 ly.com。先把域名托管到cloudflare,过程中会给出两个名称S服务器地址,复制粘贴到域名注册商对应位置。

① 在cloudflare托管的域名中添加两条DNS记录

类型 名称 内容 代理状态 TTL
A @ 76.76.21.21 已代理 自动
CNAME www cname-china.vercel-dns.com 已代理 自动

其中”@“为使用根域名“ly.com”,”www“为子域名”www.ly.com“,“ly.com”和”www.ly.com“是用来绑定Qexo的域名,代替部署成功自动生成的域名,方便记忆。
76.76.21.21cname-china.vercel-dns.com是Vercel提供的DNS记录服务器。默认的cname.vercel-dns.com在国内无法访问,所以采用另一个。

②更改域名的加密模式

我一开始自行配置的自定义域根本没办法访问,我找过添加自定义域的原因,找过添加DNS记录的原因,最终都无法访问,显示重定向次数过多。阴差阳错在NotionNext博客搭建的教程中看见了这一步操作,尝试后立刻成功通过自定义域访问Qexo管理面板。
来源:Vercel绑定自定义域名 | NotionNext帮助手册

具体操作:在域名的SSL/TSL中配置SSL/TSL加密模式为完全。这是因为默认的灵活加密证书不匹配会导致反复重定向,而无法访问。

③ 在Vercel中添加自定义域

将“ly.com”和”www.ly.com“分别添加到Vercel的自定义域中,不需要其它操作。
等几分钟应该就OK了。

三.本地部署

想尝试本地部署,又不想用Docker和其他安装的数据库,试过MySQL,安装失败了,感觉很麻烦,于是在ChatGPT的帮助下尝试直接在Windows部署Qexo。

1. 拉取Qexo

在想要部署qexo的文件夹下打开VScode,运行下列代码拉取qexo

1
git clone https://github.com/Qexo/Qexo.git

2. 安装依赖

进入拉取的qexo文件夹cd qexo
运行

1
pip install -r requirements.txt

3. 配置 SQLite 数据库

根目录下新建configs.py文件,内容为

1
2
3
4
5
6
7
8
9
10
from pathlib import Path

DOMAINS = ["*"]
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': Path(__file__).parent / 'db' / 'db.sqlite3',
}
}

4. 运行迁移

运行数据库迁移命令,以便 Django 创建相应的数据库表

1
2
python manage.py makemigrations
python manage.py migrate

5. 运行

通过下面命令运行本地qexo服务

1
python manage.py runserver

浏览器打开https://127.0.0.1:8000进入Qexo,在其中的配置都会保存在SQLite数据库db.sqlite3

局域网内其他设备使用,可以运行

1
python manage.py runserver 0.0.0.0:8000

其他设备通过 http://电脑IP:8000 可以进入qexo

6. 一键运行

部署成功了,但是每次运行都要进入文件夹、输入命令和浏览器打开地址,所以采用批处理一键运行,为避免跨磁盘运行出错,直接把批处理文件放在manage.py相同路径下,也就是Qexo文件夹。
在Qexo目录下新建文本文档,内容为

1
2
3
4
@echo off
start cmd /k "python manage.py runserver"
timeout /t 5 > nul
start msedge http://127.0.0.1:8000

重命名为Qexo.bat,右键发送到桌面快捷方式

  • 快捷方式美化
    把快捷方式重命名为Qexo
    右键——属性——更改图标,保存下图,用 在线图标转换工具 转换成.ico文件,作为快捷方式的图标。
    ps:试过各种方式转换成.ico,都无法上传图片,只能提供png格式自行转换了
Qexo

现在完美伪装成一个应用程序了

7. 更新方法

  1. 一键更新,选择dev,确定。提示出错不用管,到本地项目文件夹找到_tmp,里面是更新的release,名字为Qexo-*短码,把里面的文件剪切出来粘贴覆盖项目根目录文件。
  2. 无法通过设置界面一键更新,可以手动覆盖更新。进入Releases · Qexo/Qexo,下载最新版本的 Source Code.zip
截图

解压后覆盖本地文件,只会覆盖更新源码文件,不会影响本地的configs.pydb.sqlite3qexo.bat

四.同步

推送代码:

1
2
3
git add .
git commit -m "" #"输入内容(update)"
git push master master

查看分支代码:

1
git branch

1.Qexo/仓库 同步到本地

将远程的更改合并到本地

1
git pull master master

2.本地同步到仓库

本地推送到自动化部署仓库

1
git push master master

处理可能的合并冲突

如果 git pull 后出现冲突,Git 会提示你在哪些文件上有冲突,你需要手动解决冲突:

  • 使用文本编辑器打开冲突的文件,Git 会标记出冲突的部分。
  • 解决冲突后,执行:
1
2
git add <resolved\_file> # 添加解决冲突后的文件
git commit # 提交合并

然后再执行:

1
git push master master

3.Qexo同步仓库内容

设置—博客配置—重新提交
(相当于更换一个源码仓库,会重新加载内容)

本地部署问题

执行 hexo cl;hexo g;hexo d出错,先重新连接仓库

1
2
git config --global user.name "liyao231381" #liyao231381替换为GitHub_ID
git config --global user.email "[email protected]" #[email protected]替换为GitHub使用的邮箱

再执行部署命令

1
hexo d

五.图床配置

我使用的是自己搭建的Sanyue图床,感谢 **dishao123 (帝少)**,搭建教程已经转载👇

搭建教程Telegram和Cloudflare搭建免费图床 | 理·型·健

通过Qexo图床中的远程API进行配置。参考了 远程API | Qexo 文档帝少的开源图床项目 ,在ChatGPT-4o-mini的帮助下配置成功。

配置参数:

截图

配置项 参数 解释
API 地址 https://自定义域/upload?authCode=自定义前端密码&uploadNameType=index 图床图片上传的 API和参数配置,index表示返回图片名仅前缀数字,避免文件名有空格和汉字影响渲染显示
POST 参数名 file 图床图片上传 API 参数中图片文件的参数名
JSON 路径 0.src 图床 API 返回数据中图片 URL 所在的路径,若为整个返回值请留空
自定义请求头 *留空 POST 请求时附带的请求头,需要标准 JSON 格式,若不需要请留空
自定义 BODY *留空 POST 请求时额外的请求主体,需要标准 JSON 格式,若不需要请留空
自定义前缀 https://自定义域 返回 URL 所需要添加的前缀,若不需要请留空
删除API *留空

中间一直配置出错,最后找到原因在于JSON路径。qexo文档示例JSON路径为data.url,返回的JSON中图片路径在data参数的url参数中。图床文档示例JSON路径为data[0].src,返回的JSON中图片路径在src参数中。我把Qexo配置中JSON路径分别设置为data.srcdata[0].src[0].src.srcsrc都无法成功。最后通过ChatGPT得知:
数组访问:使用 0 作为索引来访问数组中的第一个元素。
于是把JSON路径设为0.src就成功了。

大功告成!!!
有问题找Chat GPT


这是我自己搭建的blog网站,用来记录和分享我自己研究的健身造型知识,类似于一个知识库。可以把这个网站分享给你身边的健身爱好者,转载或节选引,用务必注明为“李瑶的原创”,您的支持和尊重是我更新的动力!
理型健