使用hexo搭建博客并实现自动化部署

使用hexo搭建博客并实现自动化部署

流程概览

hexo_liucheng.svg

L端 环境准备(以windows端为例)

安装 Node.js

node.js官网:https://nodejs.org/en

进入该站,下载最新版本,都是可视化安装,不做赘述!

:::info 验证安装是否成功

1
code -v

出现版本信息,即表示安装成功
:::

安装 git

git 官网:https://git-scm.com/

进入该站,下载最新版本,都是可视化安装,不做赘述

:::info 验证安装是否成功

1
git --version

出现版本信息,即表示安装成功

git常用命令一览:https://doc.jenkina.cn/,

安装 hexo

hexo 官方文档:https://hexo.io/zh-cn/docs/

在本地找到一个位置,新建文件夹,作为hexo 博客的项目库

进入目录,调出cmd,输入下面的命令

1
2
3
4
5
6
7
8
9
10
# **安装hexo-cli 指令集**
npm install -g hexo-cli
# **安装 hexo 库**
npm install hexo

# **安装完毕后 重启cmd,执行下面命令,创建hexo本地库,<folder> 为指定目录,可以省略**
hexo init <folder>
cd <folder>
npm install

本地库创建完成后,输入hexo s,出现INFO Hexo is running at http://localhost:4000/ . Press Ctrl+C to stop. 说明安装成功。

S端 环境准备(以CentOS 8 为例)

安装git

目前 CentOS yumdnf 工具支持的git版本只到1.8,有下面两种安装方式,任选一个

[yum 直接安装]
1
2
3
sudo yum install git -y
# **验证Git版本**
git --version
[编译安装]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

# **安装相关依赖**
sudo yum install -y curl-devel libexpat1-dev libssl-dev libz-dev libperl-dev
# **下载源代码**
wget https://github.com/git/git/archive/v2.44.0.tar.gz
# **解压源代码**
tar -xzf v2.44.0.tar.gz
# **进入git源代码目录**
cd git-2.44.0
# **编译需要依赖openssl库、expat-devel、autoconf库**
sudo yum install openssl-devel expat-devel
sudo yum install autoconf
# **编译、安装、配置全局变量**
make ./configure
./configure prefix=/usr
make && make install
# **更新PATH环境变量,以便系统可以找到新安装的Git**
export PATH=/usr/git/bin:$PATH
vim /etc/profile
# **在 profile 文件末尾追加配置内容**
export GIT_HOME=/usr/bin/git
export PATH=$GIT_HOME/bin:$PATH
# **刷新 profile 配置文件**
source /etc/profile
# **验证Git版本**
git --version

查看git最新版本:https://git-scm.com/download/linux

S端:配置账户

1
2
3
4
5
6
7
8
9
10
11
# **创建用户组**
groupadd git
# **创建用户 并纳入git组**
useradd jenkin -g git
# **创建密码**
passwd jenkin
# **修改git用户的权限**
chmod 740 /etc/sudoers
# **进入 sudo 命令文件**
vim /etc/sudoers

找到root ALL=(ALL) ALL,在下面添加jenkin ALL=(ALL) ALL

img_2.png

S端:建立、初始化仓库

1
2
3
4
5
6
7
8

# **在/home/jenkin/ 目录下建立并初始化一个仓库 **
cd ~
git init hexo.git

# **更改仓库所属**
chown -R jenkin:git hexo.git/

配置SSH

L端 生成密钥对

1
2
3
4
5
6
# **配置全局变量—— 设置一个name 和一个email  后面上传博客的时候也用得到**
$ git config --global user.email "xxxxxxxxxx@xx.com"
$ git config --global user.name "xxx"

# **创建SSH密钥对**
ssh-keygen -t rsa -b 4096 -C "xxxxxxxxxx@xx.com"

接下来就是一直回车,接受默认设置,此时密钥对会保存在本地
路径:C:\Users\Administrator\.ssh
公钥文件名:id_rsa.pub
私钥文件名:id_rsa

S端 接收密钥

1
2
3
4
5
# **切换用户**
su jenkin
# **在用户根目录创建.ssh文件夹,存放公钥**
cd ~
mkdir .ssh

通过xftp 工具 将本地的公钥文件上传到服务器的/home/jenkin/.ssh目录下

拷贝公钥到authorized_keys 文件内
:::waring
拷贝密钥的步骤,最好是通过代码指令进行,我之前偷懒 用xftp和记事本拷贝公钥,结果卡了好半天都没成功
:::

