这篇文章教完全不懂代码的人,从零搭出一个和本站一样的博客。全程尽量用鼠标点,需要复制粘贴的地方我会单独标出来,你只需要”复制 → 粘贴 → 回车”。
本站就是按这篇文章搭出来的,可以对照本站效果(https://blog.noyu.moe )。下面的路线一推荐让 AI 帮你搭建,你全程只需要在网页上点确认。
路线一:让 AI 帮你搭建(推荐小白,最省事)
这条路不需要安装任何软件、不需要敲命令,全程跟 AI 编程助手对话,AI 负责干活,你负责在网页上点”确认 / 授权”。
第 1 步:注册 GitHub
- 打开 https://github.com ,点右上角 Sign up
- 填邮箱 → 设密码 → 起个用户名(以后你的备用站网址会带这个名字)→ 点 Continue
- 按提示完成验证(有时要输入图片里的单词),然后去邮箱点验证链接
- 注册完成
第 2 步:向 AI 说清需求,让它开工
- 打开一个 AI 编程助手(例如 Codex)
- 对它说:
帮我搭一个 Hexo + Stellar 博客,参考 https://blog.noyu.moe 这个博客的样子,部署到 Cloudflare Pages(免费,不用 Vercel),域名用我的 blog.example.com
要求:
- 源码仓库设为私有(别人看不到源码)
- 评论用 giscus,单独建一个公开的评论仓库(源码私有也能正常评论)
- 图片用 Cloudflare R2 存储,并配好图片域名 img.example.com
- AI 需要你登录 GitHub、Cloudflare 时,跟着网页提示点”授权 / 确认”就行
- AI 会帮你完成:创建私有源码仓库、创建公开评论仓库并配好 giscus、创建 R2 存储桶并配好图片域名、写好配置、推送到 GitHub、在 Cloudflare Pages 部署
- 想改成自己的:直接说”把标题改成 XXX、头像换成我给你的图片、页脚改成 XXX”,它改完自动上线
下面的第 3~7 步是”想自己动手”时的对照步骤;用 AI 的话这些它都会帮你完成,你可以跳过。
第 3 步(手工对照):让 Cloudflare Pages 帮你把博客放到网上(免费)
- 打开 https://dash.cloudflare.com 登录(没有就先注册,域名托管到 Cloudflare 见第 5 步)
- 左侧 Workers 和 Pages → Pages → 点 创建 → 连接到 Git(Connect to Git)
- 第一次会跳去授权 GitHub:允许 Cloudflare Pages 访问你的仓库(源码仓库是私有的也没关系)
- 在仓库列表里选你刚创建的
my-blog→ 开始设置(Begin setup) - 构建配置照填:生产分支
main、构建命令pnpm run build、构建输出目录public - Node 版本不用设置(Cloudflare 默认 Node 22)
- 点 保存并部署(Save and Deploy),等一两分钟,会给你一个
xxx.pages.dev预览网址,点开就能看到博客
完整版部署、域名绑定和缓存加速见文末的”部署方案三:Cloudflare Pages”。
第 4 步(手工对照):改成你自己的名字和头像(可选但建议)
以下都在 GitHub 网页上完成:
- 打开你的仓库(https://github.com/你的用户名/my-blog)
- 点进 _config.yml 文件 → 点右上角铅笔图标(编辑)
- 找到这几行,改成你的:
1 | title: 我的博客 |
- 点绿色的 Commit changes(提交更改)→ 再点一次确认
- 改头像:点进 source/images/ 文件夹 → 点
avatar.jpg→ 点右上角垃圾桶删除 → 回到文件夹 → 点 Add file → Upload files → 把你自己做的头像(文件名就叫avatar.jpg)拖进去 → Commit changes
每次提交后,部署平台(Cloudflare Pages 或 Vercel)会自动重新部署,等一两分钟刷新网页就能看到变化。
第 5 步(手工对照):绑定你自己的域名(可选)
如果你有自己的域名(比如 blog.example.com):
- 打开 https://dash.cloudflare.com ,注册登录,点 Add a site(添加站点),输入你的域名,选 Free(免费) 套餐,按提示把域名的 NS 记录改成 Cloudflare 给的(要去你的域名注册商网站改)
- 在 Cloudflare Pages 项目里:自定义域(Custom domains)→ 设置自定义域,输入
blog.example.com→ 继续 - 提示需要激活 DNS 时点 激活(Activate)(Cloudflare 会自动加好橙色云记录)
- 等几分钟证书签发完成,你的域名就能访问博客了
如果用 Vercel(可选方案一),域名绑定方式不同,见方案一第 4~5 点。
第 6 步(手工对照):写第一篇文章
- 打开你的仓库 → 点进 source/_posts/ 文件夹
- 点 Add file → Create new file(创建新文件)
- 文件名填
hello.md - 把下面内容复制粘贴进去:
1 | --- |
- 点绿色 Commit changes
- 等一两分钟,刷新你的博客,文章就出现了
以后写文章都这么操作:在 source/_posts/ 里新建文件 → 粘贴上面的格式 → 改标题和内容 → 提交。
第 7 步(手工对照):发动态(可选)
用 AI 的话直接说”帮我发一条动态:……”即可。
- 仓库里点进 source/cross/index.md
- 点铅笔编辑,在
{% timeline %}和{% endtimeline %}之间加一行日期注释和内容:
1 | {% timeline %} |
- 点 Commit changes
第 8 步(进阶,推荐):像本站一样:私有源码 + 公开评论 + R2 图片
这一节告诉 AI 帮你做,你只需要跟着点”确认 / 授权”;每一步下面都写了原理,方便你知道在配什么。
为什么这样配
- 源码仓库私有:别人看不到你的配置和文章源码,防止被一键复制,也不影响自动部署。
- 单独公开的评论仓库:评论系统 giscus 要求仓库公开;源码私有后,评论如果还放在源码仓库里,访客就发不了、也看不到评论。所以单独建一个公开仓库专门放评论。
- 图片放 Cloudflare R2:图片不占 GitHub 仓库、不拖慢构建,加载也快;R2 每月免费 10GB 存储,个人博客完全够用。
8.1 把源码仓库设为私有
- 打开你的仓库 → Settings(设置) → 左侧 General → 拉到最下面的 Danger Zone(危险区域) → Change repository visibility(更改仓库可见性) → 选 Private(私有) → 输入仓库名确认
- 私有后部署平台依然会自动部署(之前已经授权过,不受影响)
- 注意:私有仓库的 Actions 每月有 2000 分钟免费额度(每月 1 号刷新)。如果某个月在 Actions 里下载打包文件失败,说明额度用完了,让 AI 帮你打包一份
public.zip兜底即可。
8.2 单独建一个公开的评论仓库(giscus)
- GitHub 右上角 + → New repository → 仓库名填
giscus(或任意名字)→ 可见性选 Public(公开) → Create repository - 打开新仓库 → Settings → General → 找到 Discussions → 勾选 Enable discussions(启用讨论) → Save
- 回到 AI 对话说:”评论仓库用我刚建的 XXX,帮我把 giscus 配好”
- 最后去 https://github.com/settings/installations → 找到 giscus 应用 → Configure → 仓库访问选 All repositories(所有仓库)(或勾选你新建的评论仓库)→ Save
- 完成:文章底部评论正常使用,评论都存在公开评论仓库里;源码仓库私有不影响评论。
8.3 图片存到 Cloudflare R2
- 打开 https://dash.cloudflare.com ,把域名托管到 Cloudflare(Add a site,按提示把域名的 NS 记录改成 Cloudflare 给的,和绑定博客域名是同一个操作)
- 左侧点 R2 → Create bucket(创建存储桶) → 名字随意(比如
blog-images)→ Create bucket - 进入桶 → Upload objects(上传对象) → 把图片拖进去,上传完成
- 给桶绑定一个图片域名:桶 → Settings → Custom Domains(自定义域名) → Connect domain → 输入
img.example.com→ 继续(Cloudflare 会自动加好 DNS 记录,等几分钟生效) - 文章里引用图片:
1 |  |
- 开防盗链,防止别人偷你的图片刷流量:桶 → Settings → Hotlink protection(热链保护) → 打开,允许来源填你的博客域名 → Save。个人博客开这个就够;流量很大的话再考虑加 WAF 规则。
- 以后需要图片时,直接把图片发给 AI,说”传到 R2 并给我链接”,它会帮你上传并把链接写进文章。
路线二:在自己电脑上完整搭建(进阶)
适合想彻底搞懂、想在本地写文章预览的人。需要安装三个软件,安装过程全是”下一步下一步”,之后命令都是复制粘贴。
第 1 步:安装 Git
- 打开 https://git-scm.com/download/win ,下载 Windows 版
- 双击安装包,一路点 Next(下一步),最后点 Install
- 完成
第 2 步:安装 Node.js
- 打开 https://nodejs.org ,下载 LTS 版本
- 双击安装,一路 Next,完成
第 3 步:打开命令行
按键盘 Win + R,输入 powershell,回车。
第 4 步:复制粘贴以下命令(一行一行来)
安装 hexo 和 pnpm:
1 | npm install -g hexo-cli pnpm |
创建博客项目(名字可以自己换,比如 my-blog):
1 | hexo init my-blog |
进入项目:
1 | cd my-blog |
安装依赖和 Stellar 主题:
1 | pnpm install |
第 5 步:启用主题(记事本编辑)
- 用记事本打开项目里的 _config.yml
- 找到
theme: landscape,改成theme: stellar - 保存
第 6 步:本地预览
回到命令行:
1 | pnpm run server |
浏览器打开 http://localhost:4000 就能看到博客。
第 7 步:推送上线
先把代码推到 GitHub(第 2 步的仓库可以直接用):
1 | git init -b main |
然后按”路线一”第 3~5 步在 Cloudflare Pages 部署即可(完整步骤见”部署方案三”)。
部署方案一:GitHub + Vercel + Cloudflare(可选方案)
本站现已改用”部署方案三:Cloudflare Pages”。Vercel 方案仍然完全可用,想用 Vercel 的按下面操作:
- 打开 https://vercel.com ,点 Sign Up → Continue with GitHub 授权登录
- 点 Add New Project(添加新项目),在列表里找到你的
my-blog仓库 → Import(导入) → Deploy(部署) - 仓库里有现成的构建配置,Vercel 会自动识别,等一两分钟出现绿色 Congratulations 即成功,得到
my-blog-xxx.vercel.app预览网址 - 绑定域名:Vercel 项目 Settings(设置)→ Domains(域名)→ Add,输入
blog.example.com,复制它给的 CNAME 值 - 回 Cloudflare DNS → Add record:类型 CNAME、名称
blog、目标粘贴 Vercel 给的值(cname.vercel-dns.com)、保持橙色云 - 以后每发一篇文章,推送到 GitHub 就自动上线
部署方案二:自己的服务器 + 1Panel
想完全自己掌控、境内访问更稳定时,可以部署到自己的 Debian 12 服务器。全程只需要复制一条命令,其余全是鼠标。
第 1 步:安装 1Panel
用服务器商提供的网页终端登录,复制粘贴这一条,回车:
1 | curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sudo bash quick_start.sh |
按提示按几次回车(选默认),完成后记下面板地址、用户名、密码。
第 2 步:下载博客打包文件(不用自己构建)
- 打开你的仓库 → 点 Actions 标签
- 左侧选 Build Blog Package
- 点开最新一条(绿色打勾的)
- 页面底部 Artifacts 处下载 blog-public(就是一个 zip)
每次你更新文章并推送,这里都会自动生成新的 zip。
说明:私有仓库的 Actions 打包会消耗每月 2000 分钟的免费额度(每月 1 号刷新),本任务单次约 2 分钟,正常够用。万一某月额度用完导致这里失败,直接让 AI 帮你打包一份
public.zip,其他步骤照旧。
第 3 步:上传并建站
- 浏览器打开 1Panel,登录
- 左侧 文件 → 进入
/opt/1panel/www/sites/ - 点 上传,选择刚下载的 zip → 上传完点 解压
- 左侧 网站 → 创建网站,类型选 静态网站
- 域名填
blog.example.com,主目录选解压出的文件夹 → 确认
第 4 步:域名解析 + 证书
- 去域名商 / Cloudflare,把
blog.example.com的解析改成 A 记录 → 服务器 IP(原来是解析到 Vercel / Cloudflare Pages,改成 A 记录) - 回 1Panel → 网站 → 打开你的网站 → HTTPS → 申请证书 → 选 Let’s Encrypt → 确认
- 等一分钟,https://blog.example.com 就是你的博客
第 5 步:安全设置 + 每周自动维护
- 1Panel → 计划任务 → 创建计划任务
- 类型选 Shell,执行周期选每周(建议周日凌晨)
- 把下面内容整体复制粘贴到”命令”框:
1 | export DEBIAN_FRONTEND=noninteractive |
- 保存后点 执行 跑一次,看日志成功即可
这个任务每周自动:更新系统、清理垃圾、限制日志;第一次跑还会完成 1G Swap、禁 Ping、防火墙、fail2ban。
第 6 步:以后更新
- 额度正常:去 GitHub Actions 重新下载最新
blog-public,在 1Panel 文件里上传、解压覆盖,完成。 - 额度用完(每月 1 号刷新):让 AI 帮你重新打包一份
public.zip,再上传、解压覆盖。
部署方案三:GitHub + Cloudflare Pages(推荐,本站现用)
免费、不限流量、自带全球 CDN,构建在 Cloudflare 那边自动完成,不占 GitHub Actions 额度,源码仓库私有也照常部署。构建命令是 pnpm run build(就是 hexo generate,主域名已经写死在配置里,不需要任何”vercel 专用”配置)。
第 1 步:连接仓库并部署
- 打开 https://dash.cloudflare.com 登录(没有就先注册,并把域名托管到 Cloudflare:Add a site → 选 Free 套餐 → 去域名注册商把 NS 记录改成 Cloudflare 给的)
- 左侧 Workers 和 Pages → Pages → 创建 → 连接到 Git(Connect to Git)
- 第一次使用会跳去授权 GitHub:允许 Cloudflare Pages 访问(私有仓库也可以)
- 仓库列表里选
my-blog→ 开始设置(Begin setup) - 构建配置照填:
| 配置项 | 值 |
|---|---|
| 生产分支 | main |
| 构建命令 | pnpm run build |
| 构建输出目录 | public |
- Node 版本不用设置(默认 Node 22)
- 点 保存并部署(Save and Deploy),等一两分钟构建完成,得到
xxx.pages.dev预览网址 - 以后每次推送到
main都会自动重新构建上线
第 2 步:绑定域名
- Pages 项目里 → 自定义域(Custom domains) → 设置自定义域
- 输入
blog.example.com→ 继续 - 提示激活 DNS 时点 激活(自动加好橙色云记录)
- 等几分钟证书签发完成,https://blog.example.com 就是你的博客
想先测试再切主域名?先绑
cf.blog.example.com对比速度,确认更快再把主域名绑上来。
第 3 步:缓存加速(强烈建议)
静态博客整站都可以缓存。缓存已经写进仓库的 source/_headers 文件(Hexo 构建时会自动放进 public/),Cloudflare Pages 每次部署都会自动应用,不用在后台手动配规则:
/css/、/js/、/images/静态文件:缓存 1 个月,浏览器本地也缓存 1 个月,老访客二次打开几乎零加载- 页面(HTML 等):由 Cloudflare Pages 默认的实时校验(ETag)保证拿到的一定是新版,发完文章推上去就能看到,不用清缓存
Cloudflare 免费版本身还会自动开 Brotli 压缩和 HTTP/3,不用额外设置。
想验证缓存生效:部署完成后打开 https://blog.example.com ,按 F12 → Network,点开一个文件看响应头里的 cache-control。
静态文件因为有新版本时基本是新的路径或查询参数(如 main.css?v=1.44.0),所以不用担心旧缓存;如果哪天改了同路径文件想立刻全部生效,去 Cloudflare 左侧 缓存 → 清除缓存 → 清除所有内容(Purge Everything) 即可。
日常使用小结
- 写文章:GitHub 网页 →
source/_posts/→ Add file(或本地写完推送) - 发动态:编辑
source/cross/index.md - 改标题/头像:编辑
_config.yml和source/images/avatar.jpg - 评论:文章底部用 giscus,评论存在公开评论仓库的 Discussions 里
- 图片:优先用 Cloudflare R2(见第 8 步),文章里贴链接
常见问题
| 问题 | 解决 |
|---|---|
| 部署失败(Cloudflare Pages) | 检查构建命令是 pnpm run build、输出目录是 public;失败日志发我看 |
| 部署失败(Vercel) | 确认导入的是你的仓库且构建配置没被改过;失败日志发我看 |
| 域名打不开 | DNS 生效需要几分钟到几小时;Cloudflare 代理开启时 SSL 模式选”完全” |
| 文章不更新 | 提交后等 1~2 分钟;刷新时按 Ctrl+F5 |
| 图片裂图 | 检查图床链接能不能直接在浏览器打开 |
| 图片想放 R2 存储 | 见第 8 步,上传后链接形如 https://img.你的域名/图片名.jpg |
| 评论不能用 | 评论存放在公开的评论仓库(giscus):仓库要公开、Discussions 要开启、giscus App 要安装到该仓库;源码仓库私有不影响 |