如图,你现在看到的这个网站就是我之前网站的样子,还原度99.8%。
网址:https://inurl.top/
我为什么要迁移网站?
当初为了懒得备案,也因为本站有一些不可描述的内容,所以选择海外服务器:vultr
每月的消费是6美刀。
以上是消费账单。 之所以选vultr服务器,是因为这个服务器在海外还是非常出名的,价格不贵,还能更换公网IP。 (如果你需要海外服务器,不妨PING一下他的节点,看看速度咋样,传送门:https://ping.inurl.link/vultr/)
很大一部分原因是为了开源节流,我才决定把网站迁到cloudcflare上。
除了域名要钱,其他成本为0
废话不多说了,直接上干货吧。
一、技术架构如下:
| 角色 | 用的技术 | 一句话说明 |
|---|---|---|
| 网页生成 | Hugo(静态站点生成器 / Static Site Generator) | 把 Markdown 文章 + 模板,编译成一堆纯 HTML 文件 |
| 托管 / 运行 | Cloudflare Pages(云端静态托管 + 无服务器函数) | 免费、全球加速、自带「云端小程序」能力 |
| 代码 & 文章存储 | GitHub 仓库(相当于云端硬盘) | 文章就是仓库里的 .md 文件,改文章 = 改仓库文件 |
| 文章后台 | 自研纯静态页面 static/editor.html | 浏览器里直接写文章,免装任何软件 |
| 登录授权 | GitHub OAuth(第三方登录授权协议) | 用你的 GitHub 账号登录后台 |
这是一个纯静态网站,但也可以理解为一个非纯静态网站。
因为动态网站的文章发布功能它都有,基本上跟你正常部署网站的功能一样。
二、整体架构
- 访客打开网页 → 由 Cloudflare 的 CDN(内容分发网络,把文件缓存到离用户最近的节点)返回静态页面;
- 站长打开
/editor.html→ 用 GitHub 账号登录后,通过 Functions(云端小程序)读写 GitHub 仓库里的文章; - 侧边栏的「每日一图」由
bing-image函数每天从微软 Bing 拉一张图。
三、先看懂两条「数据流」(很重要)
新手最容易懵的一点:「站点跑在 Cloudflare 上,为什么还要 GitHub?」 因为 Cloudflare 负责「跑」和「加速」,GitHub 负责「存」和「记版本」。两条流分开看就清楚了:
① 部署流(改代码 / 改配置时走这条)
你本地改文件 → git push 到 GitHub → Cloudflare 检测到新提交 → 自动 hugo 构建 → 全球 CDN 上线
② 写作流(用网页后台写文章时走这条)
后台写文章点「发布」 → 函数把 .md 写进 GitHub 仓库(= 一次 commit)→ Cloudflare 自动重新构建 → 文章上线
记住一句话:GitHub 是「源头」,Cloudflare 是「窗口」。后台写文章本质上也是在改 GitHub 仓库,所以登录后台要用 GitHub 账号。下面第 4 步的 OAuth 应用,就是给后台一把「经你授权后改你仓库」的钥匙。
四、开始前的准备
| 需要 | 免费吗 | 干嘛用 |
|---|---|---|
| 电脑(Win / Mac / Linux 都行) | ✅ | 本地写代码、跑命令 |
| Git | ✅ | 把代码同步到 GitHub |
| Hugo(扩展版 / extended) | ✅ | 把文章编译成网页 |
| GitHub 账号 | ✅ | 存代码 + 后台登录账号 |
| Cloudflare 账号 | ✅ | 免费托管站点 |
安装 Hugo(任选一种,必须装扩展版):
# macOS(用 Homebrew 包管理器)
brew install hugo
# Windows(用 Chocolatey 包管理器)
choco install hugo-extended
# 验证安装成功(能看到版本号就行)
hugo version
小知识:Hugo 有「标准版」和「扩展版」。本站用了 SCSS、图片处理等特性,必须装扩展版(extended),否则构建会报错。Windows 上
choco install hugo-extended装的就是扩展版;macOS 用brew install hugo默认已是扩展版。
装 Git(若还没装): 去 https://git-scm.com/downloads 下载对应系统版本,一路下一步即可。装完在命令行输入 git --version 能看到版本号就成功。
五、拿到源码并本地运行
方式 A:用 Git 克隆(推荐,方便后续更新)
git clone https://github.com/gaomeluo/inurl-top.git
cd inurl.top
hugo server -D # 启动本地预览,带 -D 才会显示草稿
终端会输出一个地址(通常是 http://localhost:1313/),浏览器打开就能看到站点,改文件会自动刷新。
方式 B:直接解压源码包
如果你拿到的是 inurl.top-source.zip:
unzip inurl.top-source.zip
cd inurl.top
hugo server
源码包里已经排除了构建产物(
public/)和迁移备份(_server_export/),解压即是干净可运行的源码。
目录结构一览
关键目录记住三个就够:
content/—— 你的文章都在这里(Markdown 文件,后台可直接编辑);layouts/—— 页面长什么样(模板);functions/—— 云端小程序(登录、接口代理等)。
六、把站点部署上线(Cloudflare Pages)
本地能跑之后,把它发布到互联网,让所有人都能访问。
第 1 步:把代码推到 GitHub
git add -A
git commit -m "first commit"
git push origin main
如果你是用「方式 B 解压包」拿到的源码,需要先在自己 GitHub 上新建一个空仓库,再把本地代码关联并推上去(仓库名随意,例如
my-blog)。
第 2 步:Cloudflare 关联 GitHub
- 登录 Cloudflare 控制台 → 左侧 Workers 和 Pages → 创建 → 选 Pages;
- 选 连接到 Git → 授权并选中你的仓库(如
gaomeluo/inurl-top); - 构建设置填写如下(对照下图):
| 配置项 | 填写值 | 说明 |
|---|---|---|
| 框架预设(Framework preset) | Hugo | 让 Cloudflare 自动装好 Hugo |
| 构建命令(Build command) | hugo --minify | 编译并压缩网页 |
| 构建输出目录(Build output) | public | 编译结果放在这里 |
| 分支 | main | 监听这个分支的推送 |
若 Cloudflare 默认的 Hugo 版本太旧导致构建失败,可在「环境变量」里加
HUGO_VERSION = 0.145.0(见上图右下角提示)。
第 3 步:配置登录所需的环境变量
后台要用 GitHub 账号登录,需要两个环境变量(在构建设置的 环境变量 / Environment Variables 里加,作用域选 Production):
| 变量名 | 值 | 说明 |
|---|---|---|
GITHUB_CLIENT_ID | Ov23liJ4fvPrfXbIBSdq | GitHub OAuth 应用的 ID(公开) |
GITHUB_CLIENT_SECRET | 你自己的 Secret | 见下方「第 4 步:创建 GitHub OAuth 应用」 |
⚠️ 改完环境变量后必须重新部署一次(点「重试部署」或推一个小提交),否则函数读不到新值。
第 4 步:创建 GitHub OAuth 应用(仅需一次)
- GitHub → 右上角头像 → Settings → 最下方 Developer settings → OAuth Apps → New OAuth App;
- 按下图填写:
- Application name:
inurl.top - Homepage URL:
https://inurl.top - Authorization callback URL:
https://inurl.top/auth/callback
- Application name:
- 创建后得到 Client ID(填第 3 步的环境变量)和 Client Secret(填第 3 步的环境变量);
- 保存,触发一次部署。
注意:回调地址(Authorization callback URL)必须是
https://你的域名/auth/callback,否则登录会卡在授权页回不来。
部署流程总览
之后你只要 git push,Cloudflare 会在 1–2 分钟内自动重新构建并上线,不需要手动操作。
七、用网页后台写文章
后台是一个纯网页,地址是 https://你的域名/editor.html。
登录流程
- 打开
/editor.html→ 点 使用 GitHub 登录; - 弹出小窗与本站完成握手 → 跳转到 GitHub 授权页;
- 点「Authorize」同意授权;
- 小窗自动关闭,token(登录凭证)存在你浏览器本地,进入后台。
登录即代表你授权本站在你的 GitHub 仓库
main分支提交改动。保存 = 一次提交 = 自动上线(见第二节「写作流」)。
后台界面一览
- 顶栏:左侧是品牌字「⌘ 顶级索引 / 文章后台」+「退出」;右侧是「+ 新建 / 保存草稿 / 发布」。
- 左侧文章列表:自动列举
content/下所有.md(含子目录),按日期倒序;顶部搜索框按标题 / 文件名过滤。 - 右侧编辑器:
- 大标题输入框 + 下方一行紧凑元信息(发布路径、标签、分类、封面图、日期;标签/分类为下拉,可直接输入新值);
- 工具栏(选中文字点按钮即可加格式,免手写 Markdown):加粗、斜体、标题、插入超链接、插入外链图片、上传本地图片入仓、引用、行内代码、代码块、无序/有序列表;
- 下半是 Markdown 正文(带行号)与实时预览分屏。
八、各功能详解
- 保存草稿 → 写入
draft: true,Hugo 生产构建默认不收录,文章不会上线,可继续修改; - 发布 → 去掉草稿标记并补齐
date(留空时取今天),构建后正常上线; - 本地图片上传入仓 → 点工具栏「上传」图标 → 选图 → 以 base64 存入仓库
static/img/uploads/,自动在光标处插入; - 删除 → 有二次确认,删的是仓库里的
.md; - 改发布路径(slug) → 已发布文章也能改 slug(例如
apitoken→apitoken-v2),保存后文件会移动到新路径并删掉旧的;注意:原 URL 会立即 404,要保旧链接请在functions/archives/[[path]].js里加 301 重定向; - 未保存提醒 → 有改动但未保存时,离开页面会弹浏览器原生确认,防丢稿。
看到这里,你基本上就能成功的实现0成本搭建一个“动态”的个人网站了。
当然这网站是海外的服务器,所以速度上肯定跟不上国内的服务器。如果你想要速度,那么建议选择国内的服务器,国内服务器建站教程参考:《从0到1,手把手教你创建网站【保姆级教程】》