摘要生成中...
AI 摘要
Hunyuan-lite

前言

我为什么要从 WordPress 换为 Hexo

一个关键字:卡!WordPress 太卡了,十分笨重和不方便。对于小小服务器来说简直是难以承受。况且对于内容为主的博客,WordPress 显得过于臃肿,有大量插件可以用,也意味着你要看更多的广告和垃圾信息。此外,Wordpress 用户数量多,社区庞大,但社区内容鱼龙混杂,充斥大量商业化甚至无用的信息,不够纯粹,质量偏低

WordPress 对于小白来说好上手,无脑后台管理。而拥有一点点编程经验的我完全可以凭一点点知识储备和动手能力砍掉多余的,无用的东西。Hexo 相较于 Wordpress,更轻,静态页面对 SEO 更友好,文章数据管理更方便、更让人贴心。

实现思路和原理

整个过程实现的原理可以用下图表示。

preview

可参照下文顺序进行配置。

本地配置准备

Hexo

本地启用 Hexo:按照官方文档搭建基本环境(Node.js,Git),在本地尝试部署并熟悉 hexo 的写作流程,了解配置文件结构,此处不再赘述。官方文档 | Hexo

在本地 Hexo 站点目录下安装 hexo-deployer-git 插件:

1
npm install hexo-deployer-git --save

配置 Git

如果是第一次配置 SSH,则配置一下 git 的 usernameemail

1
2
git config --global user.name <your_name>
git config --global user.email <your_email>

配置 SSH 密匙

为了使本地可以跟远程的 GitHub 建立联系,需要在本地配置 SSH 密钥,这样我们就可以在本地直接提交代码到 GitHub 上或者远端 Git 仓库。

之后生成 SSH 密钥:

1
2
3
4
5
6
# 两种方式,供参考:
# 系统密钥:生成默认RSA密钥(默认2048位、默认文件名id_rsa,-C仅添加邮箱注释,无自定义文件名)
ssh-keygen -t rsa -C <your_email>

# 另外生成专用密钥(4096位高强度加密,-f指定固定文件名deploy_key)
ssh-keygen -t rsa -b 4096 -f deploy_key

如果不需要设置密码的话,连续三个回车就好了。运行命令成功后,会生成公钥和私钥文件:

  • 不带 -f 参数的,生成的是系统密钥,文件默认生成在 C:\Users\用户名\.ssh\ 目录下,公钥名为 id_rsa.pub,私钥名为 id_rsa
  • -f 参数的,生成的是专用密钥,文件默认生成在终端目录下,生成时不污染系统密钥。

复制好公钥后面要用。

服务器端操作

如果你刚刚重新初始化阿里服务器云盘,可能会连接报错。具体解决方法请看文末。

Nginx

安装 Nginx 并配置好域名(如果有)。具体操作详见我的 站内文章Nginx 的安装与反向代理配置

Git

Git 的安装与用户创建

1
2
3
4
5
6
7
# 安装git
yum install git
# 创建git账户
adduser git
# 添加Git账户权限
chmod 740 /etc/sudoers
vim /etc/sudoers

在 vim 编辑模式下,这个地方加上一行 git ALL=(ALL) ALL

1
2
3
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
git ALL=(ALL) ALL

执行:

1
2
chmod 400 /etc/sudoers  # 改回权限
sudo passwd git # 设置 git 账户密码

输两次密码即可:

1
2
3
4
Changing password for user git.
New password: # 输的时候是看不到的
Retype new password:
passwd: all authentication tokens updated successfully.

执行:

1
2
3
4
5
6
7
su git	# 切换至 git 用户
# 创建 ~/.ssh 文件夹和 ~/.ssh/authorized_keys 文件,并赋予相应的权限
mkdir ~/.ssh
vim ~/.ssh/authorized_keys
然后把本地公钥粘贴在 authorized_keys 文件夹里
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh

~/.ssh/authorized_keys 文件可以粘贴多个公钥,一行一个。

