零成本搭建Hexo博客网站
条评论前言
官方文档:Hexo
参考教程:
- 静态网站搭建笔记 GitHub Page+Hexo - 知乎 (zhihu.com)
- 【2023最新版】Hexo+github搭建个人博客并绑定个人域名_hexo部署github绑定自定义域名-CSDN博客
本地博客搭建
流程概括:安装Git、安装Node.js、安装Hexo并部署本地仓库。
安装Git工具
Git 可以将本地代码推送到远程仓库,可以在开发中管理和追踪代码版本,方便团队协作和代码的备份。
打开 Git - Downloading Package (git-scm.com),选择 64-bit Git for Windows Setup下载安装包。
安装时无脑下一步就行。在 Choosing the default editor used by Git 这一步选择 Use Visual Studio Code as Git’s default editor。
安装完可以在cmd中输入git –version指令检查是否安装成功。
安装Node.js
Node.js 是 Hexo 的运行环境,安装 Node.js 后可以在你的计算机上运行 Hexo。
打开 Node.js (nodejs.org),下载左边的LTS版本。无脑安装即可。
在cmd中输入以下指令检查是否安装成功,返回版本信息。
1 | node -v |
安装Hexo并部署本地仓库
Hexo 是一个静态网站生成器,在使用 Markdown 编写博客内容后,可以用指令生成对应的静态网页。
配置 npm(Node 包管理器)的镜像源为淘宝 NPM 镜像以提升国内下载速度,有魔法可忽略。
1 | npm config set registry "https://registry.npm.taobao.org" |
安装hexo命令行工具(-g 表示全局安装,整个计算机都可用,可以在cmd中直接调用相关命令。)
1 | npm install hexo-cli -g |
进入自定义文件路径,初始化hexo。两种写法二选一即可。
1 | hexo init blog && cd blog |
安装项目所需的依赖 > npm 会读取项目中的 package.json 文件,并安装该项目所依赖的所有包。
1 | npm install |
配置 Git 全局用户信息 > 当提交代码时,Git会以此用户为代码提交的作者名称,此邮箱用于关联提交记录。
1 | git config --global user.name "GitHub用户名" |
这样就创建好了一个本地的博客,用的是Hexo的默认主题,后面再来安装好看的主题。
执行以下指令就可以在本地看见自己的博客了
1 | hexo g // 生成静态页面 |
本地博客部署到Github
创建Github Pages远程仓库
注册 Github 账号并登录,进入个人Github主页。
点击上方右侧**+**号->New Repository,新建一个仓库名和自己 Github 账号 ID 相同的仓库并创建。
例:若Github账号为lumegnde123,则新建仓库名为lumengde123.github.io。
生成SSH密钥
使用 SSH 协议与 GitHub 进行通信,更加安全地来验证你的身份,还免输入密码。
在cmd中输入以下指令,多个回车直到出现代码表情。
1 | ssh-keygen -t rsa -C "你的GitHub注册邮箱" |
该指令用 RSA 加密算法生成了SSH密钥,并将你的 GitHub 注册邮箱作为注释添加到生成的密钥中。
打开C:\Users\Administrator.ssh,系统在这里生成了一对 SSH 密钥:本机私人密钥 id_rsa 和公共密钥 id_rsa.pub。
公钥 可添加到 GitHub 或其他 Git 托管服务账户上,以便能使用 SSH 协议与服务器进行安全的通信和操作。
私钥 则留存在自己的计算机上,用于与公钥配对进行身份验证。
打开公钥 id_rsa.pub ,复制里面所有内容。
在Github中,点击头像->Settings->SSH and GPG keys->New SSH key,title随意填,下面粘贴ssh公钥并保存。
此时就配置好了本地计算机和Github的SSH连接。
当后面使用 hexo d 部署博客时,将会用SSH 协议与 GitHub 进行通信,GitHub 将会根据你计算机提交的私钥与你账户中存储的公钥进行匹配。只有在密钥匹配成功的情况下,才能够顺利地进行诸如推送代码、拉取仓库等 Git 操作。
检验本地 SSH 配置是否正确及能够成功连接到 GitHub 的 Git 服务器
1 | ssh -T -v git@github.com |
如果报错…没事,这是网络问题,下面的步骤会解决。
1 | ssh: connect to host github.com port 22: Connection timed out |
博客部署到Github上
打开博客根目录的_config.yml文件,分别修改url和deploy的内容
1 | url: https://你的github账号.github.io |
branch默认是master改为main,现在github新建的仓库默认分支都是main了。修改后Hexo推送时会将生成的网站静态文件推送到Github仓库的main主分支。
安装 hexo-deploy-git 插件,就可以使用Hexo的推送命令
1 | npm install hexo-deployer-git --save |
执行hexo三连指令来推送博客静态文件
1 | hexo clean //清空上次推送时生成的文件,每次推送前删一下。 |
当执行hexo deploy时,Hexo 会将/public
目录中的文件推送至配置文件_config.yml
中指定的远端仓库和分支中,并且完全覆盖该分支下的已有内容。
第一次hexo d会问个问题,必须填yes,然后按回车等一会。
当出现INFO Deploy done: git
提示时,代表推送成功。
这样本地Hexo博客就同步到Github上了。可以在浏览器搜索 你的github昵称.github.io
来访问你的博客网站。(国内访问Github比较慢,要多等它加载一会)
如果在hexo d之后等了很久不成功,报错 Error: Spawn failed,请往下看。
推送时报错问题及解决方法
报错代码为:
1 | ssh: connect to host github.com port 22: Connection timed out |
如果推送时一直卡着,然后报这个错,原因是连接不到Github,连接超时。
解决方法:
参考链接 > 关于本地git通过ssh链接github时 time out问题的解决方法
打开生成ras密钥的文件路径即C:\Users\Administrator\.ssh
文件夹,在这里新建config
文件。
打开config
,填入以下内容:
1 | Host github.com |
这样配置的目的是当我们访问github.com
的时候,能自动转换成ssh.github.com
,后者才是我们要启动的。
然后再来测试一下:
1 | D:\Coding\blog>ssh -T git@github.com |
出现这个提示说明消息响应正常:成功通过SSH进行了身份验证,但GitHub不提供直接的shell访问。
此时再执行Hexo三连
,就可以顺利推送了。
备用方法:修改hosts通过http来push。参考 GitHub push失败-Failed to connect to github.com port 443: Timed out
使用自己的域名
xxx.github.io
这个域名不太好看。所以我们可以将其绑定到我们自己买的域名上。
想要输入自己的域名自动跳转到博客首页,可以先去阿里云购买域名,实名认证,然后将该域名和博客项目进行绑定。
- 百度打开阿里云首页,搜索框搜索域名注册,购买自己喜欢的域名,然后实名认证
- 回到阿里云首页,打开头像左侧的控制台页面,在搜索框搜索域名,进入域名控制台
- 在域名列表->解析 里面可以为域名添加解析记录
以下内容参考自 为 Github Pages 绑定域名 - cometeme的个人博客。
修改 DNS 解析的数据
打开cmd,输入指令查看自己的博客网址对应的DNS的IPV4地址
1 | nslookup -query=A xxxxxx.github.io |
添加域名解析记录
CNAME | www | 默认 | xxx.github.io |
---|---|---|---|
A | @ | 默认 | IPV4地址 |
这里可以把四个IPV4地址都添加进去,即四个A记录。
为 Github Page 设置 CNAME
1 | 打开Github进入该项目的仓库,点击 Settings->Pages ->Custom domain,输入域名并保存。注意要带上www前缀。 |
这个方案有问题,由于本地的博客没有CNAME,如果本地博客hexo d推送后,会覆盖项目仓库,即会删除CNAME。
所以还需要同时在本地的 /source
文件夹里也创建个CNAME并填入www前缀域名。
Hexo基本操作
本地编写博客文章,查看文件结构需要下载文本编辑器进行
辅助,例如:VSCode、Sublime Text 3、Typora
以下内容参考自:写作 | Hexo 官方文档
创建新文章/页面/草稿
Hexo 有三种默认布局:post
、page
和 draft
;分别为文章、页面、草稿;分别保存在source/_posts
、source
、source/_drafts
文件夹中。
文章的布局(layout),默认为 post
,可以通过修改 _config.yml
中的 default_layout
参数来指定默认布局。
如果你不希望一篇文章(post/page)使用主题处理,请在它的 front-matter 中设置 layout: false
基本语句结构
1 | hexo new [layout] <title> |
创建新文章
1 | hexo new 笔记01 |
创建新页面
1 | hexo new page 页面01 |
创建新草稿
1 | hexo new draft 草稿01 // 会将草稿保存在`source/_drafts` |
草稿默认不会显示在页面中,您可在执行时加上 --draft
参数,或是在 _config.yml
中把 render_drafts
参数设为 true
来预览草稿。
发布草稿 > publish的前提是该草稿存在,发布成为post
1 | hexo publish 草稿01 |
文章降为草稿
1 |
|
Front-matter 文章/页面 配置
详细内容:Front-matter | Hexo
Front-matter 是md文件最上方以 ---
分隔的区域,使用变量来修改文章或页面配置,例如:
1 |
|
Page Front-matter
作用于页面的 Front-matter
1 |
|
参数详解
写法 | 解释 |
---|---|
title | 【必需】页面标题 |
date | 【必需】页面创建日期 |
type | 【必需】标签、分类和友情链接三个页面需要配置 |
updated | 【可选】页面更新日期 |
description | 【可选】页面描述 |
keywords | 【可选】页面关键字 |
comments | 【可选】显示页面评论模块 (默认 true) |
top_img | 【可选】页面顶部图片 |
mathjax | 【可选】显示mathjax (当设置mathjax的per_page: false时,才需要配置,默认 false) |
katex | 【可选】显示katex (当设置katex的per_page: false时,才需要配置,默认 false) |
aside | 【可选】显示侧边栏 (默认 true) |
aplayer | 【可选】在需要的页面加载aplayer的js和css,请参考文章下面的音乐 配置 |
highlight_shrink | 【可选】配置代码框是否展开 (true/false) (默认为设置中highlight_shrink的配置) |
random | 【可选】配置友情链接是否随机排序(默认为 false) |
Post Front-matter
作用于文章的 Front-matter
1 |
|
参数详解
写法 | 解释 |
---|---|
title | 【必需】文章标题 |
date | 【必需】文章创建日期 |
updated | 【可选】文章更新日期 |
tags | 【可选】文章标签 |
categories | 【可选】文章分类 |
keywords | 【可选】文章关键字 |
description | 【可选】文章描述 |
top_img | 【可选】文章顶部图片 |
cover | 【可选】文章缩略图 (如果没有设置top_img,文章页顶部将显示缩略图,可设为false/图片地址/留空) |
comments | 【可选】显示文章评论模块 (默认 true) |
toc | 【可选】显示文章TOC (默认为设置中toc的enable配置) |
toc_number | 【可选】显示toc_number (默认为设置中toc的number配置) |
toc_style_simple | 【可选】显示 toc 简洁模式 |
copyright | 【可选】显示文章版权模块 (默认为设置中post_copyright的enable配置) |
copyright_author | 【可选】文章版权模块的文章作者 |
copyright_author_href | 【可选】文章版权模块的文章作者链接 |
copyright_url | 【可选】文章版权模块的文章连结链接 |
copyright_info | 【可选】文章版权模块的版权声明文字 |
mathjax | 【可选】显示mathjax (当设置mathjax的per_page: false时,才需要配置,默认 false) |
katex | 【可选】显示katex (当设置katex的per_page: false时,才需要配置,默认 false) |
aplayer | 【可选】在需要的页面加载aplayer的js和css,请参考文章下面的音乐 配置 |
highlight_shrink | 【可选】配置代码框是否展开 (true/false) (默认为设置中highlight_shrink的配置) |
aside | 【可选】显示侧边栏 (默认 true) |
abcjs | 【可选】加载 abcjs (当设置 abcjs 的 per_page: false 时,才需要配置,默认 false) |
Hexo Markdown 语法:Hexo Markdown 简明语法手册
创建标签页和分类页
只有文章
支持分类和标签,可以在 Front-matter
中设置。
1 | categories: |
标签页
cmd
进入你的 Hexo 博客的根目录,输入以下指令为标签创建页面
1 | hexo new page tags |
然后找到 source/tags/index.md
这个文件,为其添加参数type
、orderby
、order
1 |
|
参数 | 解释 |
---|---|
type | 【必须】页面类型,必须为 tags |
orderby | 【可选】排序方式:random/name/length |
order | 【可选】排序次序:1, asc升序;-1, desc降序 |
分类页
cmd
进入你的 Hexo 博客的根目录,输入以下指令为标签创建页面
1 | hexo new page categories |
然后找到 source/categories/index.md
这个文件,为其添加参数type: "categories"
1 |
|
Hexo插件大全
anzhiyu 主题安装
butterfly主题需要自己魔改美化,太费时间了,更适合自定义魔改玩家。
anzhiyu主题是基于butterfly进行美化魔改的,一切都配置好了,更推荐。
并且,anzhiyu主题的官方文档写的非常详细,可以根据需要自定义博客网站内容。
主题效果:安知鱼 - 生活明朗 万物可爱 (anheyu.com)
安装教程:安知鱼主题 | 官方文档
缺点:文件多,加载比较慢,要10秒左右。
butterfly 主题安装
butterfly界面比较原始,但是可以根据个人爱好自定义魔改。
cmd
进入博客项目根目录,下载主题。
1 | git clone -b master https://github.com/jerryc127/hexo-theme-butterfly.git themes/butterfly |
安装pug 和 stylus 渲染器。 Pug(以前的Jade)用于简化HTML模板的编写,而Stylus则用于更简洁、更灵活地书写CSS样式。
1 | npm install hexo-renderer-pug hexo-renderer-stylus --save |
修改项目根目录下的_config.yml文件(称为站点配置文件),开启主题。
1 | # Extensions |
为了减少升级主题带来的不便,可以复制一份themes/butterfly/
中 config.yml
的内容到根目录的_config.landscape.yml
里,并重命名为 _config.butterfly.yml
。
Hexo会自动合并主题中的config.yml
和 _config.butterfly.yml
,如果存在同名配置,会优先使用config.butterfly.yml
的配置。
所以像和博客网址相关联的固定资料可以设置在_config.yml中,比如博客的标题、作者信息和邮箱等等资料;而和主题样式相关的配置放在 _config.butterfly.yml
中,方便以后更换主题。
美化教程系列:Butterfly 安装文档(二) 主题页面
nexT 主题安装
nexT是Hexo中Star最多的主题,整体风格比较简洁,没有那么多花里胡哨的插件和功能。
cd
进入你的博客根目录,执行以下指令安装next主题:
1 | git clone https://github.com/theme-next/hexo-theme-next themes/next |
打开_congif.yml
,将theme
改为next
,同样把next主题配置文件提出来。 然后Hexo三连可以看到博客主题更换为了next,但是需要稍微美化一下。自行百度。
注意:buttefly的标签外挂和部分插件无法在nexT使用,并且hexo g
编译无法通过,还需要改原文,所以我放弃了该主题。
maupassant主题安装
本文标题:零成本搭建Hexo博客网站
文章作者:德德
发布时间:2024-06-14
最后更新:2024-06-14
原始链接:https://lumengde123.github.io/posts/ec17.html
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 CN 许可协议。转载请注明出处!