让每个前端项目在构建完成后,3 秒内拥有一个独立的子域名展示站点——无需额外配置、无需支付流量费用、无需运维服务器。
基于 Cloudflare R2 + Cloudflare Worker 的泛域名静态站点托管平台。
lemonhub/
├── apps/
│ ├── web/ # Next.js 14 控制台与落地页
│ └── worker/ # Cloudflare Worker API + 泛域名托管
├── packages/
│ └── shared/ # 共享类型定义
└── infra/ # 部署与配置模板
- 存储:Cloudflare R2(出站流量免费)
- 计算/路由:Cloudflare Worker + TypeScript
- 数据库:Cloudflare D1(项目、版本、用户、Session)
- 前端:Next.js 14 App Router + Tailwind CSS + Framer Motion + React-Three-Fiber
- 部署:Wrangler CLI
- ✅ 自建用户系统(邮箱 + 密码)
- ✅ 无需邮箱验证,注册即用
- ✅ 每 IP 最多注册 3 个账号,防止滥用
- ✅ 深浅色双主题切换
- ✅ React-Three-Fiber 3D 柠檬 Hero / 部署进度动画
- ✅ Web 控制台:创建项目、上传 ZIP、自动分配子域名
- ✅ Worker 泛域名路由:
*.lemonhub.net - ✅ 版本管理与一键回滚
- ✅ ZIP 炸弹与文件类型防护
pnpm installcp .env.example .env
cp apps/web/.env.local.example apps/web/.env.local根据你的环境修改 NEXT_PUBLIC_LEMONHUB_API_URL(本地默认为 http://127.0.0.1:8787)。
pnpm db:migratepnpm --filter worker devWorker 将运行在 http://127.0.0.1:8787。
pnpm --filter web dev- 在 Cloudflare 控制台创建 R2 bucket
lemonhub-assets和 D1 数据库lemonhub_db。 - 更新
apps/worker/wrangler.toml中的database_id和bucket_name。 - 执行数据库迁移:
wrangler d1 execute lemonhub_db --file=./apps/worker/migrations/0001_init.sql- 部署:
pnpm deploy:worker将 apps/web 部署到任意支持 Next.js 的平台(Vercel / Cloudflare Pages 等),并设置环境变量 NEXT_PUBLIC_LEMONHUB_API_URL 指向 Worker 域名。
在 Cloudflare 中为 lemonhub.net 添加:
*.lemonhub.netAAAA 记录指向100::- 开启橙色云朵(代理)
- SSL/TLS 模式设为“完全”或“灵活”,泛域名 SSL 证书会自动覆盖所有一级子域名
- 注册账号(无需验证)
- 控制台创建项目,获得子域名
- 进入部署页,拖入构建产物 ZIP 或文件夹
- 3 秒后访问
https://<子域名>.lemonhub.net
- 密码使用 PBKDF2(60 万次迭代)哈希存储
- Session Token 使用 SHA-256 哈希后存入 D1,支持登出失效
- 单 IP 注册账号上限 3 个
- 单 ZIP 最大 100MB,解压后最大 250MB
- 子域名黑名单保留关键名称
MIT