总结今天在 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
1chmod +x ~/repos/blog.git/hooks/post-receive
第三步:配置 SSH 免密登录(提速关键)
避免每次发布都要手动输入 CT8 的密码。
在本地电脑cmd运行
type %USERPROFILE%\.ssh\id_rsa.pub(或 ed25519)获取公钥。或者在文件管理器 以下路径查找
1C:\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
| |
💡 避坑锦囊(黄金法则)
- 法则一:路径必须完整。 永远使用从
/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账号同时没了)。