1
2
3
4
5
6
7
8
9
10
11
# **新增文件,并拷贝公钥内容**
cd ~/.ssh
cp id_rsa.pub authorized_keys
cat id_rsa.pub >> ~/.ssh/authorized_keys

# **设置权限**
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh

# **确保 SSH 相关的文件和目录具有正确的 SELinux 安全标签**
restorecon -Rv ~/.ssh

测试本地免密登录服务器:在L端,调出Git Bash 并输入

1
2
ssh -v git@<ip地址>
# **出现 last login; last sucessful;welcome 等字样,说明连接成功**

配置钩子文件

因为git库不会以文件的形式正常显示在hexo.git仓库内,所有我们还需要将git仓库接收的文件,通过checkout或clone 功能导出到自定义的目录下,方便后续nginx服务器配置网站

而 git 所附带hook功能,可以实现自动化运作.其中post-receive 就是可以在客户端push 文件后进行自动化的脚本文件。

我们可以通过这个特性,来实现网站的自动化更新。

1
2
3
4
5
6
# **S端 git 组用户下**
cd ~/hexo.git/.git/hooks
touch post-receive
# **给予执行权限**
chmod +x post-receive
vim post-receive

有两个脚本,哪个可以用哪个

:::code-group

[checkout 法]
1
2
3
#!/bin/bash
git --work-tree=/home/jenkin/hexo --git-dir=/home/jenkin/hexo.git checkout -f

[clone 法]
1
2
3
4
5
6
#!/bin/bash
REPO_PATH="/home/jenkin/hexo.git" WORK_TREE_PATH="/home/jenkin/hexo"
if [ -d "$WORK_TREE_PATH" ]; then rm -rf "$WORK_TREE_PATH"
fi
git clone --bare "$REPO_PATH" "$WORK_TREE_PATH"

:::

配置hexo 并上传到 Git 仓库

在L 端打开Hexo 项目 修改_config.yml文件中的deploy

1
2
3
4
5
deploy:
type: git
repo:
github: jenkin@<ip地址>:/home/jenkin/hexo.git
branch: master

在L端 hexo项目目录下 进入终端,依次输入

1
2
3
4
5
6
# **清除之前生成的静态文件  hexo c**
hexo clean
# **生成静态文件 hexo g**
hexo generate
# **部署到 Git 仓库 hexo d**
hexo deploy

部署到Git仓库出错解决

在hexo deploy 过程中,出现下图所示,上传无误
上传成功样例

常见错误解决

::: tip 情况1

1
2
3
# **上传代码时出现**
fatal: sha1 file '<stdout>' write error: Broken pipe
error: remote unpack failed: unable to create temporary object directory

解决方案:

1
2
# **先更改文件夹所有权**
sudo chown -R jenkin:git hexo.git

:::

::: tip 情况2

1
2
# **上传代码时出现**
! [remote rejected] HEAD -> master (branch is currently checked out)

解决方案:在 hexo.git/ 目录下 的config文件中 添加以下内容

1
2
[receive]
denyCurrentBranch = ignore

:::

::: tip 情况3

git push -u origin master 出现问题:

1
2
error: src refspec master does not match any
error: failed to push some refs to 'git@github.com:xxxxxxxx/xxx.git'

解决方法

1
2
3
4
5
6
7
# **本地库如果是空的,则需要创建个文件**
git add .
git commit -m "第一次提交"
git push -u origin master

# **如果不是上面的问题,尝试下面的代码**
git pull --rebase origin master # **拉取远程分支的更改**

:::

S端 仓库验证、钩子验证 及nginx服务器的配置

仓库验证

进入到仓库目录下 输入git status 出现一骡子静态文件,说明上传成功

hook 验证

通过xftp或者命令行的方式,看下自己导出的目录有没有生成,没有生成heox 目录,说明钩子未响应,问下ChatGPT 给出一些解决方案,如果仍然无法解决问题,那么就手动执行钩子文件

1
2
cd /home/jenkin/hexo.git/
./.git/hooks/post-receive

nginx 配置

会linux 命令的,配置nginx 不是问题
不会linux 命令的,用宝塔面板‘小皮面板,的可视化操作,将 /home/jenkin/hexo 目录作为网站的根目录,同样不是问题
该板块在这里不做赘述,


希望本文章能帮您顺搭建自己的专属博客。欢迎留言交流。

–The End–

使用hexo搭建博客并实现自动化部署

http://jenkina.cn/2023/10/29/fuwuqi/hexo_push/

作者

Jenkin Liu

发布时间

2023-10-29

更新时间

2024-09-12

许可协议

评论