Hexo + Vercel 博客部署方案优化

经典前言

现在我的博客就是部署到 Vercel 上的,

最初选择 Vercel 是因为在 Github PagesCloudflareVercelNetlify 这四个较知名静态网站托管平台 中 Vercel 速度对于国内最快。

Vercel 的免费套餐也是足够的:单账户 100GB 数据传输/每月,1M(百万)次边缘请求,1M 次边缘中间件调用… 详见 Vercel Pricing


… …

因为这几天才注意到博客文章的更新日期一直有问题,

我的博客在 Vercel 上是连接 Git 自动更新部署的,每次更新都会导致更新日期重置

… …

所以优化了下 Hexo + Vercel 的整站部署方案 =w=

当然不光解决更新日期的修复,还有其他东西,想到就更新吧


当前部署方案

先列出来主要部分:

  • 博客框架:Hexo
  • Git托管:Github
  • 博客部署:Vercel
  • RSS订阅部分:Cloudflare Pages
  • 图床方案:Cloudflare R2 (相关文章)

Github -> Vercel 主站部署

之前因为是 Github 直接托管着 Hexo 的博客源码,

Vercel 需要配置环境生成博客静态文件后,再部署,就导致所有文章更新日期一直是部署时间。(需要的当然是每篇文章实际更新的时间)


这里通过配置 GitHub Action 实现通过 Github 编译生成 Hexo 静态文件到新分支,

在 Github 仓库新建 .github/workflows/deploy-static.yml 文件:

点击展开隐藏代码 >folded
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
# .github/workflows/deploy-static.yml

name: Deploy Hexo Static Files

on:
push:
branches:
- main # 框架原分支
workflow_dispatch: # 支持手动部署

jobs:
build-and-deploy:
runs-on: ubuntu-latest

steps:
- name: Checkout source
uses: actions/checkout@v4
with:
fetch-depth: 0 # 关键:获取完整的 Git 历史

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '22.x'

- name: Install dependencies
run: npm i

- name: Generate static files
run: npx hexo generate

- name: Deploy static files to branch
uses: peaceiris/actions-gh-pages@v4
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./public
publish_branch: static # 部署到静态分支
force_orphan: false

这会在每次 git push 时自动编译 Hexo 静态文件到 static 分支。

如果不想每 push 一次就更新,也可以改为每日更新一次,把其中的 on 改为:

1
2
3
on:
schedule:
- cron: '0 16 * * *' # 每天北京时间 0 点运行(UTC16 + 8)

不过现在还无法运行,需要在 **Settings - Actions - General **中下滑找到 Workflow permissions 设置权限为 读和写

设置完成后在 Actions 左侧选中 Deploy Hexo Static Files,手动触发编译。


接着改 Vercel 这里的配置,先把项目 Settings - Build and Deployment 中的框架设置改为 Other

Settings - Environments 修改生产分支为 static

接着要改 Hexo 项目内容,在根目录新建 vercel.json,加入下面内容:

1
2
3
4
5
6
7
8
9
{
"$schema": "https://openapi.vercel.sh/vercel.json",
"git": {
"deploymentEnabled": {
"main": false,
"static": true
}
}
}

提交代码再次部署。

!更新:上面还不能实现修复更新日期,

这里再给项目额外安装 hexo-filter-date-from-git 插件:

1
npm install hexo-filter-date-from-git --save

然后在 _config.yml 中添加配置:

_config.yml
1
2
3
4
5
6
# 使用 Git 历史来设置文章日期
use_date_for_updated: false

# hexo filter date from git Configuration
filter_date_from_git:
enable: true

这时候再更新文章就不会有更新日期的bug了。

RSS 订阅 | 节省 Vercel 流量

因为如果博客要支持 RSS 订阅 的话,是有一定流量耗费的,

这里通过 Cloudflare Pages 部署 RSS 订阅进行补充

(这里直接部署 Hexo 项目生成一个备用网站也是可以的)

Cloudflare 操作跟 Vercel 很像,之后在设置里修改如下内容:

Cloudflare Pages 设置

这里的构建命令指在根目录下新建 feeds 目录,然后将根目录下的 rss.xmlatom.xml 转移到 feeds 文件夹:

1
mkdir -p feeds && cp rss.xml feeds/ && cp atom.xml feeds/

可根据实际情况进行更改,

下面的生产分支则选择 Github 生成静态文件所在分支。

部署后就可以通过 域名/rss.xml域名/atom.xml 访问了(域名为cf中设置的域名)


如果设置了 RSS 订阅按钮,可以更改为 Cloudflare 中部署的地址了。

如果想通过 主域名/rss.xml 就直接访问,可以设置页面重定向,跳转到 Cloudflare 页面。实现方法如 hexo-generator-redirect 插件,手动新建脚本等。

更多

待更新… …

有问题或错误欢迎评论区指出!

Hexo + Vercel 博客部署方案优化

https://blog.dogxi.me/hexo-vercel-optimize/

作者

Dogxi

发布于

2025-06-11

更新于

2025-06-13

许可协议

CC BY 4.0

评论

微信二维码