静态博客部署初始

首先,我们需要在服务器上安装 Nginx 负责分发网页,并创建存放博客的文件夹。 N…

本地环境写博客 + 服务器 Nginx 托管 + Git Hooks 自动部署

这种方案不需要在服务器安装 Node.js 或 Hexo 核心程序,能把 100% 的内存和性能留给你的 OpenClaw。


第一步:服务器环境准备 (Nginx)(前台服务员)

首先,我们需要在服务器上安装 Nginx 负责分发网页,并创建存放博客的文件夹。

1. 安装 Nginx:

Nginx 就是你的超市前台。
  • 作用: 当有人在浏览器输入你的 IP 或域名时,请求首先到达 Nginx。它负责看管 /var/www/hexo 这个“货架”。

  • 为什么选它: 它非常“瘦”(占用内存极低),而且手脚麻利。对于你 2G 内存的服务器,它几乎不占地方

1
2
3
4
 sudo apt update

sudo apt install nginx -y
#所有内容的所有权递归改为当前用户和当前用户组,使普通用户可读写该目录

2. 创建存放目录:

1
2
sudo mkdir -p /var/www/hexo
sudo chown -R $USER:$USER /var/www/hexo

作用1:强制创建完整路径/var/www/hexo,无视中间目录是否存在或目标是否已存在。
-p作用:递归创建路径中所有缺失的父目录(如/var/www不存在则自动建),目标目录已存在时不报错
所有内容的所有权递归改为当前用户和当前用户组,使普通用户可读写该目录
作用2:所有内容的所有权递归改为当前用户和当前用户组,使普通用户可读写该目录

3. 配置 Nginx

创建一个简单的配置文件:
sudo nano /etc/nginx/sites-available/hexo

输入以下内容(记得开启 Gzip 应对 1M 带宽):

1
2
3
4
5
6
7
8
9
10
11
12
server {
listen 80;
server_name your_domain_or_ip; # 替换为你的域名或IP

location / {
root /var/www/hexo;
index index.html index.htm;
# 开启Gzip压缩
gzip on;
gzip_comp_level 5;
gzip_types text/plain text/css application/javascript; }
}

激活配置:
sudo ln -s /etc/nginx/sites-available/hexo /etc/nginx/sites-enabled/
并重启
sudo systemctl restart nginx

Gzip:你的“真空打包机”

  • 专业术语: HTTP 压缩 (HTTP Compression)

  • 浅显理解: 因为你的服务器出口门缝很窄(1M 带宽),如果直接搬运大箱子(原始 HTML/CSS 文件),路就会堵死。

    • 作用: Gzip 会在文件发出去之前,瞬间把它们“真空压缩”得很小。

    • 效果: 用户的浏览器收到后会自动解压。这样 128KB/s 的物理限制,在感官上能跑出 500KB/s 的效果。

停止 Nginx 服务(只需这一行命令):

1
sudo systemctl stop nginx

3. 验证一下: 打开浏览器,输入你的 IP 。

  • 如果显示 “无法访问此网站”“拒绝连接” —— 恭喜!满分状态。

  • 如果不显示任何网页内容,说明 80 端口关了,审核员怎么查都没问题。

4. 等待备案号下发: 等到你会收到工信部的短信说“备案通过”的那一刻,再回来输入:

1
sudo systemctl start nginx

第二步:建立自动化部署 (Git Hook)

这一步能让你像以前一样,在本地执行 hexo d 就直接更新服务器。

1. 在服务器上安装 Git:

Bash

1
sudo apt install git -y

2. 创建 Git 裸仓库:

Bash

1
2
3
mkdir -p ~/blog.git
cd ~/blog.git
git init --bare

Git Bare Repository:你的“收货仓库”

  • 专业术语: 裸仓库 (Bare Repository)

  • 浅显理解: 这和你平时看到的存放代码的文件夹不同。它是一个“只收货、不展示”的纯数据仓库(不含工作目录)。

    • 作用: 它专门用来接收你从本地电脑 hexo d 推送过来的压缩包。它不负责展示网页,只负责“存储”。

3. 编写 Hook 脚本: 创建并编辑钩子文件:

1
nano ~/blog.git/hooks/post-receive

复制以下内容(它的作用是当你推送代码时,自动把文件同步到 Nginx 目录):

1
2
#!/bin/bash
git --work-tree=/var/www/hexo --git-dir=/root/blog.git checkout -f

注意:如果你的路径不同,请自行修改。

Git Hooks (post-receive):你的“自动理货员”

  • 专业术语: 钩子脚本 (Server-side Hook)

  • 浅显理解: 这是一个“一旦…就…”的自动化触发器。

    • 作用:post-receive 脚本检测到你推送到服务器的新代码时,它会立刻跳出来说:“新货到了!我马上把它们解压到 Nginx 的网页货架(/var/www/hexo)上。”

    • 原理: 这样你就不需要每次手动登录服务器去解压、挪动文件了。

4. 赋予执行权限:

1
chmod +x ~/blog.git/hooks/post-receive

总结你的架构

你现在的架构其实形成了一个闭环

  1. 本地电脑:生产加工(Hexo 生成 HTML)。

  2. Git 推送:运输货物(传输数据)。

  3. Hooks 脚本:自动上架(部署到目录)。

  4. Nginx:售卖展示(给访问者看)