以上操作我们都是切换到服务器名为 git 用户后进行的

具体而言,authorized_keys 文件指的是:/home/git/.ssh/authorized_keys,不要粘错。

这里提一嘴,有时候切换不了 git 用户,即 su git 执行不了。其实也没事,就是知道 git 用户目录是 /home/git/ 就行,即上面命令中的 ~ 指的是 /home/git/

在本地电脑中,终端执行:

1
ssh -v git@<你的服务器主机IP>

如果能免密登录,那就成了。

仓库创建与钩子创建

保证之前在 Nginx 配置里的网站根目录的权限:

1
2
chown -R git:git <网站根目录>
chmod -R 755 <网站根目录>

创建仓库:

1
2
3
4
5
mkdir repo # 我选择在git的用户目录下创建
cd repo # 创建空白的git仓库
git init --bare hexo.git # 创建一个空白的 git 仓库
chown -R git:git hexo.git # 注意保证权限
vim ~/repo/hexo.git/hooks/post-receive

在 post-receive 里边输入:

1
2
#!/bin/bash
git --work-tree=/var/www/uuanqin.top --git-dir=/home/git/repo/hexo.git checkout -f

以上内容建议手打。可以看出第一个参数对应的是网站根目录,第二个参数是代码仓库目录。

添加权限:

1
2
chown -R git:git hexo.git/hooks/post-receive
chmod +x hexo.git/hooks/post-receive

本地上传到仓库(本地发布)

Hexo 配置

进入本地电脑 hexo 博客的根目录,编辑站点配置文件 _config.yml ,找到 deploy,修改成以下:

1
2
3
4
5
deploy:
type: git
#repo改为repo: git@<服务器IP>:<服务器端的仓库>
repo: [email protected]:/var/repo/hexo.git
branch: master

最后在本地电脑 hexo 博客的根目录执行命令:

1
2
hexo clean
hexo d -g

deploy 不需要输入 git 账户密码。如果还提示需要输入,说明之前配公钥的步骤没有成功。

出现错误记得检查服务器端权限问题:

1
2
chown -R git:git <你的仓库>
chown -R git:git <网站根目录>

在浏览器输入网址即可。

image-20230409160319825

嫌每次都输入两个命令麻烦,可以在 package.json 中添加 npm 脚本:

1
2
3
4
"scripts": {
"publish": "hexo clean && hexo g -d",
"start": "hexo clean && hexo g && hexo s"
}

下次执行时可以直接:

1
npm run publish

这样,当别人访问博客网站时就能看到最新的内容。

其他问题

SSH 连接问题

服务器云盘初始化后,再次使用 SSH 连接时会有 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! 的提示。解决方法:

1
ssh-keygen -R <之前连接时的网段IP>

再次 SSL 连接:

1
ssh root@<服务器公网IP>

出现一句:

Are you sure you want to continue connecting (yes/no)?

输入:yes 回车

参考:问题解决——SSH时出现WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!_口袋里のInit的博客-CSDN博客

钩子不起作用

出现已经推送到服务器但是钩子不起作用,且出现 cannot run hooks/post-receive: No such file or directory 的提示:

请重新创建并 手打 post-receive 文件,保证该文件有可执行权。

1
2
chmod +x post-receive
chown -R git:git post-receive

参考: cannot run hooks/post-receive: No such file or directory_渣渣林的博客-CSDN博客

hexo d 命令报错

hexo d 命令报错 ERROR Deployer not found: git

解决方案:这是因为没安装 hexo-deployer-git 插件,在站点目录下输入下面的插件安装就好了:

1
npm install hexo-deployer-git --save

然后在使用 Hexo d 命令就可以推送了。

参考:hexo d命令报错 ERROR Deployer not found: git_蓝蓝223的博客-CSDN博客

更多

双线部署详看这篇文章:站内文章实现网站国内外分流(境外接入 Cloudflare)

如果这套发布方案用顺手后,还可以进行 GitHub Actions 改造:站内文章把博客发布交给 GitHub Actions

本文参考