Hexo 部署到 CT8 避坑终极指南
总结今天在 CT8(及其同类 Serv00 架构)上部署 Hexo 的过程,最核心的教训是:不要尝试把代码直接推送到网页目录,必须通过“中转裸仓库 + 钩子”的方式实现。
第一步:服务器环境准备(仅一次)
确定路径:登录 CT8 终端,输入
pwd确认你的家目录。- 通常是
/usr/home/你的用户名。
- 通常是
创建中转站(裸仓库):
Bash
1
2
3
4
5mkdir -p ~/repos/blog.git
cd ~/repos/blog.git
git init --bare
# 强制指定主分支名为 main (关键:防止分支名冲突)
git symbolic-ref HEAD refs/heads/main
第二步:配置自动同步“钩子”(核心步骤)
这是最容易踩坑的地方,必须处理权限、路径和换行符。
创建文件:
vi ~/repos/blog.git/hooks/post-receive粘贴内容(直接用绝对路径,排除变量失效):
Bash
1
2
3
4
5
6
7
8
9
10#!/bin/bash
# 显式清除干扰
unset $(git rev-parse --local-env-vars)
# 路径根据你的实际域名目录修改
TARGET="/usr/home/你的用户名/domains/你的域名/public_html"
GIT_DIR="/usr/home/你的用户名/repos/blog.git"
# 强制检出到网页目录
git --git-dir=$GIT_DIR --work-tree=$TARGET checkout -f main || git --git-dir=$GIT_DIR --work-tree=$TARGET checkout -f master赋予权限(必做):
Bash
1
chmod +x ~/repos/blog.git/hooks/post-receive
第三步:配置 SSH 免密登录(提速关键)
避免每次发布都要手动输入 CT8 的密码。
在本地电脑cmd运行
type %USERPROFILE%\.ssh\id_rsa.pub(或 ed25519)获取公钥。或者在文件管理器 以下路径查找
1
C:\Users\Administrator\.ssh
在 CT8 上执行:
Bash
1
2
3
4
5
6mkdir -p ~/.ssh
echo "你的公钥内容" >> ~/.ssh/authorized_keys #将公钥写入VPS配置文件
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
# 修正家目录权限(CT8 安全策略要求)
chmod 755 /usr/home/你的用户名
第四步:本地 Hexo 配置
修改 _config.yml,将 CT8 地址添加到 deploy 列表:
YAML
1 | deploy: |
💡 避坑锦囊(黄金法则)
- 法则一:路径必须完整。 永远使用从
/usr/home/...开始的绝对路径,不要使用相对路径。- 法则二:不要在 Windows 下编辑 Hook 文件。 如果要修改
post-receive,直接在 CT8 终端里用vi编辑,或者在 Windows 下编辑后另存为 LF (Unix) 换行符。如果是 CRLF 换行符,脚本会报错Empty string is not a valid path。- 法则三:清理缓存。 如果发现网页没更新,先运行
hexo clean再hexo d。- 法则四:分支对齐。 确保本地推送到
main,服务器接收的也是main。如果服务器 Git 版本老,手动用symbolic-ref指向main。
总结
我的hexo博客现在的架构是:本地源码 -> GitHub (备份) & GitHub Pages (主站) & CT8 (镜像)。这套方案即便其中一个服务宕机,你的博客依然可以从另一个地址访问,且源码永远不会丢失(除非电脑坏了,github账号同时没了)。