# yao-blog **Repository Path**: yao-coder/yao-blog ## Basic Information - **Project Name**: yao-blog - **Description**: 个人博客 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-12 - **Last Updated**: 2026-07-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # LI YAO'S BLOG > 有趣的人生, 一半家长里短, 一半山川胡海 基于 [Hexo](https://hexo.io/) 构建的个人博客,主题 [NexT](https://theme-next.js.org/),托管于 Gitee,由 AWS EC2 自建服务器经 Cloudflare 对外提供访问。 **线上地址**: --- ## 技术栈 | 组件 | 说明 | |---|---| | [Hexo](https://hexo.io/) 6.3 | 静态博客框架(Node.js) | | NexT | 博客主题,位于 `themes/next/` | | [Gitee 仓库](https://gitee.com/yao-coder/yao-blog) | 存放**生成后的静态文件**(master 分支) | | AWS EC2 | Amazon Linux 2023 (ARM),nginx 1.28 托管静态站点 | | Cloudflare | DNS + CDN 代理 + 公网 TLS(源站用 Cloudflare Origin 通配符证书,有效期至 2041) | ## 目录结构 ``` yao-blog/ ├── _config.yml # Hexo 站点配置(站点信息、URL、部署目标) ├── package.json # 依赖与脚本 ├── scaffolds/ # 新文章模板 ├── source/ # ★ 文章源文件(Markdown) │ ├── README.md # 本文档(skip_render 原样复制,随每次部署推送到 Gitee) │ ├── _posts/ # 已发布文章 │ ├── about/ # 关于页 │ ├── categories/ # 分类页 │ ├── tags/ # 标签页 │ ├── life/ # 生活页 │ └── copywriter/ # 文案页 ├── themes/next/ # NexT 主题(含自定义修改,见下文) ├── ops/ # 服务器部署脚本存档(不参与 Hexo 构建发布) │ │ # 注意:不能放在 scripts/ —— 那是 Hexo 保留目录,内容会被当作 JS 插件加载 │ ├── server-setup.sh # EC2 初始配置:克隆仓库 + nginx 站点 + 定时同步 │ └── server-webhook-setup.sh # EC2 WebHook 接收端:推送即秒级部署 └── public/ # hexo generate 的输出(自动生成,已 gitignore) ``` ## 快速开始 ### 环境要求 - Node.js(项目随附 `node_modules`,迁移机器后如有问题执行 `npm install`) - 本机 SSH 公钥(`~/.ssh/id_rsa.pub`)已添加到 Gitee 账号(部署需要) ### 常用命令 ```powershell npx hexo server # 本地预览 http://localhost:4000 npx hexo new "文章标题" # 新建文章(生成 source/_posts/文章标题.md + 同名资源目录) npx hexo clean # 清除缓存和 public/ npx hexo generate # 生成静态文件到 public/ npx hexo deploy # 发布(强制推送 public/ 到 Gitee master) ``` ### 日常写作发布流程 ```powershell npx hexo new "我的新文章" # 1. 新建 # 2. 编辑 source/_posts/我的新文章.md(图片放同名目录,post_asset_folder 已开启) npx hexo server # 3. 本地预览 npx hexo clean; npx hexo deploy # 4. 发布,几秒后线上生效 ``` ## 部署架构 ``` 本地 npx hexo deploy │ SSH 免密强制推送 public/ ▼ Gitee (yao-coder/yao-blog, master) │ Push WebHook(POST https://blog.yaoiw.com/hooks/gitee,密码验证) ▼ EC2 52.64.47.53 (Amazon Linux 2023) ├── yao-blog-webhook.service # 127.0.0.1:9876 接收 WebHook → 立即同步(秒级) ├── yao-blog-sync.timer # 每 5 分钟兜底同步一次 │ └── git fetch + git reset --hard origin/master # 必须硬重置:hexo deploy 是强推、会重写历史 ├── /var/www/yao-blog # 站点根目录(Gitee 仓库的克隆) └── nginx: /etc/nginx/conf.d/blog.yaoiw.com.conf │ TLS: Cloudflare Origin 通配符证书 (*.yaoiw.com) ▼ Cloudflare 代理(橙云 A 记录 blog.yaoiw.com → 52.64.47.53) ▼ https://blog.yaoiw.com ``` 部署目标配置在 `_config.yml`: ```yaml deploy: type: git repository: git@gitee.com:yao-coder/yao-blog.git branch: master ``` ## 服务器运维速查 连接服务器:桌面脚本 `PowerShell小工具\ssh-iambeyouare-ec2.ps1`(密钥 `E:\ec2.pem`,用户 `ec2-user`)。 | 操作 | 命令(在服务器上执行) | |---|---| | 手动立即同步 | `sudo systemctl start yao-blog-sync.service` | | 查看 WebHook 触发日志 | `journalctl -u yao-blog-webhook.service -n 20` | | 查看定时同步状态 | `systemctl status yao-blog-sync.timer` | | 重启 WebHook 接收端 | `sudo systemctl restart yao-blog-webhook.service` | | nginx 改配置后生效 | `sudo nginx -t && sudo systemctl reload nginx` | 服务器端文件位置: - WebHook 接收脚本:`/usr/local/bin/yao-blog-webhook.py`(Python 标准库实现,仅监听本机回环) - WebHook 密码:存放在 `/etc/systemd/system/yao-blog-webhook.service` 的 `Environment=WEBHOOK_SECRET=` 行(与 Gitee 仓库 WebHook 设置中的密码一致,**勿写入本文档/仓库**) - 同步单元:`/etc/systemd/system/yao-blog-sync.{service,timer}` - 证书:`/etc/pki/tls/certs/yaoiw.com.crt` + `/etc/pki/tls/private/yaoiw.com.key` ## 主题自定义记录 在 NexT 主题基础上做过的修改(升级主题时注意保留): - `themes/next/_config.yml` - `social:` 侧边栏社交链接:Gitee(`fab fa-git-alt` 图标)、E-Mail - live2d 看板娘、Valine 评论、本地搜索等配置 - `themes/next/layout/_layout.swig` 第 16 行:右上角 Gitee 角标(红色三角 + Gitee logo,硬编码,不走 `github_banner` 配置) ## 常见问题 **部署后线上没更新?** 1. 强制刷新浏览器缓存(`Ctrl+F5`) 2. 查服务器 WebHook 日志:`journalctl -u yao-blog-webhook.service -n 20`,正常应有 `sync OK` 3. 即使 WebHook 失败,定时器最多 5 分钟也会追平;可手动 `sudo systemctl start yao-blog-sync.service` **`hexo deploy` 报权限错误?** 本机 SSH 公钥未注册到 Gitee。验证:`ssh -T git@gitee.com` 应返回 `Hi yao(@yao-coder)!` **新文章图片不显示?** 图片放在与文章同名的资源目录里(`post_asset_folder: true`),Markdown 中直接写文件名引用。 ## ⚠️ 重要提醒 Gitee 仓库里只有**生成后的静态文件**。文章 Markdown 源文件、站点配置、主题定制目前**仅存在于本地** `E:\java-code\yao-blog`,没有异地备份——建议尽快建一个私有仓库备份整个源目录(排除 `node_modules/`、`public/`、`.deploy_git/`)。