Cloudflare (使用 PG 数据库)
学习如何将您的项目部署到 Cloudflare Workers 平台
Cloudflare (使用 PG 数据库)
本文档将帮助您将 LandingMore 项目部署到 Cloudflare Workers 平台。
重要:使用 cloudflare 分支
部署到 Cloudflare Workers 需要使用 cloudflare 分支而不是 main 分支。此分支包含必要的 OpenNext.js 配置和 针对 Cloudflare 特定平台的适配。
如果您希望使用 Cloudflare D1 数据库,请参考 Cloudflare 部署(使用 D1 数据库)。
前提条件
在将项目部署到 Cloudflare Workers 之前,请确保您有:
关于 Worker 大小限制的说明
Cloudflare Worker 有部署文件的大小限制,在 Workers 免费计划上为 3 MB,在 Workers 付费计划上为 10 MB。构建 Worker 后,wrangler 将显示原始大小和压缩大小:
只有后者(压缩大小)对 Worker 大小限制很重要,所以如果您的项目大于 3 MB,您需要订阅 Workers 付费计划。
部署步骤
设置 PostgreSQL 数据库
如果您使用默认的 PostgreSQL 数据库配置,您需要设置一个 PostgreSQL 数据库。
- 对于生产环境,您可以使用托管 PostgreSQL 数据库,如 Neon 或 Supabase。
- 对于本地开发,请参考数据库文档创建本地 PostgreSQL 实例。
准备好 PostgreSQL 数据库后,记下此格式的连接字符串:
数据库创建完成之后,需要参考数据库文档对数据库进行初始化。
配置本地开发数据库
对于本地开发,使用您的本地 PostgreSQL 连接字符串更新 wrangler.jsonc 文件,替换 localConnectionString 为您实际的本地数据库连接字符串:
配置 Hyperdrive 绑定
Cloudflare Hyperdrive 通过池化连接和缓存请求来加速数据库查询。在创建 Hyperdrive 配置前,建议您在数据库(如 Neon)中为其创建一个专用用户。
1. 在 Neon 中创建一个 Hyperdrive 用户(推荐) 为了安全和管理方便,建议为 Hyperdrive 创建一个独立的数据库角色:
- 登录 Neon,进入您的项目。
- 在侧边栏选择 Branches,然后选择要使用的分支。
- 导航到 Roles & Databases 部分。
- 点击 New Role,创建一个新角色(例如命名为
hyperdrive-user)。 - 复制生成的新密码,在下一步的连接字符串中会用到。
2. 获取 Neon 数据库连接字符串
- 在 Neon 控制台的 Dashboard 页面,找到 Connection Details 面板。
- 选择正确的 分支、数据库 和刚创建的 角色(例如
hyperdrive-user)。 - 从下拉菜单中选择 Connection String。
- 重要:请取消勾选 “Pooled connection” 选项。因为 Hyperdrive 自身会管理连接池,所以这里需要使用直连字符串。
- 复制生成的连接字符串,格式应类似于:
3. 创建 Hyperdrive 配置 执行以下命令,使用上一步获取的连接字符串为您的生产数据库创建 Hyperdrive 配置:
将 --connection-string 的参数替换为您从 Neon 获取的实际 PostgreSQL 连接字符串。成功创建后,您将收到一个 Hyperdrive ID,您也可以在 Cloudflare 仪表盘中查看。
4. 更新配置文件
使用您的 Hyperdrive ID 更新 wrangler.jsonc 文件:
禁用 Hyperdrive 查询缓存
- 进入到 Cloudflare 仪表盘
- 导航到
Storage & Databases→Hyperdrive - 点击创建的 Hyperdrive 配置,导航到
Settings - 点击
Disable Caching
配置环境变量
为开发和生产环境设置环境变量:
-
对于开发:复制示例文件并配置它们
-
配置变量:按照环境配置文档在
.env文件中设置所有必需的环境变量,并保持.dev.vars不变。
有 2 个环境变量您需要为本地开发特别注意:
NEXT_PUBLIC_BASE_URL:您应用程序的基础 URL,对于本地开发,将其设置为http://localhost:8787而不是http://localhost:3000,因为网站将由 opennext-cloudflare 运行,默认情况下会自动在端口8787上运行。DATABASE_URL:数据库的连接字符串,对于本地开发,将其设置为本地数据库连接字符串,而不是生产托管数据库连接字符串。
生成类型
配置 .env 和 wrangler.jsonc 文件后,生成 Cloudflare 特定的类型:
此命令将自动生成包含 Cloudflare Worker 运行时环境类型定义的 cloudflare-env.d.ts 文件。
创建 Cloudflare Worker 项目
- 进入到 Cloudflare 仪表盘
- 导航到
Compute & AI→Workers and Pages→Create→Import a repository - 选择仓库 (默认使用
main分支) - 配置构建设置:
- 名称:保持与
wrangler.jsonc文件中的name相同 - 构建命令:留空
- 部署命令:
pnpm run deploy - 根目录:保持默认
- 构建环境变量:添加
NEXT_PUBLIC_BASE_URL变量,并设置为https://<your-project-name>.<account>.workers.dev或自定义域名
- 名称:保持与
配置环境变量
有两种方式在 Cloudflare 中配置环境变量:
-
在 Cloudflare Worker 项目的后台设置中,配置环境变量
- 进入
Settings→Variables and Secrets - 点击
+ Add,并添加所有环境变量 - 点击
Deploy保存变量并触发构建和部署
- 进入
-
使用 Wrangler CLI 配置环境变量
创建一个 .env.production 文件,并复制 .env 文件中的所有变量,并更新部分环境变量为线上环境变量的值,然后使用 Wrangler CLI 将所有变量配置批量到 Cloudflare Worker 中:
部署网站
您可以通过两种方式部署应用程序:
选项 1:自动部署
- 将更改推送到
main分支 (默认使用main分支) - Cloudflare 将自动触发构建和部署
选项 2:手动部署
-
直接从本地机器部署:
最佳实践
-
使用
pnpm run dev进行本地开发对于本地开发,优先使用
pnpm run dev命令,因为它允许更快的开发和调试您的 Next.js 应用程序。在此模式下,代码更改通过热重载快速反映代码修改效果。如果您使用pnpm run preview,项目将首先构建并在生产模式下运行,这意味着代码更改需要再次运行pnpm run preview才能生效。如果网站在本地使用
pnpm run dev正常工作,但在生产中表现异常,请检查生产日志以分析问题。如果生产日志难以访问,您可以在本地运行pnpm run preview在类似生产的环境中调试问题。请查看 OpenNext.js Cloudflare | 开发和部署 了解更多详细信息。
-
为本地开发和生产使用不同的数据库
您应该为本地开发和生产使用不同的数据库。对于本地开发,您应该使用数据库文档创建本地 PostgreSQL 实例。对于生产环境,您应该使用托管 PostgreSQL 数据库,如 Neon 或 Supabase。
请查看使用 Cloudflare Workers 连接到 PostgreSQL 数据库了解更多详细信息。
-
启用 Worker 日志进行调试
默认情况下,LandingMore 模板已在
wrangler.jsonc中启用了可观察性。您可以在项目设置的可观察性部分启用 Worker 日志。这可能需要创建一个新的 R2 存储桶来保存日志数据,需按照仪表盘上的引导进行操作。成功启用后,您可以在日志选项卡中查看应用程序的运行时日志。请查看 Cloudflare Wrangler 配置了解更多详细信息。
常见问题
-
构建大小过大:如果您的 Worker 超过大小限制,请考虑:
- 升级到 Workers 付费计划
- 优化您的包大小
- 移除不必要的依赖项
-
数据库连接问题:确保您的 Hyperdrive 配置正确,并且您的 PostgreSQL 数据库可访问。
-
环境变量问题:确保所有环境变量都在 Cloudflare 的 Worker 运行时环境中配置。
-
类型错误:在任何配置更改后运行
pnpm run cf-types以重新生成类型定义。
参考资料
- Cloudflare Workers 文档
- Cloudflare Wrangler 配置
- 使用 Cloudflare Workers 连接到 PostgreSQL 数据库
- Cloudflare Workers 定价
- Cloudflare Hyperdrive 配置
- OpenNext.js Cloudflare
- OpenNext.js Cloudflare | 开发和部署
下一步
现在您了解了如何将网站部署到 Cloudflare Workers,请探索其他相关主题: