博客搭建
使用github pages 搭建个人博客
参考案例:
问题:
- 如何快速构建一个功能完整的个人博客?
- 如何管理博客(增删改查)?
- 如何使用风格主题?
- 如何添加用户评论?
如何快速构建一个功能完整的个人博客?
创建一个 github page
准备:
- 一个
github
账号 - 一个
github
的ssh
公钥 - 安装好的git
技术基础:
- html
- git
在 github创建一个仓库,仓库名应该遵循<username>.github.io
的命名规范。
在本地找个文件夹作为Blog
仓库,在这里创建一个index.html
作为欢迎页
1 |
|
然后初始化仓库、提交和push
1 |
|
不出意外,这个时候访问:https://<username>.github.io/ 便可以访问到 index.html
的内容。至此,完成了一个最简单 github pages
。
添加Hexo框架
介绍:Hexo
,方便部署和管理博客。
准备: 需要事先安装 node.js
,配置好环境变量,这里不做补充。
流程简述
1 |
|
1 |
|
1 |
|
新开一个窗口,执行命令:
1 |
|
再开一个窗口来创建文章
1 |
|
进入source/_post
,用typora
打开测试文档.md
,修改全局图像插入配置。
- 第一个下拉框选择“复制到指定路径”
- 然后在框内输入
./${filename}
测试效果:
- 复制一张图片到
测试文档.md
,此时图片会自动存入到文件夹测试文档
。 - 关闭
server
,然后hexo clean && hexo g && hexo s
- 此时打开首页,进入文章《测试文档》,可以看到图片正常显示。
- 将鼠标移至图片上,图片资源路径为”http://localhost:4000/2025/4/13/测试文档/test.jpg“ 。路径正常,并没有存到其他位置。
安装 Hexo
首先是安装Hexo
,这个照着官网首页的操作即可
1 |
|
服务启动后,访问本地服务页:http://llocalhost:4000 即可看到 Hexo
成功启动的欢迎页
基础命令介绍
一、从Hexo
创建新文章/新页面:
1 |
|
layout
是布局,默认为post
,命令结束会在默认资源路径(source/_posts
)下创建一个文件名为标题名的md
文件。
layout
官方说明:
Hexo 有三种默认布局:
post
、page
和draft
。 每个布局创建的文件会被保存到不同的路径。 新创建的帖子被保存到source/_post
文件夹。
布局 | 路径 |
---|---|
post |
source/_posts |
page |
source |
draft |
source/_drafts |
如果只是将其他md
复制过来,虽然可以在服务上显示,但会缺少标题。
官方说明:
默认情况下,Hexo 使用帖子标题作为其文件名。 您可以编辑
_config.yml
中的new_post_name
设置去更改默认文件名。 例如,:year-:month-:day-:title.md
将在文件名前加上创建日期。 你可以使用以下占位符:
占位符 | 描述 |
---|---|
:title |
标题(小写,空格将会被替换为短杠) |
:year |
建立的年份,比如, 2015 |
:month |
建立的月份(有前导零),比如, 04 |
:i_month |
建立的月份(无前导零),比如, 4 |
:day |
建立的日期(有前导零),比如, 07 |
:i_day |
建立的日期(无前导零),比如, 7 |
使用new
命令来新建文档,比较适合从头开始编写的文档,如果已经有写好的内容,这种方式不合适。而直接将md
文件复制到_posts
文件夹下,还需要对文件头进行修改,不太方便。
二、草稿
命令:hexo publish [layout] <title>
使用草稿,可以仔细审核好后再发布。
1 |
|
三、脚手架
在新建文章时,Hexo 会根据 scaffolds
文件夹内相对应的文件来建立文件。
命令:
1 |
|
默认scaffolds
下有三个模板:post
、page
和 draft
。如果需要新的脚手架, 可以在这里新建,使用的时候将自定义的脚手架文件名作为layout
即可。
修改配置
了解了必要的基础命令后,修改根目录下的_config.yml
,修改并添加如下内容
1 |
|
开启post_asset_folder
,可以让md
的图片等资源保存到同一文件名目录下。
开启marked
这两个配置,可以自动对markdown的图片引用语法做映射
插件安装
一般都是通过 npm
下载插件,需要注意的是命令使用时当前的目录位置,要再hexo 初始化的blog根目录下。
例子:
这是经过hexo init
过的目录:
1 |
|
看到这个package.json
没,就在这个blog_hexo
目录下安装。安装成功后,package.json
会有对应的依赖。依赖添加上了,就算插件安装成功了。
1 |
|
hexo-asset-img
这个插件解决的是 typora
里图片路径与 hexo 图片路径的一个映射问题。
具体来说:
Hexo 在没有这个插件之前,开启了前面的 marked
配置,会存在一个问题。也就是你的图片要是想在Hexo显示,则在typora里就需要将当前文件设置为根目录。这点不友好,也容易出现错误,所以就需要这个插件做一个路径映射。有了这个插件之后,在两个地方都可以正常显示图片。
1 |
|
编辑文件_config.yml
,修改如下内容:
1 |
|
博客一键部署
1 |
|
问题
下面是我之前遇到的问题,没遇到直接跳过
在插件安装之后,如果没有正常显示,多试试hexo clean
和hexo g
。我也没总结出规律来,但是如果以上配置都做好了,还有图片路径映射问题,就多试试清除本地静态资源并重新生成。我在第一次会出现问题,第二次就好了,暂时没心思去调试,抽空再搞搞。
而且,这个markdown
渲染插件hexo-renderer-marked
也有点问题,有的时候会无法完成资源图片解析。
这个问题找到原因了:
我的yaml文件在配置marked的时候,prependRoot:true
这里,true
后面有空格!导致格式不规范,就会造成这个属性非true
,成了false
。所以没有进行解析。
其次,在更新了yaml文件后,建议重新生成一次静态资源,刷新页面后,就可以看见正常了。
配置_config.yml
应该放在generate
前面
1 |
|
1 |
|
1 |
|
新开一个窗口,执行命令:
1 |
|
再开一个窗口来创建文章
1 |
|
进入source/_post
,用typora
打开测试文档.md
,修改全局图像插入配置。
- 第一个下拉框选择“复制到指定路径”
- 然后在框内输入
./${filename}
测试效果:
- 复制一张图片到
测试文档.md
,此时图片会自动存入到文件夹测试文档
。 - 由于事先用
watch
对资源进行了监听,所以会自动构建到public
文件夹下。 - 此时打开首页,进入文章《测试文档》,可以看到图片正常显示。
- 将鼠标移至图片上,图片资源路径为”http://localhost:4000/2025/4/13/测试文档/test.jpg“ 。路径正常,并没有存到其他位置。我这里没有成功
查看监控日志:
在自动构建的时候,对图片资源的路径构建出现了错误。
原因:打开创建的文档后,复制图片进来导致的问题
解决:
中断
server
、generate
hexo clean
,紧接着hexo g -w
最后
hexo s --debug
至此,一个页面的发布的基本需求就都满足了,然后就是部署。
总结,每次部署前,都需要重新clean
再生成
存储策略存在问题:
- 当使用
hexo g
后,public路径下的每个博客的图片都会存储在当日第一篇博客的资源路径下 - 只有当日第一篇博客的资源名是完整的,其他博客的资源名就算被转移后,其也会失去完整的资源名(似乎随机残缺)
- 只有在当日第一篇博客里,才能使用Hexo的标签语法来读取图片,当日其他博客不行
应对策略:
清空资源,重新生成,这个可以解决问题1和问题2
1 |
|
如何管理博客?
增加博客
1 |
|
删除博客
最直接的方式:到对应布局下的文件夹里删除对应的文档和文件夹
1 |
|
修改文章
进入到自己发布的文档里,直接修改
1 |
|
查找文章
到_config.yml
里增加文章的关键字,这个可以让你的博客搜索栏里找到你的文章。还没深入了解,暂定。
可视化
构建可视化管理页面(要求版本大于Hexo 3.x)
安装hexo-admin
,然后启动服务
1 |
|
进入http://localhost:4000/admin/#/settings
,点击Setup authentification here.
在这里填写用户、密码、Secret。
系统采用的是bcrypt
加密,Secret就是一段自定义的字符数据,用于加密cookies
,确保Secret又长又晦涩。
可以在这里快速创建文档和编辑,这里默认只支持font-matter
的tags
、archive
,需要其他的metadata
,可以在_config.yml
手动添加。
1 |
|
使用风格主题
首先,Hexo 官网里提供了大量用户提交的主题。可以进入挑选自己喜欢的下来。
1 |
|
覆盖配置:
可以使主题配置放置在 fluid 目录之外,避免在更新主题时丢失自定义的配置。支持Hexo 5.0.0 版本以上。将主题的 _config.yml全部配置(或部分配置)复制过去。
注意:
- hexo 先加载
_config.yml
,然后才会用_config.<theme>.yml
覆盖。 - 只要存在于
_config.<theme>.yml
的配置都是高优先级,修改对应原_config.yml
的配置是无效的。 - 每次更新主题可能存在配置变更,请注意更新说明,可能需要手动对
_config.<theme>.yml
同步修改。 - 想查看覆盖配置有没有生效,可以通过
hexo g --debug
查看命令行输出。 - 如果想将某些配置覆盖为空,注意不要把
_config.<theme>.yml
下对应的配置主键删掉/注释,不然是无法覆盖的,比如:
1 |
|
更换主题后,如果出现样式加载异常,重启Hexo前清空缓存
1 |
|
主题1:particle
1 |
|
编辑_config.yml
,修改主题为particlex
1 |
|
补充
配置里,我没有开启Polyfill
,其他也是照着做full主题介绍做的
如果按照我的安装方式下来,使用这个主题,其代码块会有一点问题。此时需要手动修改主题的highlight.js
修改内容如下
1 |
|
然后就可以正常展示了
主题2:NexT
1 |
|
编辑_config.yml
,修改主题为next
1 |
|
主题3:Fluid
1 |
|
编辑_config.yml
,修改主题为fluid
1 |
|
默认样式:https://hexo.fluid-dev.com/posts/hello-fluid/
将 fluid
下的_config.yml
复制到_config.fluid.yml
中
fluid 主题下的 font-matter属性:
1 |
|
由于主题是手动从github下载下来的,所以需要自己清理掉一些不用的文件,比如.git
之类
开启评论功能
Gitalk
首先,您需要选择一个公开github存储库(已存在或创建一个新的github存储库)用于存储评论。
然后需要创建 GitHub Application,如果没有 点击这里申请
homepage url
可以填插件的gitalk
的仓库url
Authorization callback URL
填写回调url。
- 如果你是在本地测试,地址可以填:
http://localhost:4000
- 如果你是部署在github page,地址填:
https://<username>.github.io
- 如果你是部署在自己的云服务器,地址填:
https://<your domain>:<port>
,如果没有ssl证书就用http
协议
注册好之后,根据_config.fluid.yml
里对gitalk
的配置要求填上即可。clientSecret
需要到刚创建的OAuth APP
里手动生成。
如果出现在授权gitalk后出现403错误,参考解决方案
如果出现重定向错误,仔细检查自己的配置,可以参考我的配置:
1 |
|
缺点:
- 需要手动对每个文章的 Issues 进行初始化
- 需要设置好代理
- 相应有点慢
优点:免费
valine
选国际版的leancloud
来注册,只需要验证邮箱就好了。创建好应用,将AppID、AppKey获取到配置文件即可。
部署在本地会出现跨域问题,放到github page就好了