Hexo 是一个快速、简洁且高效的博客框架。Hexo 使用 Markdown(或其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态网页。与其他博客框架相比,Hexo挂在github pages上,不需要购买服务器以及域名备案等操作,对于只想搭建一个个人Blog但不想花太多精力在服务器维护上面的,Hexo是最好的选择。

具体可以参照Hexo官网

准备环境

Node.js

Hexo是基于Node.js构建的,中文官网:去下载

选择版本node.js版本18-20左右。(不要太新也不要太旧)

如果主题想使用Sakura的,选择版本node.js版本12-14!!!

根据安装引导完成安装,打开命令行输入node -v验证是否安装成功。

node.js默认配置npm,因此我们不需要单独下载配置npm。

安装后便是配置环境变量,新建用户环境变量,变量名命名为NODE_PATH ,变量值为你的Node.js的安装路径,之后点击确定,在系统变量中找到“ Path ”,添加Nodejs全局文件夹,也就是刚才新建的 “ node_global ”文件夹的绝对路径。

Git

Git用于将本地项目推送到Github Pages上。

Git下载:去下载,根据安装引导完成安装。

下载的Git版本注意与Node.js兼容

选择安装组件处勾选与下图一样的复选框。

image-20241126130248482

决定初始化新项目(仓库)的主干名字:这里我们选择main,因为github现在默认分支已经改为main。

https://blog.csdn.net/cat_bayi/article/details/128725230安装教程可以跟着这篇文章走一遍。

创建仓库

创建一个公开的仓库,名称为用户名/用户名.github.io(例如aliplin/aliplin.github.io)。

生成和添加SSH:

我们在github上push项目的时候,如果走https的方式,每次都需要输入账号密码,非常麻烦。而采用ssh的方式,就不再需要输入,只需要在github自己账号下配置一个ssh key即可。

检查是否已经存在ssh key(存在则调到第三步)
cd ~/.ssh
ls
//看是否存在 id_rsa 和 id_rsa.pub文件,如果存在,说明已经有SSH Key
生成ssh key
ssh-keygen -t rsa -C "your_email@example.com"
获取ssh key 公钥内容
cd ~/.ssh
cat id_rsa.pub
添加公钥

github–>settings–>SSH and GPG keys–>new SSH key

将公钥复制粘贴上去即可。

验证
ssh -T git@github.com

显示出现Hi xxx!You’ve successfully authenticated…即成功

设置成功后,即可不需要账号密码clone和push代码

注意之后在clone仓库的时候要使用ssh的url,而不是https!

安装Hexo

在电脑中某个位置创建博客根目录,这里我在D盘根目录下创建了Blog文件夹。

右键博客根目录,选择“Open Git Bash here”,输入

npm install hexo-cli -g

终端执行hexo -version出现 Hexo 版本号,说明安装成功。

本地建站

初始化

hexo init ./
npm install

_config.yml 存放的是博客配置信息, source/_posts 是存放文章的地方。

hexo三件套(本地版):

hexo clean # 清除缓存文件,建议写完文章后执行一次
hexo g # 生成 public 文件夹,写完文章执行
hexo s # 启动 hexo 服务

浏览器访问 http://localhost:4000/ 出现下图说明启动成功。

部署到github

安装Git 插件

npm install hexo-deployer-git --save

打开博客目录下的_config.yml,拉到最后,填写deploy模块。

# Deployment
## Docs: https://hexo.io/docs/one-command-deployment
deploy:
type: git
repo: git@github.com:aliplin/aliplin.github.io.git
branch: main

注意更换用户名和仓库名。

部署三件套:

hexo c && hexo g && hexo d  # hexo d 表示执行部署

hexo d要关闭网络加速器【steam++等】才能部署成功,因为他们可能会修改网络流量,甚至可能与 SSL证书验证机制发生冲突,导致失败。

执行成功可以通过 你的用户名.github.io 来访问博客了。

安装问题

  • 本地部署和github部署效果不一样:

https://blog.csdn.net/clearloe/article/details/139879493

  • 如何将本地项目推送到github的main分支上:

将要推送的文件git打开

git init
git remote add origin https://github.com/aliplin/aliplin.github.io.git#设置连接
git add .
git commit -m "备注"
git push -u origin main
  • 本地合并时遇到refusing to merge unrelated histories的错误

https://blog.csdn.net/junruitian/article/details/88361895

Github Action自动化部署

Github Action是 GitHub于2018年10月推出的一个CI\CD服务。

每次部署Hexo都需要运行指令三件套,随着文章越来越多,编译的时间也随之越来越长,通过Github Action,我们只需要在每次完成博客的编写或修改以后,将改动直接push到远程仓库,之后的编译部署的工作统统交给CI来完成即可。
在网站搭建完成后,我还是推荐各位先尽早学习github action,首先,它的作用很明显,可以把最耗时的hexo g -d过程放到线上。而且每次git三部曲只需要提交增量更新的内容,节省大量时间,让我们可以专注于编写博客产出更多优质内容。而且配置github action时需要上传博客源码到git仓库,这一步本身就保证了你能实现源码的版本管理,这样后面即使出了错也可以立刻回滚补救。

在博客根目录下找到.github/workflows文件夹,在内创建文件autodeploy.yml,写入内容(自行修改对应分支):

# 当有改动推送到master分支时,启动Action
name: 自动部署

on:
push:
branches:
- main #202010月后github新建仓库默认分支改为main,注意更改

release:
types:
- published

jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: 检查分支
uses: actions/checkout@v2
with:
ref: main #202010月后github新建仓库默认分支改为main,注意更改

- name: 安装 Node
uses: actions/setup-node@v1
with:
node-version: "20.18.0" #action使用的node版本,建议大版本和本地保持一致。可以在本地用node -v查询版本号。

- name: 安装 Hexo
run: |
export TZ='Asia/Shanghai'
npm install hexo-cli -g
- name: 缓存 Hexo
uses: actions/cache@v1
id: cache
with:
path: node_modules
key: ${{runner.OS}}-${{hashFiles('**/package-lock.json')}}

- name: 安装依赖
if: steps.cache.outputs.cache-hit != 'true'
run: |
npm install --save
- name: 生成静态文件
run: |
hexo clean
hexo generate
- name: 部署 #此处master:master 指从本地的master分支提交到远程仓库的master分支,若远程仓库没有对应分支则新建一个。如有其他需要,可以根据自己的需求更改。
run: |
cd ./public
git init
git config --global user.name '${{ secrets.GITHUBUSERNAME }}'
git config --global user.email '${{ secrets.GITHUBEMAIL }}'
git add .
git commit -m "${{ github.event.head_commit.message }} $(date +"%Z %Y-%m-%d %A %H:%M:%S") Updated By Github Actions"
git push --force --quiet "https://${{ secrets.GITHUBUSERNAME }}:${{ secrets.GITHUBTOKEN }}@github.com/${{ secrets.GITHUBUSERNAME }}/${{ secrets.GITHUBUSERNAME }}.github.io.git" master:ph-pages
#git push --force --quiet "https://${{ secrets.TOKENUSER }}:${{ secrets.CODINGTOKEN }}@e.coding.net/${{ secrets.CODINGUSERNAME }}/${{ secrets.CODINGBLOGREPO }}.git" master:ph-pages #coding部署写法,需要的自行取消注释
#git push --force --quiet "https://${{ secrets.GITEEUSERNAME }}:${{ secrets.GITEETOKEN }}@gitee.com/${{ secrets.GITEEUSERNAME }}/${{ secrets.GITEEUSERNAME }}.git" master:ph-pages #gitee部署写法,需要的自行取消注释

上传具体教程参考:

https://akilar.top/posts/f752c86d/

可能遇到的情况:

自动化部署后,博客变成一片空白,原因可能是输入git add .时出现waring:

warning: in the working copy of 'package-lock.json', LF will be replaced by CRLF the next time Git touches it
warning: in the working copy of 'package.json', LF will be replaced by CRLF the next time Git touches it
warning: in the working copy of 'source/shuoshuo/index.md', LF will be replaced by CRLF the next time Git touches it

原因是git提示LF会被替换为CRLF。

LF和CRLF都是换行符,但LF(Line Feed)是Unix/Linux系统使用的换行符,而CRLF(Carriage Return + Line Feed)是Windows系统使用的。当Git在Windows上处理文件时,默认会将LF转换为CRLF,以确保文件在Windows上正确显示。反之,在Unix/Linux系统上,Git可能会将CRLF转换为LF。

现在的问题是,当我在Windows上使用Git时,Git检测到文件中的换行符是LF,它会在提交时自动转换为CRLF,或者在工作区转换回来。这会导致一些问题,尤其是在跨平台协作时,如果不同开发者的系统配置不同,可能会出现换行符不一致的情况。

这通常是因为Git的core.autocrlf配置被设置为true,这是Windows的默认设置。

我们修改 Git 全局配置,提交时统一转 LF,检出时不转换

git config --global core.autocrlf input

再进行git add .三件套即可

git add .
git commit -m "github action update" #引号内的内容可以自行更改作为提交记录。
git push origin main