BOSh
文章28
标签12
分类5

一言

文章归档

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账号同时没了)。

本文作者:BOSh
本文链接:http://zsb.hidns.co/2025/12/27/Hexo%20%E9%83%A8%E7%BD%B2%20CT8%20%E9%81%BF%E5%9D%91%E7%BB%88%E6%9E%81%E6%8C%87%E5%8D%97/
版权声明:本文由BoSh发布,部分内容来源于网络。