个人博客搭建
个人博客搭建
安装Portainer CE 监控面板
1 | # 拉取最新镜像 |
安装FileBrowser文件管理器
1 | mkdir -p /opt/jetson-server/filebrowser |
1 | docker run -d \ |
安装git 9.0.2
1 | apt install git |
安装node.js环境 20.20.1
1 | # 下载npm软件包 |
arm 架构的apt中可能版本较旧,建议去nodejs下载地址下载所需版本,然后手动解压安装
1 | # 解压 .tar.gz 文件 |
安装Hexo框架
1 | # 安装hexo |
初始化Hexo
1 | # 安装hexo |
让Hexo在后台运行
1 | npm install -g pm2 |
1 | cat > hexo_run.js << 'EOF' |
1 | pm2 start hexo_run.js |
安装butterfly主题
1 | # 下载稳定版butterfly主题 |
不用删除themes\butterfly\.git、themes\butterfly\.github目录,之后通过配置 .gitmodules解决部署问题
修改 Hexo 根目录下的 _config.yml,把主题改为 butterfly
1 | theme: butterfly |
如果你没有 pug 以及 stylus 的渲染器,请下载安装:
1 | npm install hexo-renderer-pug hexo-renderer-stylus --save |
在 hexo 的根目录创建一个文件 _config.butterfly.yml,并把主题目录的 _config.yml 内容复制到 _config.butterfly.yml 去。这边我建议用cp命令,直接将主题的config内容复制到hexo根目录上
以后只需要在 _config.butterfly.yml 进行配置就行。如果使用了 _config.butterfly.yml, 配置主题的 _config.yml 将不会有效果。
Hexo 会自动合并主题中的 _config.yml 和 _config.butterfly.yml 里的配置,如果存在同名配置,会使用 _config.butterfly.yml 的配置,其优先度较高。
1 | cp themes/butterfly/_config.yml _config.butterfly.yml |
配置博客
配置网站页面
打开hexo根目录的_config.yml
1 | # Site |
副标题循环打字效果
_config.butterfly.yml配置
1 | # The subtitle on homepage |
修改永久链接格式
修改hexo根目录的_config.yml
1 | url: https://www.whitee.cn |
当我们发布文章时,在文章头部信息中添加id信息
1 |
|
同时在_config.yml中修改category_map, 将很多category是中文的映射成英文
1 | # Category & Tag |
目录配置
打开hexo根目录的_config.butterfly.yml
1 | menu: |
社交设置
Butterfly 支持 font-awesome v6 图标。
修改主题配置文件_config.butterfly.yml。
书写格式:图标名:url || 描述性文字。
1 | social: |
头像设置
1 | favicon: /img/favicon.png #网站图标 |
字体设置
- 全局字体
1 | # Global font settings |
实际显示效果大概如下:
| 字体 | 平台 | 风格 |
|---|---|---|
| -apple-system | macOS/iPhone | 苹果系统默认字体,非常舒服 |
| BlinkMacSystemFont | Chrome(mac) | 同上 |
| Segoe UI | Windows | Windows 10/11 默认界面字体 |
| Helvetica Neue | macOS | 简洁现代 |
| Lato | Web字体 | 偏圆润、文艺 |
| Roboto | Android | Google 官方字体 |
| PingFang SC | macOS 中文 | 苹方,清晰现代 |
| Microsoft YaHei | Windows 中文 | 微软雅黑,最常见 |
| Microsoft JhengHei | 繁体中文 | 微软正黑体 |
| sans-serif | 兜底字体 | 系统默认无衬线字体 |
- Blog标题字体
1 | # Font settings for the site title and site subtitle |
效果:
| 字体 | 平台 | 特点 |
|---|---|---|
| Consolas | Windows | 程序员最爱的等宽字体之一 |
| Menlo | macOS | 苹果开发字体 |
| PingFang SC | 中文显示 | |
| Microsoft YaHei | 中文显示 | |
| sans-serif | 兜底 |
各类图片名称
- 站点图标:
favicon - 头像:
avatar - 主页封面图片:
index_img - 归档页顶部的图片:
archive_img - 标签页顶部的图片:
tag_img - 分类页顶部的图片:
category_img - 文章封面:
cover - 文章详情页的顶部图片:
default_top_img- 3个参数均可影响,系统会优先选择优先级高的进行展示,优先级:Banner中的cover参数 > Banner中的top_img参数 > default_top_img
以上名称均在主题配置文件
_config.butterfly.yml中
标签、分类等页面 top_img 设置
_config.butterfly.yml中的如下配置
| 配置 | 解释 |
|---|---|
| index_img | 主页的 top_img,也就是主页遮罩图片 |
| default_top_img | 默认的 top_img,当页面(包括文章页)的 top_img 没有配置时,会显示 default_top_img |
| archive_img | 归档页面的 top_img |
| tag_img | tag 子页面的默认 top_img |
| tag_per_img | tag 子页面的 top_img,可配置每个 tag 的 top_img |
| category_img | category 子页面的默认 top_img |
| category_per_img | category 子页面的 top_img,可配置每个 category 的 top_img |
| (tags/categories/自建页面) 和 文章页 的 top_img | 需到对应的 md 页面设置 front-matter 中的 top_img |
1 | # Note: tag page, not tags page |
页面顶部大图配置(Banner)
_config.butterfly.yml 配置:
1 | index_img: # 首页,一般不配 |
标签 / 分类单独背景
1 | tag_per_img: |
tags(不是tag) 页面背景配置的方法(categories同理)
1 | # 找到这个文件 |
1 | # 在文件头部添加上这个 |
背景图和顶部脚步图设置
1 | # 设置的是博客封面图和每篇文章头图 |
自定义文章卡片大小
首页一篇文章大概是这样:
1 | #recent-posts |
将下面CSS样式加入博客根目录下的 source/css/custom.css 中
1 | /* 首页卡片压缩 */ |
自定义背景特效
修改_config.butterfly.yml中的如下配置
1 | # canvas_ribbon (静止彩带背景) |
代码块样式
1 | code_blocks: |
主题目录
1 | hexo new page tags |
分别找到 source/tags/index.md、source/categories/index.md 、source/link/index.md 文件并编辑
1 |
|
1 |
|
1 |
|
数据来源
1 | mkdir _data # 创建一个名为data的文件夹 |
1 | - class_name: 友情链接 |
音乐页面
需要根据 butterfly 版本选择
一、插件的安装与配置
1.安装hexo-tag-aplayer插件
执行命令:
1 | npm install hexo-tag-aplayer --save |
2.配置插件
找到项目文件夹根目录下的 _config.yml文件,添加如下代码:
1 | aplayer: |
之后打开 _config.butterfly.yml文件,进行修改,这是为了引入刚才下载的插件。
1 | # Inject the css and script (aplayer/meting) |
二、音乐页面配置
1.创建页面
如果还没有创建音乐页面,那就用以下命令创建:
1 | hexo new page music |
运行之后就会在source文件夹下生成一个music文件夹,打开music文件夹下的index.md文件,添加如下代码:
1 | {% meting "18007803073" "netease" "playlist" "autoplay" "mutex:false" "listmaxheight:400px" "preload:none" "theme:#ad7a86"%} |
MetingJS 是基于Meting API 的 APlayer 衍生播放器,引入 MetingJS 后,播放器将支持对于 QQ音乐、网易云音乐、虾米、酷狗、百度等平台的音乐播放。
server:netease(网易云音乐),tencent(QQ音乐),kugou(酷狗音乐),xiami(虾米音乐),baidu(百度音乐)。
type:song(歌曲),playlist(歌单),album(专辑),search(搜索关键字),artist(歌手)。添加单曲选的歌曲,歌单选择playlist,可以自行尝试。
id:就是在网页版上自己歌单的ID号,但是需要注意的是歌单中不能包含VIP音乐,不然无法播放。建议使用网易云音乐。
有关 {% meting %} 的选项列表如下:
| 选项 | 默认值 | 描述 |
|---|---|---|
| id | 必须值 | 歌曲 id / 播放列表 id / 相册 id / 搜索关键字 |
| server | 必须值 | 音乐平台: netease, tencent, kugou, xiami, baidu |
| type | 必须值 | song, playlist, album, search, artist |
| fixed | false |
开启固定模式 |
| mini | false |
开启迷你模式 |
| loop | all |
列表循环模式:all, one,none |
| order | list |
列表播放模式: list, random |
| volume | 0.7 | 播放器音量 |
| lrctype | 0 | 歌词格式类型 |
| listfolded | false |
指定音乐播放列表是否折叠 |
| storagename | metingjs |
LocalStorage 中存储播放器设定的键名 |
| autoplay | true |
自动播放,移动端浏览器暂时不支持此功能 |
| mutex | true |
该选项开启时,如果同页面有其他 aplayer 播放,该播放器会暂停 |
| listmaxheight | 340px |
播放列表的最大长度 |
| preload | auto |
音乐文件预载入模式,可选项: none, metadata, auto |
| theme | #ad7a86 |
播放器风格色彩设置 |
2.全局吸底Aplayer模式
在 _config.butterfly.yml文件中修改如下:
1 | inject: |
其中里面的参数都可以根据自己需要进行修改
如果想切换页面时,音乐不会中断,就在_config.butterfly.yml文件中 pjax修改为true
1 | pjax: |
创建音乐页面
1 | hexo new page music |
在 _config.butterfly.yml 中注入必要的库
1 | inject: |
编辑 source/music/index.md
1 | --- |
1 | 配置说明: |
创建新文章
如果资源只给特定的文章使用,可以将 config.yml 文件中的 post_asset_folder 选项设为 true,然后在每一次通过命令创建新文章时自动创建一个与文章 title 同名的文件夹,然后就可以把有关的资源放在这个关联文件夹中,再通过相对路径来引用它们
1 | post_asset_folder: true |
创建新文章
1 | hexo new post <title> |
文章封面卡片
主题文章卡片支持 7 种布局
1 | index_layout: 3 |
| 配置值 | 解释 |
|---|---|
| 1 | 封面在左,信息在右 |
| 2 | 封面在右,信息在左 |
| 3 | 封面和信息左右交替显示 |
| 4 | 封面在上,信息在下 |
| 5 | 信息显示在封面上 |
| 6 | 瀑布流布局 - 封面在上,信息在下 |
| 7 | 瀑布流布局 - 信息显示在封面上 |
文章封面
1 | cover: |
文章标题区域显示
主题配置文件 (_config.butterfly.yml) 里,找到 post_meta 部分
1 | post_meta: |
文章中 Front-matter 参数
| 参数 | 作用 | 解释 |
|---|---|---|
| title | 文章标题 | 作为文章标题展示 |
| date | 发布时间 | 会展示在标题旁边,并为归档页起到排序作用 |
| tags | 标签 | 文章的标签 |
| categories | 分类 | 文章的分类 |
| cover | 封面 | 首页文章卡片封面 |
| top_img | 顶图 | 文章顶部 Banner 大图 |
| sticky | 置顶 | 文章置顶,sticky 数值越大越靠前,butterfly 会先按 sticky 再按 date 排序 |
| description | 摘要 | 首页文章摘要、SEO 描述、社交分享摘要、Butterfly 卡片摘要,不存在则会截取正文前几行 |
文章 Front-matter 中的description
在文章顶部的的 Front-matter 里设置 description 字段,修改(_config.butterfly.yml)中的 index_post_content 参数,可以控制首页文章摘要
1 | # Display the article introduction on homepage |
图片点击放大
在_config.butterfly.fly修改以下内容
1 | # Choose: fancybox / medium_zoom |
展示动态图片
优先使用链接形式的文件,本地文件似乎不可用
新增2个 js 文件和1个 css 文件
| 文件 | 说明 |
|---|---|
scripts/livephoto.js |
注册 {% livephoto %} 标签 |
source/js/live-photo.js |
LivePhoto 样式 |
source/css/livephoto.css |
LivePhoto JS 逻辑 |
两个 js 文件的作用不同
| 文件 | 运行时机 | 作用 |
|---|---|---|
scripts/livephoto.js |
Hexo 构建时(服务端) | 注册 {% livephoto %} 标签,把 Markdown 里的标签转成 HTML |
source/js/live-photo.js |
浏览器加载页面时(客户端) | 处理 LivePhoto 的交互逻辑(悬停播放、点击播放、懒加载等) |
在 livephoto.js 的配置文件中可以定义以下选项:
1 | const config = { |
基本语法:
1 | {% livephoto 图片路径 视频路径 %} |
高级用法:
1 | {% livephoto 图片路径 视频路径 "图片描述" "可选标题" "可选宽度" "可选高度" %} |
一行显示两张动图:
1 | <div style="display:flex;justify-content:center;gap:16px;flex-wrap:wrap;align-items:center;"> |
九宫格展示图片
在myblog/source/css/下的custom.css中添加如下样式
由于在版权样式中的页脚背景变透明设置中已经引用了custom.css,所以直接添加就行
1 | /* <div class="image-grid-nine">这个容器生效 */ |
Markdown 这样写就可以
1 | <div class="image-grid-nine"> |
文章插入图片
1

1
{% asset_img image.jpg 这是一张图片 %}
1
<img src="路径" alt="替代文本,图片无法加载时显示" style="zoom:50%;" width="200" height="200" title="图片标题,鼠标悬停在图片上时显示">
由于使用了
post_asset_folder: true会给每个文章单独的资源文件夹在hexo中,按理说应该是使用
,但网页中却无法正常显示。此时应该使用这样的方式来引入图片:
1 {% asset_img image.jpg 这是一张图片 %}插件hexo-renderer-marked解决了这个问题。
可以只用
npm install hexo-renderer-marked --save命令直接安装,之后在_config.yaml中更改配置如下:
1
2
3
4 post_asset_folder: true
marked:
prependRoot: true
postAsset: true之后就可以在文章中愉快的插入图片了。
推荐写:
1
2 
不要写:
1
2 

安装搜索插件
1 | npm install hexo-generator-searchdb --save |
_config.yml 改成:
1 | search: |
enable: true必须有limit可以先去掉(避免兼容问题)
_config.butterfly.yml 改成:
1 | search: |
强制清理缓存(很多人死在这一步)
1 | hexo clean |
图片懒加载插件
1 | npm install hexo-lazyload-image --save |
_config.yml 配置:
1 | lazyload: |
需要在/source/img目录下放置好loading.gif文件
字数统计插件
1 | npm install hexo-wordcount --save |
_config.butterfly.yml 配置:
1 | # Need to install the hexo-wordcount plugin |
统计访问人数 (UV 和 PV)
Butterfly很贴心地集成了不蒜子计数工具,可以统计网 站的访问数据(人数,次数等)
修改主题配置文件_config.butterfly.yml。
1 | busuanzi: |
修改侧边栏
_config.butterfly.yml 配置:
1 | aside: |
版权样式
1 | # 复制设置 |
1 | # 页脚设置 |
页脚背景变透明设置
在你的博客目录里找到(如果没有就新建):
1 | source/css/custom.css |
然后加上:
1 | #footer { |
打开 _config.butterfly.yml,找到:
1 | inject: |
如果你没有自定义 CSS 引入,可以加:
1 | inject: |
如果你用了背景图,是这种配置,那透明 footer 才会有“嵌入感”。否则你只会看到白底(看起来像没变化)
1 | background: /img/bg.jpg |
页脚文字颜色设置
在custom.css中加上以下配置
1 | /* 页脚所有文字统一颜色 */ |
新增自定义页面
进入博客根目录
1. 创建 scripts 目录
1 | mkdir scripts |
2. 创建中间件脚本
文件:/scripts/serve-static.js
1 | const serveStatic = require('serve-static'); |
3. 修改_config.yml
1 | skip_render: |
4.按照格式添加文件
在根目录创建文件存放目录
1 | mkdir -p /source/static/custom |
1 | source |
编辑 _config.butterfly.yml
1 | menu: |
之后就能通过首页右上角访问自定义的页面了
5.以后的用法
以后要加任何独立页面,只需要在 source/static/ 下建文件夹,结构随意:
1 | source/static/ |
Mermaid
使用 mermaid 标签可以绘制 Flowchart(流程图)、Sequence diagram(时序图 )、Class Diagram(类别图)、State Diagram(状态图)、Gantt(甘特图)和 Pie Chart(圆形图)
修改_config.butterfly.yml
1 | # Mermaid |
修改_config.yml
1 | syntax_highlighter: 'highlight.js' |
自动生成sitemap
在Hexo根目录执行
1 | npm install hexo-generator-sitemap --save |
配置 _config.yml
1 | sitemap: |
以后每次 hexo generate 后,sitemap 会被放到最终网站的根目录。
注意 _config.yml配置中有个非常重要的地方,就是URL一定要配置成你的真实域名
1 | url: https://www.example.com |
如果不想让某篇文章进入 sitemap,这个插件支持在文章 Front Matter 中做作如下设置,这样这篇文章就不会进入 sitemap
1 | --- |