Featured image of post Hexo 部署到 CT8 避坑终极指南

Hexo 部署到 CT8 避坑终极指南

总结今天在 CT8(及其同类 Serv00 架构)上部署 Hexo 的过程,最核心的教训是:不要尝试把代码直接推送到网页目录,必须通过“中转裸仓库 + 钩子”的方式实现。

第一步:服务器环境准备(仅一次)

  1. 确定路径:登录 CT8 终端,输入 pwd 确认你的家目录。

    • 通常是 /usr/home/你的用户名
  2. 创建中转站(裸仓库)

    Bash

    1
    2
    3
    4
    5
    
    mkdir -p ~/repos/blog.git
    cd ~/repos/blog.git
    git init --bare
    # 强制指定主分支名为 main (关键:防止分支名冲突)
    git symbolic-ref HEAD refs/heads/main
    

第二步:配置自动同步“钩子”(核心步骤)

这是最容易踩坑的地方,必须处理权限路径换行符

  1. 创建文件vi ~/repos/blog.git/hooks/post-receive

  2. 粘贴内容(直接用绝对路径,排除变量失效)

    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
    
  3. 赋予权限(必做)

    Bash

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

第三步:配置 SSH 免密登录(提速关键)

避免每次发布都要手动输入 CT8 的密码。

  1. 在本地电脑cmd运行 type %USERPROFILE%\.ssh\id_rsa.pub(或 ed25519)获取公钥。

    或者在文件管理器 以下路径查找

    1
    
    C:\Users\Administrator\.ssh
    
  2. 在 CT8 上执行:

    Bash

    1
    2
    3
    4
    5
    6
    
    mkdir -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
2
3
4
5
deploy:
    - type: git
    # 注意:连接的是 .git 结尾的仓库,就是在post-receive 中配置的GIT_DIR="/usr/home/用户名/repos/blog.git"。不是 public_html 文件夹
    repo: 用户名@服务器地址:/usr/home/用户名/repos/blog.git
    branch: main

💡 避坑锦囊(黄金法则)

  • 法则一:路径必须完整。 永远使用从 /usr/home/... 开始的绝对路径,不要使用相对路径。
  • 法则二:不要在 Windows 下编辑 Hook 文件。 如果要修改 post-receive,直接在 CT8 终端里用 vi 编辑,或者在 Windows 下编辑后另存为 LF (Unix) 换行符。如果是 CRLF 换行符,脚本会报错 Empty string is not a valid path
  • 法则三:清理缓存。 如果发现网页没更新,先运行 hexo cleanhexo d
  • 法则四:分支对齐。 确保本地推送到 main,服务器接收的也是 main。如果服务器 Git 版本老,手动用 symbolic-ref 指向 main

总结

我的hexo博客现在的架构是:本地源码 -> GitHub (备份) & GitHub Pages (主站) & CT8 (镜像)。这套方案即便其中一个服务宕机,你的博客依然可以从另一个地址访问,且源码永远不会丢失(除非电脑坏了,github账号同时没了)。

热爱生活 学无止境
使用 Hugo 构建
主题 StackJimmy 设计