本指南将详细介绍如何将 One Tracker AI模型价格对比平台部署到 Cloudflare Pages & Workers 生产环境。
🤖 特别说明: 本项目是一个完整的 AI 代理服务,需要配置 GitHub OAuth、API 密钥加密等特殊环境变量。
- 注册 Cloudflare 账户
- 确保账户已验证邮箱
- 准备一个域名 (可选,Cloudflare 会提供子域名)
在部署前,您需要准备以下关键环境变量:
- 访问 GitHub Developer Settings
- 点击 "New OAuth App"
- 填写应用信息:
- Application name:
One Tracker(或您的应用名称) - Homepage URL:
https://your-domain.com(您的实际域名) - Authorization callback URL:
https://your-domain.com/auth/callback
- Application name:
- 创建后记录 Client ID 和 Client Secret
# 生成 256 位的加密密钥(用于 API 密钥加密)
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"# 确保代码已推送到 Git 仓库 (GitHub/GitLab)
git add .
git commit -m "Ready for deployment"
git push origin main在部署前,建议先在本地测试完整配置:
# 复制环境变量模板
cp env.example .env
# 编辑 .env 文件,填入实际值
nano .env.env 文件示例:
# GitHub OAuth 配置
GITHUB_CLIENT_ID=your_github_client_id
GITHUB_CLIENT_SECRET=your_github_client_secret
# 加密密钥(32字节十六进制字符串)
ENCRYPTION_KEY=your_generated_256_bit_key_in_hex
# 应用基础 URL(本地开发时为 localhost)
APP_BASE_URL=http://localhost:8787# 启动本地开发服务器测试
pnpm dev
# 测试 GitHub OAuth 登录功能
# 访问 http://localhost:8787 并尝试登录# 创建生产 D1 数据库
npx wrangler d1 create your-prod-db-name
# 示例输出:
# ✅ Successfully created DB 'your-prod-db-name'
#
# [[d1_databases]]
# binding = "DB"
# database_name = "your-prod-db-name"
# database_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"将上面的输出信息更新到 wrangler.jsonc:
📝 注意:
GITHUB_CLIENT_ID、GITHUB_CLIENT_SECRET和ENCRYPTION_KEY等敏感变量应该在 Cloudflare Pages Dashboard 中设置。
# 应用数据库迁移到生产环境
pnpm db:migrate:prod
# 验证迁移成功
npx wrangler d1 execute your-prod-db-name --env production --command "SELECT name FROM sqlite_master WHERE type='table';"- 登录 Cloudflare Dashboard
- 进入 Workers & Pages → Pages
- 点击 "Create a project"
- 选择 "Connect to Git"
- 授权并选择你的 Git 仓库
在部署配置页面设置:
| 配置项 | 值 |
|---|---|
| 项目名称 | your-app-name |
| 生产分支 | main |
| 构建命令 | pnpm build:prod |
| 部署命令 | npx wrangler deploy --env production |
| 根目录 | / |
在 Settings → Environment variables 中添加以下环境变量:
# 基础配置
NODE_ENV=production
VITE_PORT=5175
# GitHub OAuth 配置(从步骤2获取)
GITHUB_CLIENT_ID=your_github_client_id
GITHUB_CLIENT_SECRET=your_github_client_secret
# API 密钥加密(从步骤2生成)
ENCRYPTION_KEY=your_generated_256_bit_key_in_hex
# 应用基础 URL(替换为您的实际域名)
APP_BASE_URL=https://your-app-name.pages.dev
⚠️ 安全提醒:
GITHUB_CLIENT_SECRET和ENCRYPTION_KEY是敏感信息,务必保密- 在 Cloudflare Pages 中设置的环境变量会自动加密存储
APP_BASE_URL必须与 GitHub OAuth 应用配置的域名一致
在 Settings → Functions 中设置:
- Compatibility date:
2024-07-29 - Compatibility flags:
nodejs_compat
{ "env": { "production": { "d1_databases": [ { "binding": "DB", "database_name": "your-prod-db-name", // 👈 替换这里 "database_id": "your-database-id", // 👈 替换这里 "migrations_dir": "drizzle", }, ], "vars": { "NODE_ENV": "production", "APP_BASE_URL": "https://your-app-name.pages.dev", // 👈 替换为实际域名 }, "assets": { "binding": "ASSETS", "directory": "./dist/client", }, }, }, }