Cloudflare
学习如何将您的项目部署到 Cloudflare Workers 平台
本文档将帮助您使用 OpenNext.js 将 MkSaaS 项目部署到 Cloudflare Workers 平台。
重要:使用 Cloudflare 分支
部署到 Cloudflare Workers 需要使用 cloudflare
分支而不是 main
分支。此分支包含必要的 OpenNext.js 配置和 针对 Cloudflare 特定平台的适配。
前提条件
在将项目部署到 Cloudflare Workers 之前,请确保您有:
关于 Worker 大小限制的说明
Cloudflare Worker 有部署文件的大小限制,在 Workers 免费计划上为 3 MB,在 Workers 付费计划上为 10 MB。构建 Worker 后,wrangler
将显示原始大小和压缩大小:
Total Upload: 13833.20 KiB / gzip: 2295.89 KiB
只有后者(压缩大小)对 Worker 大小限制很重要,所以如果您的项目大于 3 MB,您需要订阅 Workers 付费计划。
部署步骤
切换到 Cloudflare 分支
克隆 MkSaaS 模板仓库的 cloudflare
分支,并新建 GitHub 仓库,将代码推送到该仓库:
# Clone the cloudflare branch of the MkSaaS template repository
git clone -b cloudflare https://github.com/MkSaaSHQ/mksaas-template.git <your-project-name>
cd <your-project-name>
# Add the upstream repository and fetch the latest changes
git remote add upstream https://github.com/MkSaaSHQ/mksaas-template.git
git fetch upstream
# Remove the origin repository and add your new GitHub repository
git remote remove origin
git remote add origin <your-repository-url>
# Rename the branch to main and push the changes to the origin repository
git branch -M main
git push -u origin main
安装 Wrangler CLI
安装 Wrangler CLI,然后运行 wrangler login
登录到您的 Cloudflare 账户。
pnpm install -g wrangler
# 登录到您的 Cloudflare 账户
wrangler login
设置 PostgreSQL 数据库
如果您使用默认的 PostgreSQL 数据库配置,您需要设置一个 PostgreSQL 数据库。
- 对于生产环境,您可以使用托管 PostgreSQL 数据库,如 Neon 或 Supabase。
- 对于本地开发,请参考数据库文档创建本地 PostgreSQL 实例。
准备好 PostgreSQL 数据库后,记下此格式的连接字符串:
postgres://user:password@HOSTNAME_OR_IP_ADDRESS:PORT/database_name
数据库创建完成之后,需要参考数据库文档对数据库进行初始化。
配置本地开发数据库
对于本地开发,使用您的本地 PostgreSQL 连接字符串更新 wrangler.jsonc
文件:
{
"hyperdrive": [
{
"binding": "HYPERDRIVE",
"id": "YOUR_HYPERDRIVE_ID_HERE",
"localConnectionString": "postgres://user:password@localhost:5432/your_local_database"
}
]
}
将 localConnectionString
替换为您的实际本地数据库连接字符串。
配置 Hyperdrive 绑定
Hyperdrive 通过池化连接和缓存请求来加速数据库查询。执行以下命令为您的生产数据库创建 Hyperdrive 配置:
npx wrangler hyperdrive create <NAME_OF_HYPERDRIVE_CONFIG> --connection-string="postgres://user:password@HOSTNAME_OR_IP_ADDRESS:PORT/database_name"
将连接字符串替换为您的实际 PostgreSQL 连接字符串。成功创建后,您将收到一个 Hyperdrive ID,您也可以在 Cloudflare 仪表盘中查看。
使用您的 Hyperdrive ID 更新 wrangler.jsonc
文件:
{
"hyperdrive": [
{
"binding": "HYPERDRIVE",
"id": "YOUR_HYPERDRIVE_ID_HERE"
}
]
}
禁用 Hyperdrive 查询缓存
- 进入到 Cloudflare 仪表盘
- 导航到
Storage & Databases
→Hyperdrive
- 点击创建的 Hyperdrive 配置,导航到
Settings
- 点击
Disable Caching
配置环境变量
为开发和生产环境设置环境变量:
-
对于开发:复制示例文件并配置它们
cp env.example .env cp dev.vars.example .dev.vars
-
配置变量:按照环境配置文档在
.env
文件中设置所有必需的环境变量,并保持.dev.vars
不变。
有 2 个环境变量您需要为本地开发特别注意:
NEXT_PUBLIC_BASE_URL
:您应用程序的基础 URL,对于本地开发,将其设置为http://localhost:8787
而不是http://localhost:3000
,因为网站将由 opennext-cloudflare 运行,默认情况下会自动在端口8787
上运行。DATABASE_URL
:数据库的连接字符串,对于本地开发,将其设置为本地数据库连接字符串,而不是生产托管数据库连接字符串。
生成类型
配置 .env
和 wrangler.jsonc
文件后,生成 Cloudflare 特定的类型:
pnpm run cf-typegen
此命令将自动生成包含 Cloudflare Worker 运行时环境类型定义的 cloudflare-env.d.ts
文件。
创建 Cloudflare Worker 项目
- 进入到 Cloudflare 仪表盘
- 导航到
Compute(Workers)
→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 中:
# 创建一个 .env.production 文件,并复制 .env 文件中的所有变量
cp .env .env.production
# 更新 .env.production 文件中的环境变量
# 例如,您需要更新 NEXT_PUBLIC_BASE_URL 和 DATABASE_URL 环境变量
# 使用 Wrangler CLI 设置环境变量
# https://developers.cloudflare.com/workers/wrangler/commands/#secret-bulk
# 将 .env.production 文件中的所有变量设置为 Cloudflare Worker 的构建环境变量
wrangler secret bulk .env.production
部署网站
您可以通过两种方式部署应用程序:
选项 1:自动部署
- 将更改推送到
main
分支 (默认使用main
分支) - Cloudflare 将自动触发构建和部署
选项 2:手动部署
-
直接从本地机器部署:
pnpm run deploy

最佳实践
-
使用
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 日志进行调试
默认情况下,MkSaaS 模板已在
wrangler.jsonc
中启用了可观察性。您可以在项目设置的可观察性部分启用 Worker 日志。这可能需要创建一个新的 R2 存储桶来保存日志数据,需按照仪表盘上的引导进行操作。成功启用后,您可以在日志选项卡中查看应用程序的运行时日志。请查看 Cloudflare Wrangler 配置了解更多详细信息。
常见问题
-
构建大小过大:如果您的 Worker 超过大小限制,请考虑:
- 升级到 Workers 付费计划
- 优化您的包大小
- 移除不必要的依赖项
-
数据库连接问题:确保您的 Hyperdrive 配置正确,并且您的 PostgreSQL 数据库可访问。
-
环境变量问题:确保所有环境变量都在 Cloudflare 的构建和运行时环境中配置。
-
类型错误:在任何配置更改后运行
pnpm run cf-types
以重新生成类型定义。
参考
- Cloudflare Workers 文档
- Cloudflare Wrangler 配置
- 使用 Cloudflare Workers 连接到 PostgreSQL 数据库
- Cloudflare Workers 定价
- Cloudflare Hyperdrive 配置
- OpenNext.js Cloudflare
- OpenNext.js Cloudflare | 开发和部署
视频教程
下一步
现在您了解了如何将网站部署到 Cloudflare Workers,请探索其他相关主题: