hexo

A) Hexo 在私人服务器部署

Git钩子自动部署

Hexo 是啥?

简单来说,Hexo 是一个快速、简洁且高效的静态博客框架。

核心概念

基于 Node.js:Hexo 是用 JavaScript 编写的,你需要先在本地电脑上安装 Node.js 环境才能使用它。

静态站点生成器:这是最关键的一点。Hexo 的核心工作是把你用 Markdown 语法写的文章和一些模板文件,转换成一整套纯粹的 HTML、CSS、JavaScript 静态文件。

对比动态博客(如 WordPress):WordPress 需要 PHP 环境、数据库(如 MySQL)和 Web 服务器(如 Apache/Nginx)协同工作。当用户访问你的博客时,服务器需要动态地从数据库里查询数据,然后组合成网页显示出来。

Hexo 的工作方式:你只需要在本地电脑上写好文章,然后通过一条命令(如 hexo generate),Hexo 就会把所有的文章和页面都“编译”好,生成最终的静态网站。你只需要把这些静态文件上传到任何能存放静态文件的服务器或平台上即可。

Hexo 的主要工作流程

使用 Hexo 搭建博客的典型步骤是:

安装:通过 npm(Node.js 的包管理器)全局安装 Hexo:npm install -g hexo-cli

初始化:在你的项目目录下执行 hexo init my-blog,Hexo 会创建一个包含基本目录结构的博客文件夹。

写文章:使用命令 hexo new “我的第一篇文章” 创建一篇新的 Markdown 文件,然后在生成的 .md 文件里用 Markdown 语法书写内容。

本地预览:执行 hexo server 命令,就可以在浏览器里通过 http://localhost:4000 查看博客效果。

生成静态文件:文章写好后,执行 hexo generate(可简写为 hexo g),生成静态网站文件,它们会保存在 public 文件夹里。

部署:执行 hexo deploy(可简写为 hexo d),可以将 public 文件夹中的内容一键部署到远程平台(最常用的是 GitHub Pages 或 Gitee Pages)。

将Hexo安装到自己的服务器上是一个很棒的选择,它能让你完全掌控自己的博客平台。现在整理了详细的步骤和方案。
这种方法利用 Git的post-receive钩子,让你在本地推送代码后,服务器自动拉取更新并部署到Web目录,非常高效。

A1) Hexo 私人服务器部署

首先,需要确保有一台云服务器(如阿里云、腾讯云、AWS等)或私人服务器,并通过 SSH 连接到服务器。

A11) update & upgrade

更新系统包:在安装任何软件之前,最好先更新系统的包列表。

1
2
3
4
# 对于Ubuntu/Debian系统
sudo apt-get update
# 对于CentOS/RHEL系统
sudo yum update

A12) Nginx 安装并配置

1
2
3
4
5
6
7
8
# 安装Nginx
# Ubuntu/Debian
sudo apt-get install -y nginx
# CentOS/RHEL
sudo yum install -y nginx

# 创建Nginx配置文件(例如:/etc/nginx/conf.d/hexo.conf)
sudo vim /etc/nginx/conf.d/hexo.conf

在Nginx配置文件中添加如下内容,并注意将server_name替换为你的域名或服务器IP:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
server {
listen 80;
# 如果你的服务器有域名,请修改此处
server_name your_server_ip_or_domain;
root /var/www/hexo; # 确保这与Git钩子中的目录一致
index index.html index.htm;

location / {
try_files $uri $uri/ =404;
}

# 可选:配置错误页面
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}

检查Nginx配置并重启:

1
2
3
4
sudo nginx -t # 检查语法
sudo systemctl restart nginx # 重启Nginx使配置生效
# 设置Nginx开机自启
sudo systemctl enable nginx

A13) Git 安装

A31) 安装Git:版本控制工具Git是后续部署和更新所必需的

1
2
3
4
5
# Ubuntu/Debian
sudo apt-get install -y git

# CentOS/RHEL
sudo yum install -y git

A14) 服务器配置Git用户与权限

(使用Git钩子方案)配置Hexo的部署设置
为了安全,建议创建一个专门的Git用户来管理仓库和部署。

1
2
3
4
5
6
7
8
9
10
11
# 创建git用户
sudo adduser git
# 为git用户设置密码
sudo passwd git

# 给git用户配置sudo权限(可选,方便后续权限管理)
sudo chmod 740 /etc/sudoers
# 编辑sudoers文件,在适当位置添加:
# git ALL=(ALL) ALL
sudo visudo # 推荐使用此命令编辑,它会进行语法检查
sudo chmod 400 /etc/sudoers

A15) 创建Git裸仓库并配置钩子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 切换至git用户
su - git

# 在git用户的家目录创建裸仓库
mkdir -p ~/hexo-staging.git
cd ~/hexo-staging.git
git init --bare

# 创建网站根目录(通常需要sudo权限,需切换回有权限的用户)
sudo mkdir -p /var/www/hexo
sudo chown -R git:git /var/www/hexo # 将目录所有权给git用户
sudo chmod -R 755 /var/www/hexo # 设置合适的权限

# 配置钩子(post-receive)
cat > ~/hexo-staging.git/hooks/post-receive << EOF
#!/bin/bash
git --work-tree=/var/www/hexo --git-dir=/home/git/hexo-staging.git checkout -f
EOF

# 给钩子脚本执行权限
chmod +x ~/hexo-staging.git/hooks/post-receive
注意:确保 --work-tree 指定的目录(/var/www/hexo)是你的Web服务器(如Nginx)将要提供服务的根目录。

A16) 本地配置SSH

配置SSH密钥认证(免密推送)

为了提高安全性和便捷性,建议使用SSH密钥对进行认证。
a) 在本地机器生成SSH密钥对(如果还没有的话):

1
2
3
4
5
6
7
ssh-keygen -t rsa -b 4096 -C "your_email@example.com" # 一直回车即可


显示所有配置: git config --list

git config --global user.email "git@git.com"
git config --global user.name "git"

b) 将本地公钥(~/.ssh/id_rsa.pub)的内容,添加到服务器的git用户的~/.ssh/authorized_keys文件中。

1
2
3
4
5
6
7
# 在服务器上,以git用户操作
su - git
mkdir -p ~/.ssh
touch ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
# 然后用vim或nano编辑器将你的公钥内容粘贴到authorized_keys文件中

c)(可选)禁用git用户的shell登录:为了安全,可以限制git用户只能进行Git操作。

1
2
3
4
5
6
7
# 确保git-shell存在
which git-shell # 通常输出 /usr/bin/git-shell
# 编辑 /etc/passwd 文件,找到git用户那一行
sudo vim /etc/passwd
# 将行末的/bin/bash改为/usr/bin/git-shell
# 修改前:git:x:1001:1001:,,,:/home/git:/bin/bash
# 修改后:git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

A2) Hexo 本地主机部署

本地主机安装Node.js与Hexo

A21) 本地安装 Node.js和 npm

安装Node.js和npm:Hexo基于Node.js,因此需要先安装它。建议安装较新的版本。
对于 Linux 系统,除了从官网下载二进制包或使用包管理器(如 apt, yum)安装外,更推荐使用 nvm (Node Version Manager) 来安装和管理 Node.js 版本,这样可以非常方便地切换版本。

A211) curl wget 安装 nvm

a) 安装 nvm (以 curl 方式为例):

1
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash

或者使用 wget:

1
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash

安装完成后,重启终端或执行 source ~/.bashrc(或 source ~/.zshrc,取决于你的 shell)。

A212) nvm 配置国内源

为 nvm 配置国内镜像源(加速 Node.js 版本和源码下载):
在你的 shell 配置文件(如 ~/.bashrc, ~/.zshrc)中添加以下环境变量:

1
2
3
4
5
# 设置 Node.js 二进制包镜像(可选,国内镜像加快下载速度)
export NVM_NODEJS_ORG_MIRROR=https://npmmirror.com/mirrors/node/
# 对于 nvm windows 版本,可以在 nvm 的安装目录下的 settings.txt 文件中配置:
# node_mirror: https://npmmirror.com/mirrors/node/
# npm_mirror: https://npmmirror.com/mirrors/npm/

然后同样 source ~/.bashrc 或重启终端生效。

A213) nvm 安装 Node.js:

1
2
nvm install --lts # 安装最新的 LTS 版本
nvm use --lts # 使用最新 LTS 版本

验证安装

无论哪种方式安装完成后,请打开命令行终端(Windows 上是 CMD 或 PowerShell,macOS/Linux 上是 Terminal),执行以下命令验证是否安装成功:

1
2
node -v
npm -v

如果这两条命令分别显示了 Node.js 和 npm 的版本号(例如 v20.15.0 和 10.5.2),说明安装成功。

A214) npm 配置国内源

Node.js 安装好后,就可以通过 npm 安装各种包了。但 npm 默认的源在国外,下载速度可能很慢。将源切换到国内镜像(如淘宝镜像、腾讯云镜像等)可以极大提升下载速度。

永久配置国内镜像源
执行以下命令可以将淘宝镜像(或其他你偏好的国内镜像)设置为 npm 的默认下载源:

1
2
3
4
5
6
7
8
# 设置淘宝镜像
npm config set registry https://registry.npmmirror.com

# 或者设置腾讯云镜像
npm config set registry https://mirrors.cloud.tencent.com/npm/

# 验证当前配置的镜像地址
npm config get registry

运行npm config get registry,如果输出的地址是你刚刚设置的国内镜像源地址,则表示设置成功。

安装完成后,验证安装:

1
2
node -v
npm -v

A22) 本地计算机上安装Hexo

在本地计算机上安装Hexo(如果尚未安装):

1
npm install -g hexo-cli

验证Hexo安装:

1
hexo -v

version

A23) 初始化Hexo博客

初始化你的Hexo博客项目:

1
2
3
4
mkdir my-blog/
hexo init my-blog
cd my-blog
npm install

安装 Hexo 完成后,请执行下列命令,Hexo 将会在指定文件夹中新建所需要的文件。

$ hexo init 
$ cd 
$ npm install

初始化后,您的项目文件夹将如下所示:

.
├── _config.yml
├── package.json
├── scaffolds
├── source
|   ├── _drafts
|   └── _posts
└── themes

A24) 配置Hexo的部署设置

(如果使用Git钩子方案)配置Hexo的部署设置:
编辑Hexo博客目录下的_config.yml文件,找到deploy部分,修改为如下格式:

1
2
3
4
5
# 注意缩进和空格!
deploy:
type: git
repo: git@your_server_ip:/home/git/hexo-staging.git # 服务器Git仓库地址
branch: master # 通常是master,根据你的设置调整

A25) 安装Hexo的Git插件

1
npm install hexo-deployer-git --save

B) Hexo 服务器在 GitHub 部署

C) Hexo _config.yml 设定

  1. post_asset_folder: true
    当新增文章 aaa.md 时,系统自动新增 folder aaa/

  2. hexo-renderer-marked

1
2
3
marked:
prependRoot: true
postAsset: true

D) Q & A

D1) Server 端要不要安装 Node.js?
Server 端不用安装 Noge.js