Hexo双部署|腾讯云+GitHub Pages一键发布手册
前言
✅ 功能目标:本地写完笔记,执行一条命令,同时自动发布到腾讯云独立域名博客 + GitHub Pages镜像博客
✅ 运行环境:Windows本地Hexo + 腾讯云Ubuntu22.04
✅ 编辑器规范:全程使用vim,不使用nano
✅ 已有基础:GitHub Pages已长期正常部署,仅新增腾讯云服务器双部署
✅ 密钥适配:本地为RSA密钥
id_rsa.pub,无需重新生成密钥
一、腾讯云服务器一次性部署配置
1. 创建Git裸仓库(接收Hexo推送)
用于接收本地Hexo静态文件,搭配钩子自动同步至网站根目录
1 | # 创建裸仓库目录并初始化 |
2. 配置自动同步钩子(核心自动更新功能)
作用:本地推送代码后,服务器自动同步文件到网站目录,无需手动操作
1 | # 编辑钩子文件 |
按 i 进入编辑,写入以下脚本:
1 |
|
按Esc,输入 :wq 保存退出。
关键必做:给钩子添加可执行权限(无权限会直接忽略钩子,无法自动更新)
1 | chmod +x /home/ubuntu/hexo.git/hooks/post-receive |
3. Nginx完整HTTPS配置
1 | sudo vim /etc/nginx/sites-available/welcomeme.conf |
清空原有内容,粘贴完整配置:
1 | server { |
Esc → :wq 保存退出,校验并重载Nginx:
1 | sudo nginx -t |
二、本地Hexo项目核心配置
重要区分:双部署配置仅修改 **_config.yml****项目根目录 ,_config.butterfly.yml****无需修改主题配置 **
1. 安装部署依赖插件
1 | npm install hexo-deployer-git --save |
2. 最终正确双部署配置(修复多仓库语法)
删除原有错误单仓库写法,替换为以下完整配置(禁止单独写branch字段)
1 | # 站点域名配置 |
YAML规范:缩进统一2个空格,禁止Tab,仓库与逗号、分支无空格
3. SSH免密配置(仅配置腾讯云,GitHub跳过)
本地已有RSA密钥可正常推送GitHub,严禁执行ssh-keygen重新生成密钥,避免覆盖旧密钥导致GitHub部署失效
PowerShell执行,推送本地已有公钥至腾讯云:
1 | type $env:USERPROFILE\.ssh\id_rsa.pub | ssh ubuntu@124.220.133.56 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys" |
测试免密登录(无需输入密码即为成功):
1 | ssh ubuntu@124.220.133.56 |
免密失效修复(服务器端执行):
1 | chmod 700 ~/.ssh |
三、日常写笔记 + 一键双发布流程
1. 新建博客文章
1 | hexo new post "文章标题" |
编辑路径:source/_posts/文章标题.md,编写笔记后保存
2. 本地预览(必做,规避部署错误)
1 | hexo s |
浏览器访问 http://localhost:4000 确认样式、链接、内容正常,Ctrl+C 关闭服务
3. 一键同步发布双平台
1 | hexo clean && hexo g -d |
执行逻辑:
自动推送静态文件到GitHub
gh-pages分支,更新镜像站自动推送至腾讯云裸仓库,触发钩子自动同步至网站目录
访问地址
腾讯云主站:
https://welcomeme.cnGitHub镜像站:
https://sevan017.github.io/sevan017.github.io
四、核心报错解决方案(实测落地修复)
问题1:推送成功但腾讯云不更新,提示 hooks/post-receive hook was ignored
根因:钩子无执行权限,Git直接忽略自动同步脚本
修复命令:
1 | # 添加钩子执行权限 |
问题2:Git推送远程报错 unable to unlink old xxx / Permission denied(最新实测报错)
报错日志特征:推送成功后远程自动同步阶段报错,无法删除旧文章页面文件
1 | remote: error: unable to unlink old '2026/07/20/File相关类/index.html': Permission denied |
根因:此前网站静态文件归属 www-data 用户,Git钩子以 ubuntu 用户运行,仅拥有读权限、无删除/覆盖旧文件权限,导致更新失败、旧页面残留。
永久根治方案(服务器一键执行):彻底变更网站目录归属为钩子运行用户ubuntu,彻底解决读写删除权限问题
1 | # 递归修改目录及所有文件归属、权限 |
验证修复成功:无任何 Permission denied 报错,旧文件正常删除、新文章文件正常生成。
后续保障:此后所有 hexo clean && hexo g -d 推送,均可自动删除旧文件、更新新内容,永久杜绝该权限报错,且不影响Nginx网页正常访问。
根因:网站目录文件归属为www-data,ubuntu用户无读写删除权限
永久修复方案:
1 | # 更改目录归属为ubuntu(适配Git钩子运行用户) |
问题3:博客分页、标签页、归档页404
确认Nginx配置包含以下规则:
1 | location / { |
问题4:浏览器一直显示旧页面
服务端校验:
curl https://welcomeme.cn查看真实源码客户端:无痕窗口访问 /
Ctrl+Shift+R强制刷新
五、应急兜底方案
钩子异常自动同步失效时,手动上传静态文件:
1 | # 替换为自己的Hexo项目路径 |
附录:Vim常用快捷键
| 操作功能 | 指令 |
|---|---|
| 进入编辑模式 | i |
| 退出编辑模式 | Esc |
| 保存并退出 | :wq |
| 不保存强制退出 | :q! |