第三步:本地电脑配置 (Hexo)

安装“生产工具” (Node.js & Git)

Hexo 是基于 Node.js 运行的,所以必须先安装它。

  1. 下载 Node.js:

    • Node.js 官网 下载 LTS 版本(长期支持版),一路“下一步”安装即可。
  2. 下载 Git:

    • Git 官网 下载安装。

    • 安装完后,在桌面右键点击,如果看到 Git Bash Here,说明安装成功。


初始化 Hexo (搭建车间)

随便在你的电脑盘里找个地方(比如 D 盘 Blog 文件夹),右键选择 Git Bash Here,输入以下命令:

  1. 安装 Hexo 脚手架:

    Bash

    1
    npm install -g hexo-cli
  2. 初始化博客文件夹:

    Bash

    1
    2
    3
    hexo init myblog
    cd myblog
    npm install
  3. 安装 Git 部署插件(关键): 这是连接你本地和服务器的桥梁,必须装。

    Bash

    1
    npm install hexo-deployer-git --save

配置“运输路线” (修改 _config.yml)

现在要告诉 Hexo,生成的网页该往哪台服务器发。

  1. 打开 myblog 文件夹下的 _config.yml 文件(可以用记事本或 VS Code 打开)。

  2. 拉到最底部,找到 deploy: 部分。

  3. 修改成下面这样(注意缩进):

YAML

1
2
3
4
5
6
deploy:
type: git
# 注意:把下面 1.2.3.4 换成你服务器的公网 IP
# 如果你服务器上创建的是 /root/blog.git,就用 root 用户
repo: root@1.2.3.4:/root/blog.git
branch: master

第四步:打通“免密通道” (SSH Key)

为了让你以后写完文章 hexo d 直接发布,不用每次都输服务器密码,我们需要配置 SSH 公钥。

  1. 在本地电脑生成钥匙: 在 Git Bash 里输入:

    Bash

    1
    ssh-keygen -t rsa -C "你的邮箱@example.com"

    (一直按回车,直到结束)。

  2. 把钥匙送给服务器: 继续在 Git Bash 里输入:

    Bash

    1
    2
    # 把 1.2.3.4 换成你的服务器 IP
    ssh-copy-id -i ~/.ssh/id_rsa.pub root@1.2.3.4

    系统会提示你输入一次服务器的密码。成功后,以后就不需要输密码了。


第五步:第一次发货!

一切准备就绪,让我们测试一下。

  1. 清理并生成:

    Bash

    1
    2
    hexo clean
    hexo g
  2. 推送到服务器:

    Bash

    1
    hexo d

如果看到 INFO Deploy done: git,恭喜你!

错误解决

错误1Author identity unknown,Please tell me who you are.

Hexo 的部署插件在幕后其实是帮你建立了一个临时的 Git 仓库(在 .deploy_git 文件夹里),然后帮你提交代码并推送到服务器。但是,Git 规定每一次提交(Commit)都必须有一个“作者”,而你的电脑上还没有告诉 Git 你是谁。

✅ 解决方法

你需要直接在你的终端(也就是你当前的 Git Bash 窗口)里执行下面这两行命令。

你可以直接复制粘贴(邮箱和名字可以随便填,或者填真实的):

1. 设置你的邮箱:

Bash

1
git config --global user.email "blog@example.com"

2. 设置你的名字:

Bash

1
git config --global user.name "HexoDeployer"

执行完上面两行命令后,再次运行部署命令:

Bash

1
hexo d

验证:

  1. 网页能不能打开?

  2. 如果不设置免密,每次都要输密码太累了。

请立刻打开浏览器,输入你服务器的 IP 地址(或者域名): http://你的服务器IP

  • 如果看到了 Hexo 的默认页面(Hello World): 太棒了!你的 Nginx 配置正确,Git 钩子(Hook)也成功把文件解压到了 Nginx 的目录。

  • 如果看到 403 Forbidden 或 404 Not Found: 别慌,这通常是权限问题

    • 解决办法: 登录服务器,执行这一句命令给 Nginx 赋予读取权限:

      Bash

      1
      2
      chown -R www-data:www-data /var/www/hexo
      chmod -R 755 /var/www/hexo
    • (注:CentOS 系统通常用户是 nginx 而不是 www-data)


配置免密登录 (强烈推荐)

以后你写博客,改一个错别字都要 hexo d,如果每次都输密码会非常崩溃。我们可以配置 SSH 公钥,让服务器“认识”你的电脑。

在你的 Git Bash (本地电脑) 里依次执行:

1. 生成钥匙对 (如果之前没生成过):

Bash

1
ssh-keygen -t rsa -b 4096

(一直按回车,全部默认即可)

2. 把公钥发送给服务器: (请把 1.2.3.4 换成你的服务器 IP)

Bash

1
ssh-copy-id root@1.2.3.4
  • 注意: 如果 Windows 的 Git Bash 提示 command not found,请用下面这行万能命令代替:

    Bash

    1
    cat ~/.ssh/id_rsa.pub | ssh root@1.2.3.4 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

3. 测试: 输入 ssh root@1.2.3.4,如果没让你输密码就直接进去了,说明配置成功!


下一步做什么?

现在的博客虽然上线了,但它是默认的最丑的样子,而且文章也是测试文。

作者

K.S.J

发布于

2026-02-24

更新于

2026-03-01

许可协议