domain-showcase部署教程:赛博朋克域名展示站,Cloudflare Pages / Docker 双轨部署

domain-showcase部署教程:赛博朋克域名展示站,Cloudflare Pages / Docker 双轨部署
luolidomain-showcase 部署教程:赛博朋克域名展示站
前言
domain-showcase 是一个赛博朋克风格的个人域名展示主页,自带可视化后台管理系统,支持在线编辑站点内容。它同时提供了 Cloudflare Pages 和 Docker 两套部署方案,前者完全免费(Pages 配额 + KV 免费额度),后者适合已有 VPS 的用户。
- 项目地址:https://github.com/love-ztm/domain-showcase
- 开源协议:ISC
- 演示域名:
oooooooooooo.cc.cd(CC 免费域名,来自 DNSHE)
功能特点
| 功能 | 说明 |
|---|---|
| 🌃 赛博朋克首屏 | 粒子动画背景 + 荧光配色(#00f0ff 青 / #7b2fff 紫),终端打字效果 |
| ⚙️ 后台可视化编辑 | /admin.html 分板块编辑:首屏、关于、技能、项目、链接、页脚、主题 |
| 📝 JSON 直编 | 后台提供原始 JSON 编辑,全部数据一键导出/导入 |
| 📊 技能进度条 | 每一项技能可配置名称、熟练度百分比、emoji 图标 |
| 🗂️ 项目展示 | 项目标题、描述、技术标签、链接卡片 |
| 🔗 社交链接 | GitHub / Twitter / LinkedIn / 邮箱 等链接配置 |
| 🕐 页脚实时时钟 | 可开关的实时时间显示 |
| 🎨 主题自定义 | 主色调、强调色、背景风格(dark/light)即时切换 |
| ☁️ 双轨部署 | Cloudflare Pages(Functions + KV)或 Docker(Express + JSON 文件存储) |
| 🌐 CORS 支持 | API 允许跨域访问,数据层与展示层解耦 |
技术栈
| 类别 | Cloudflare Pages 方案 | Docker 方案 |
|---|---|---|
| 运行平台 | Cloudflare Pages + Functions | Node.js + Express |
| 数据存储 | Cloudflare KV(key: content) |
data/content.json 文件 |
| 前端 | 原生 HTML/CSS/JS(无构建步骤) | 同左 |
| 本地开发 | wrangler pages dev |
npm run dev |
项目结构
1 | domain-showcase/ |
核心思路:前端和 API 共用一套。Cloudflare Pages 方案由 functions/api/content.js 读写 KV,Docker 方案由 server.js 读写 content.json,两端 API 接口完全一致(GET/PUT/PATCH /api/content),所以前端零改动即可切换部署方式。
准备工作
- GitHub 账号 — 用于托管项目代码,并接入 Cloudflare Pages
- Cloudflare 账号 — Dash Cloudflare,绑定或托管一个域名
- Node.js 环境(可选)— 仅在创建 KV、本地调试时需要
部署方式一:GitHub + Cloudflare Pages(免费)
整体流程:推代码到 GitHub → 创建 KV 命名空间 → Cloudflare Pages 连接仓库 → 绑定 KV → 部署完成。
1. 推送项目到 GitHub
1 | cd domain-showcase |
2. 创建 KV 命名空间
安装 wrangler CLI 并登录 Cloudflare:
1 | npm install -g wrangler |
执行后会输出:
1 | {binding = "SITE_CONTENT", id = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"} |
记下这串 KV ID。
3. 确认 wrangler.toml 中的 KV ID
打开 wrangler.toml,确认 kv_namespaces 绑定的是你刚创建的 ID:
1 | name = "domain-showcase" |
💡 仓库里默认带了一个 KV ID,直接部署也能跑;但建议换成自己的命名空间,数据隔离更清晰、管理更方便。
4. 连接 Cloudflare Pages
- 登录 Cloudflare Dashboard
- 进入 Workers 和 Pages → Create application → Pages → Connect to Git
- 授权并选择你的 GitHub 仓库
- 配置构建设置:
- Production branch:
main - Build command:留空(纯静态站,无需构建)
- Build output directory:
public
- Production branch:
- 点击 Save and Deploy
5. 绑定 KV 到 Pages 项目
- 进入刚才创建的 Pages 项目 → Settings → Functions → KV namespace bindings
- 添加绑定:
- Variable name:
SITE_CONTENT(必须和代码里的绑定名一致) - KV namespace:选择第 2 步创建的
SITE_CONTENT
- Variable name:
- 保存后项目会自动重新部署(或手动再部署一次)
查看部署:Deployments 里确认最新部署状态为 Success,域名下的 Functions 部分能看到 functions/api/content。
6. 绑定自定义域名
- 进入项目 Settings → Custom domains → Set up a custom domain
- 输入你的域名(例如
oooooooooooo.cc.cd) - 如果域名在 Cloudflare DNS 托管,会自动添加 DNS 记录;否则按提示手动添加 CNAME 指向
xxx.pages.dev
7. 验证部署
1 | # API 是否正常读出内容 |
返回 { "ok": true, "data": {...} } 即表示 KV 绑定成功。
部署方式二:Docker(VPS 部署)
适合已经有 VPS(如国内/海外小鸡)的用户,数据直接存在服务器的 content.json 文件里。
1. 上传项目到服务器
1 | # 方式 A:通过 Git 拉取 |
2. 构建并运行
1 | cd /opt/domain-showcase |
⚠️ 记得挂载
-v ...:/app/data数据卷!后台编辑的内容写入data/content.json,不挂载的话容器重建后修改会丢失。
3. 验证
1 | # 查看容器状态 / 日志 |
4. Nginx 反向代理(可选)
通过域名访问时,在 Nginx 里反代到 3000 端口:
1 | server { |
5. 配置 HTTPS(可选)
1 | apt install certbot python3-certbot-nginx |
API 接口说明
| 方法 | 路径 | 说明 |
|---|---|---|
GET |
/api/content |
读取全部站点内容(KV/文件无数据时返回内置默认内容兜底) |
PUT |
/api/content |
整份覆盖保存内容(后台「保存」时调用) |
PATCH |
/api/content/:section |
只更新单个板块(hero / about / skills / projects / links / footer / theme) |
OPTIONS |
/api/content |
CORS 预检,允许跨域 |
Cloudflare 方案中,functions/api/content.js 内置了 DEFAULT_CONTENT:KV 里没有任何数据时,自动返回默认内容,所以首次部署页面不会空,修改前访问后台都是默认展示效果。
管理后台使用
部署完成后访问 /admin.html 即进入后台,左侧按板块切换编辑:
| 板块 | 可编辑内容 |
|---|---|
| 首屏 | 域名标题、副标题、描述、粒子动画开关 |
| 关于 | 个人简介、头像、统计数字(经验/项目/客户) |
| 技能 | 技能名称、熟练度(0-100)、emoji 图标 |
| 项目 | 项目标题、描述、技术标签、链接 |
| 链接 | GitHub / Twitter / LinkedIn / Email 等 |
| 页脚 | 页脚文字、实时时钟开关 |
| 主题 | 主色调、强调色、背景风格 |
| JSON 编辑 | 直接编辑完整 JSON,适合批量修改/格式化数据 |
编辑完点击 保存,会调用 PUT /api/content 写入 KV(或 content.json),页面顶端出现「已保存 ✓」提示,刷新主页即可看到效果。
🔒 安全提醒:当前版本后台没有登录鉴权,任何能访问
/admin.html的人都能改内容。公开部署建议在 Cloudflare 给/admin*路径加上 Cloudflare Access 保护,或用 Vercel/CF 等平台的访问密码功能兜底。
常见问题
Q:KV 绑定了但 API 还是返回默认内容?
A:这是正常的——KV 里还没有数据时会用内置 DEFAULT_CONTENT 兜底。去后台改一下任意板块点保存,就会写入 KV 了。
Q:后台保存后主页没变化?
A:确认保存提示「已保存 ✓」出现;Cloudflare 方案保存的是 KV,主页通过 GET /api/content 读取,无缓存问题。如果没变化,检查浏览器控制台是否有 CORS / 404 报错。
Q:Pages 构建失败?
A:这是纯静态站,Build command 必须留空,输出目录填 public。如果填了 npm run build 之类会直接失败。
Q:KV 绑定名需要注意什么?
A:绑定名必须严格是 SITE_CONTENT,与 functions/api/content.js 里的 env.SITE_CONTENT 一致,大小写也要一致。
Q:Docker 重启容器后后台改的内容没了?
A:没挂载数据卷。启动命令里加上 -v /opt/domain-showcase/data:/app/data,内容持久化在服务器的 content.json 中。
Q:怎么把 Cloudflare 方案改成 Docker 方案?
A:前端和 API 接口完全一致,把 functions/api 换成 server.js 跑起来即可,前端代码零改动;数据从 KV 迁到 content.json 即可。
小结
domain-showcase 的核心亮点是一套前端双轨部署:
- ☁️ Cloudflare Pages + KV:免服务器、免备案、全球 CDN,适合个人展示页,成本为零
- 🐳 Docker + Express:数据落在自己 VPS 的 JSON 文件里,适合已有服务器、想完全掌控数据的场景
配合免费的 CC 域名(.cc.cd 等)和 Cloudflare 免费套餐,一个赛博朋克风格的域名展示站十分钟就能上线。部署中遇到问题欢迎在评论区交流~







