3、从零到一免费线上博客搭建
前言
技术:基于 hexo 搭建博客
计划:使用免费提供的 Pages 的平台作为博客网址,白嫖~
预期:使用 github 作为第一源码,推送后通过 github actions 再次将代码推送到其他平台,实现多个平台的自动同步与部署
已部署成功的本人线上博客地址
Gitee Pages:https://huangzq94.gitee.io/
Github Pages:https://mrhzq.github.io/
Cloundflare Pages:https://huangzq.pages.dev/
Vercel:https://huangzq.vercel.app/
Hexo 搭建博客流程
完全按照官方文档来的:安装文档
初始化安装
- 全局安装工具
1 |
|
- 看是否安装成功
1 |
|
- 初始化:建站
1 |
|
创建成功后,文件内容如下:
hexo init // 已有目录,目录内运行,亲测会失败
- 安装依赖,以下任选一个
1 |
|
安装成功
- 启动项目
1 |
|
浏览器打开:http://localhost:4000/,看到初始的页面
设置主题(可选)
- 更改主题:点这里找一个你喜欢的主题
更改主题操作说明:只要在 themes 文件夹内,新增一个任意名称的文件夹,并修改 _config.yml 内的 theme 设定,即可切换主题
- 更改主题:去到源码,一般为 github 仓库,然后安装该主题库的使用文档操作
- 博客目录下创建 _config.fluid.yml 文件,将主题的 _config.yml全部配置复制过去。
- 更改主题:下载主题(我选的这个主题源码在这,并且支持 npm 安装)
1 |
|
- 更改主题:修改 Hexo 博客目录中的 _config.yml,改以下这两处(来自主题使用文档)
1 |
|
- 创建【关于我】页面(来自主题使用文档)
1 |
|
- 编辑目录下 /source/about/index.md,添加如下内容
1 |
|
- 重启项目:
pnpm run server
,以下是首页和关于页面的展示
本地开发简述(可选)
hexo 项目最终是需要先打包,生成
public
文件夹,最终部署的是public
夹内的东西。
就跟我们vue
一样,开发环境启动dev
,build
执行打包生成dist
然后部署它,
所以 hexo 也是有开发环境、生产环境的概念的
1、开发环境模式
类似于 vue 的 dev 命令,只是没有热更新,最新内容需要手动刷新可看
开发环境操作:直接运行命令pnpm run server
,就会启动本地服务,网站会在 http://localhost:4000/ 下启动,官网说:会监视文件变动并自动更新,无须重启服务器,每次刷新下页面就能看到最新的
但如果是配置更新的话,就需要重启服务器再刷新才能生效,并且有时候还是需要刷新才能看到效果
全局配置(_config.yml)
主要更改博客网站的一些配置:官方文档
更改文件为_config.yml
,我的更改项:
主题配置(_config.fluid.yml)
由于我们使用了主题,然后也创建了主题配置文件,这样大多数的配置就需要在这里面改
官方文档:Hexo Fluid 用户手册
页脚设置 footer
配置关键搜索词:footer:
默认为这个
我更改为:
1 |
|
效果如下:
主页设置
先改首页,下面是首页要改的
大标题更改:官方文档
中间标题更改:官方文档
背景图更改:官方文档
我从 Fluid 演示博客 里面拿了几张图,图片效果做的跟演示博客一样了
具体图片链接看这:
首页 banner_img: https://fluid.s3.bitiful.net/bg/vdysjx.png?w=1920&fmt=webp
文章 banner_img: https://fluid.s3.bitiful.net/bg/vdysjx.png?w=1920&fmt=webp
归档: banner_img: https://fluid.s3.bitiful.net/bg/1cm6iu.png?w=1920&fmt=webp
分类: banner_img: https://fluid.s3.bitiful.net/bg/sdqryn.png?w=1920&fmt=webp
关于: banner_img: https://fluid.s3.bitiful.net/bg/4xvpqo.png?w=1920&fmt=webp
标签: banner_img: https://fluid.s3.bitiful.net/bg/n7a9bv.png?w=1920&fmt=webp
我最终的博客内容展示会对标 Fluid 演示博客,然后可以照着Fluid 演示博客的源码去修改
开启友情链接
官方文档:友情链接页,默认是不开启的
然后我开启了,并且更改为“更多”,里面存放我其他平台的主页,效果如下:
配置更改看:feat: 友情链接页面更改
写文章的插件(可选)
我是使用 VScode 来写 md 的,所以推荐一些好用的插件与包
VSCode 插件
Markdown All in One - Visual Studio Marketplace:功能强大,我用它来做默认的格式化
markdownlint - Visual Studio Marketplace:写 md 时提醒语法错误
npm 包
Lint Markdown:可一键批量修复 md 语法问题,我用来批量处理其他平台导出的 md 语法问题
创建文章
hexo 的文章大多是 Markdown 的,它会自动读取展示出来
所有的文章放在source
下面,除_posts
文件夹之外,开头命名为 _ (下划线)的文件/文件夹将会被忽略
1 |
|
hexo 官方提供的文章类型有三种,分别存放在不同文件夹内
1 |
|
分别演示下 post、page 的展示效果
以下是 post 展示效果
以下是 page 展示效果
1、创建新的文章
- 输入命令
hexo new 文章标题
,就会自动在_posts
内创建一个文章标题.md
文件 - 里面有一些自动填充的内容,填充模板是
scaffolds/post.md
,所以你可以自行更改 - 我将
scaffolds/post.md
改为了
1 |
|
- 所以生成的文章默认为
1 |
|
- 然后刷新下页面,该文章就会自动展示出来
2、塞入已有文章
- 拷贝你的 md 文件过来,放到
_posts
内,然后自己创建一些文件夹进行分类(可选) - 重启服务
pnpm run server
,就直接能看到效果了,很简单与“丑陋”
- 更改该 md 文件,顶部加上这一段:
1 |
|
展示效果如下:
- 字段简单说明下:
1 |
|
- 其中的
category
文章的分类,写了后就能在分类
页面下看到 - 其中的
tags
文章的标签,写了后就能在标签
页面下看到
至此我们的博客的基本内容、配置已 ok 了,接下来就要发到线上去了
静态网站托管对比
平台 | 优点 | 缺点 | 部署博客 |
---|---|---|---|
Github | 1、部署流程简单;2、无任何限制 | 1、国内访问慢;2、可能被墙 | 肯定要部署一个的,已部署成功 |
Gitee | 1、国内访问快 | 1、严格的内容审核,部署博客的话会经常遇到部署失败的情况;2、仓库的最大容量和单个文件大小有限制,对仓库内容非常敏感,需要实名认证,自定义域名和自动部署都需要收费。 | 尝试一下 |
Coding | 1、国内访问快 | 1、腾讯收购,需 COS 付费使用 | 不考虑 |
CodeChina | 1、国内访问快 | 1、需要认证组织才能使用 Page’s 功能 | 无法搞 |
Cloudflare Pages | 1、不限站点数、请求数和带宽,全球都拥有 CDN 节点,支持自定义域名和自动部署。 | 1、国内访问速度和稳定性一般,经常超时,每月构建次数、文件数量和大小都有限制。 | 可以搞一下,已部署成功 |
Vercel | 1、国内访问速度比 Github Pages 和 Cloudflare Pages 要快,支持自定义域名和自动部署。 | 1、构建次数和构建时长有限制,每月宽限制 100G;2、可能被墙 | 可以搞一下,已部署成功 |
Netlify | 1、国内访问速度比 Github Pages 和 Cloudflare Pages 要快,支持自定义域名和自动部署。 | 1、构建次数和构建时长有限制,每月带宽限制 100G;2、可能被墙;3、要验证身份证 | 不考虑 |
GitHub 流程(已成功)
我们是借用 Github Pages 来部署我们的博客,但 Github 根据仓库名会提供了两种 Pages
1、普通仓库名:比如我之前的 random-number-system,创建后再自己弄下 Github Pages 后,访问网址为:https://mrhzq.github.io/random-number-system/
2、特殊仓库名:github 用户名.github.io,比如我创建了 MrHzq.github.io 仓库,然后就能自动通过 https://mrhzq.github.io/ 来访问,这样访问网址更简短
3、再补充一个特殊仓库:github 用户名,比如我创建了 MrHzq 仓库,它就可以作为 github 的主页展示
- 创建两个仓库:一个普通仓库作为源代码管理(私有的),一个特殊仓库作为博客主页用
普通仓库:我的命名为 huangzq-blog(私有的)
特殊仓库:我的命名为 MrHzq.github.io
- 关联第一步创建的文件,命令行进入第一步创建的文件夹(我的是
huangzq-blog)
内:
1 |
|
- 暂存代码并提交代码
1 |
|
- 关联远程仓库(普通仓库哦)
1 |
|
我用的命令为:git remote add origin https://github.com/MrHzq/huangzq-blog.git
- 推送代码到远程仓库
1 |
|
我用的命令为:git push -u origin main
- 我运行后报错:
原因是:我的远程仓库里面的是有文件的,而第一步创建的博客目录里面也有文件,所以正确:是要先拉取远程代码到本地,解决冲突,然后再暂存代码并提交代码,最后重新推送代码到远程仓库。但是我知道远程仓库的文件我不需要了,所以可以选择强制推送到远程
- 报错处理:强制推送到远程
1 |
|
命令运行成功了,远程仓库文件也有了
- 还记得我们刚刚创建了一个特殊仓库吗?我们需要将博客打包后的内容推送上去,推送后就能访问了
- 我们是通过在
huangzq-blog
里面直接推送到MrHzq.github.io
上,所以要先在huangzq-blog
内安装依赖:pnpm add hexo-deployer-git
- 更改根目录的
_config.yml
内容,仅修改deploy
配置:
- 更改根目录的
package.json
内容:
- 本地运行
pnpm run deploy
,它会执行打包,并将public
里面的内容推送到MrHzq.github.io
上
- 然后打开我们的 github 提供的主页:https://mrhzq.github.io/,就能看到有东西了
至此 github 的流程就手动走通了,每次写文章就在huangzq-blog
内写,写完后运行下pnpm run deploy
就能更新我们的博客了
但能不能更自动化一点呢?比如我在huangzq-blog
内提交代码后(一篇文章),然后自动帮我部署到MrHzq.github.io
内,实现自动更新呢?
那当然是可以的,我们借助huangzq-blog
Github Actions 来实现
什么是 Github Actions 呢?可以看我之前实践的这篇文章:Github Actions + Github Pages 自动发布 Vue3 + Vite 项目 - 掘金
Github Actions
本次的目标是:在私有仓库huangzq-blog
内写文章,提交代码后,自动将最新内容部署到公有仓库MrHzq.github.io
内,最终达到线上博客主页的自动更新
- 进入本地的
huangzq-blog
内,创建对应文件
1 |
|
- 去 github 创建 PAT(Personal access tokens),因为我们是在 Actions 内推送代码,所以 github 需要验证你是否有推送权限,因此我们需要创建 PAT,然后 Actions 时告知给 github 我有权限
PS:权限一定要正确,否则无法推送的
- 然后去私有仓库
huangzq-blog
创建对应的 secrets
- 进入
.github/workflows/deployBlog.yml
内,填入下代码(不用改,直接可用):
1 |
|
- 进入
_config.yml
,将deploy
改为如下代码:
1 |
|
- 然后提交代码,就会在
huangzq-blog
仓库内,自动跑 GitHub Actions 了,失败了会有邮件通知,但成功了没有,如果需要成功的通知可以这样开启:Settings -> Notifications
内
- 之后每次更改后,提交代码就会自动部署到博客仓库,并且实现自动更新
Gitee 流程
存在的缺点:严格的内容审核,部署博客的话会经常遇到部署失败的情况
由于我们之前已经在 github 上面创建了私有仓库huangzq-blog
,所以我们在gitee
只创建公版仓库,作用跟MrHzq.github.io
仓库一样,存放打包后的博客代码
- 登录注册不多说
- 创建个人空间地址,记住这个名称,后面会
https://huangzq94.gitee.io
访问
- 创建同名仓库,官方文档,PS:要勾选【设置模板-Readme 文件】
由于我创建时,啥都没选,所以没找到 Gitee Pages,后来发现必须要有文件才能开启……,后来我手动创建了 README 文件
- 仓库创建完成后,这里找到并开启 Gitee Pages
完成个人实名认证,审核要 3~4 天,这就不多说了……
完成后,重新找到并开启 Gitee Pages
点击生成的连接,进去看看,发现已经部署成功了,访问地址为 https://huangzq94.gitee.io/
Gitee Actions(放弃)
我们已经成功部署到 Gitee Pages 了,但是每次更改后,我们都需要手动去仓库内点击Settings -> Pages
,然后重新部署一次,所以我们可以基于 Github 的 Actions 实现自动部署,这样每次在 github 更改后,我们只需要提交代码,就会自动将打包后的 public 代码同步到 Gitee 仓库上,并且再自动刷新 Gitee Pages
- 放弃了,因为我处理了后,发现在同步到 Gitee的步骤一直报错,又看不到日志,我起先以为是私钥、公钥配置的问题,结果我本地手动将 public 同步到 gitee 仓库,发现仓库体积这么大,但本地的 public 只有 150MB 左右
1 |
|
- 所以我怀疑同步的时候,就是因为体积太大的原因导致的,所以就放弃了 Gitee 的自动同步与刷新 pages 的功能
- 所以就需要本地进行手动同步,然后去 Gitee 仓库内,点击
更新
但我还是写一下核心用的东西,万一你们成功了呢
使用的开源 Actions 为:
- 同步到 Gitee:wearerequired/git-mirror-action@master
- 更新 Gitee Pages:yanglbme/gitee-pages-action@main
具体的使用方法,去对应的 github 项目里面找,这里就不贴了
Coding 流程(放弃)
- 登录注册不多说,注册后会默认创建一个团队,团队名称为随机的,我的是
G-OPNC0413
- 完成团队的实名认证,很快,这就不多说了……
- 放弃,它的静态网站需要配合腾讯云 COS 使用,COS 是需要按量付费的,所以无法白嫖,放弃了
- 并且弄一个仓库太复杂了,它有团队、项目、仓库、应用等概念,不适合个人
CodeChina(放弃)
官网:https://gitcode.net/
需要认证组织才能使用 Page’s 功能
Cloudflare Pages(已成功)
官网:https://pages.cloudflare.com/
- 登录注册不多说
- 导入 github 的仓库开启 Pages,我选择的是 github 上那个公开的博客仓库
MrHzq.github.io
- 导入后进行下一步
- 设置域名
- 开始构建
这是我的访问地址:https://huangzq.pages.dev/,博客内容访问到了
Vercel 流程
官网:https://pages.cloudflare.com/
- 可以使用 github 一键登录,因为我们本来就要用到 github 的博客仓库,所以直接一键登录
- 添加博客仓库
- 部署
- 找到访问网址
- 我的访问地址为:https://huangzq.vercel.app/,博客内容一切正常可以看
Netlify 流程(放弃)
- 跟 Vercel,可以使用 github 一键登录
会跳转到这个页面,先不用管,因为它会发一个验证邮件,需要点邮箱里面的去验证
- 验证手机信息,选择 CN,输入手机号、姓拼音、名拼音
- 验证身份证信息,需要上传身份证,放弃了
最后
上面我们部署了几个平台,但我们发布文章的流程还是很简单的:github 私人仓库提交代码,自动推送打包好的代码到 github 公共仓库、gitee 公共仓库,然后其他基于 github 登录的平台(Cloudfare/Vercel)则会自动更新;而 gitee 则需要手动去刷新下