LogoMkSaaS文档
网站部署

Cloudflare

学习如何将您的项目部署到 Cloudflare Workers 平台

本文档将帮助您使用 OpenNext.js 将 MkSaaS 项目部署到 Cloudflare Workers 平台。

重要:使用 Cloudflare 分支

部署到 Cloudflare Workers 需要使用 cloudflare 分支而不是 main 分支。此分支包含必要的 OpenNext.js 配置和 针对 Cloudflare 特定平台的适配。

前提条件

在将项目部署到 Cloudflare Workers 之前,请确保您有:

  1. 包含项目代码的 Git 仓库(如 GitHub
  2. Cloudflare 账户,如果您没有,请在这里注册
  3. PostgreSQL 数据库(如果使用默认的数据库配置

关于 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:

pnpm install

这将安装所有依赖项,包括 Cloudflare Workers 部署所需的 Wrangler CLI 工具。

安装 Wrangler CLI

安装 Wrangler CLI,然后运行 wrangler login 登录到您的 Cloudflare 账户。

pnpm install -g wrangler

# 登录到您的 Cloudflare 账户
wrangler login

设置 PostgreSQL 数据库

如果您使用默认的 PostgreSQL 数据库配置,您需要设置一个 PostgreSQL 数据库。

准备好 PostgreSQL 数据库后,记下此格式的连接字符串:

postgres://user:password@HOSTNAME_OR_IP_ADDRESS:PORT/database_name

数据库创建完成之后,需要参考数据库文档对数据库进行初始化。

配置本地开发数据库

对于本地开发,使用您的本地 PostgreSQL 连接字符串更新 wrangler.jsonc 文件:

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 文件:

wrangler.jsonc
{
  "hyperdrive": [
    {
      "binding": "HYPERDRIVE",
      "id": "YOUR_HYPERDRIVE_ID_HERE"
    }
  ]
}

禁用 Hyperdrive 查询缓存

  1. 进入到 Cloudflare 仪表盘
  2. 导航到 Storage & DatabasesHyperdrive
  3. 点击创建的 Hyperdrive 配置,导航到 Settings
  4. 点击 Disable Caching

配置环境变量

为开发和生产环境设置环境变量:

  1. 对于开发:复制示例文件并配置它们

    cp env.example .env
    cp dev.vars.example .dev.vars
  2. 配置变量:按照环境配置文档.env 文件中设置所有必需的环境变量,并保持 .dev.vars 不变。

有 2 个环境变量您需要为本地开发特别注意:

  • NEXT_PUBLIC_BASE_URL:您应用程序的基础 URL,对于本地开发,将其设置为 http://localhost:8787 而不是 http://localhost:3000,因为网站将由 opennext-cloudflare 运行,默认情况下会自动在端口 8787 上运行。
  • DATABASE_URL:数据库的连接字符串,对于本地开发,将其设置为本地数据库连接字符串,而不是生产托管数据库连接字符串。

设置 Wrangler 配置名称

wrangler.jsonc 文件中设置 name 为您的项目名称:

wrangler.jsonc
{
  "name": "your-project-name"
}

生成类型

配置 .envwrangler.jsonc 文件后,生成 Cloudflare 特定的类型:

pnpm run cf-typegen

此命令将自动生成包含 Cloudflare Worker 运行时环境类型定义的 cloudflare-env.d.ts 文件。

创建 Cloudflare Worker 项目

  1. 进入到 Cloudflare 仪表盘
  2. 导航到 Compute(Workers)Workers and PagesCreateImport a repository
  3. 选择仓库 (默认使用 main 分支)
  4. 配置构建设置:
    • 名称:保持与 wrangler.jsonc 文件中的 name 相同
    • 构建命令:留空
    • 部署命令pnpm run deploy
    • 根目录:保持默认
    • 构建环境变量:添加 NEXT_PUBLIC_BASE_URL 变量,并设置为 https://<your-project-name>.<account>.workers.dev 或自定义域名

配置环境变量

有两种方式在 Cloudflare 中配置环境变量:

  1. 在 Cloudflare Worker 项目的后台设置中,配置环境变量
  • 进入 SettingsVariables and Secrets
  • 点击 + Add,并添加所有环境变量
  • 点击 Deploy 保存变量并触发构建和部署
  1. 使用 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

设置自定义域名

成功部署后,网站将在自动生成的域名上可用。您可以:

  • 设置自定义域名,Cloudflare 将自动为您创建 DNS 记录
  • 在 Cloudflare 仪表盘中监控网站,如流量和日志
Cloudflare Worker 部署

最佳实践

  1. 使用 pnpm run dev 进行本地开发

    对于本地开发,优先使用 pnpm run dev 命令,因为它允许更快的开发和调试您的 Next.js 应用程序。在此模式下,代码更改通过热重载快速反映。如果您使用 pnpm run preview,项目将首先构建并在生产模式下运行,这意味着代码更改需要再次运行 pnpm run preview 才能生效。

    如果网站在本地使用 pnpm run dev 正常工作,但在生产中表现异常,请检查生产日志以分析问题。如果生产日志难以访问,您可以在本地运行 pnpm run preview 在类似生产的环境中调试问题。

    请查看 OpenNext.js Cloudflare | 开发和部署 了解更多详细信息。

  2. 为本地开发和生产使用不同的数据库

    您应该为本地开发和生产使用不同的数据库。对于本地开发,您应该使用数据库文档创建本地 PostgreSQL 实例。对于生产,您应该使用托管 PostgreSQL 数据库,如 NeonSupabase

    请查看使用 Cloudflare Workers 连接到 PostgreSQL 数据库了解更多详细信息。

  3. 启用 Worker 日志进行调试

    默认情况下,MkSaaS 模板已在 wrangler.jsonc 中启用了可观察性。您可以在项目设置的可观察性部分启用 Worker 日志。这可能需要创建一个新的 R2 存储桶来保存日志数据,需按照仪表盘上的引导进行操作。成功启用后,您可以在日志选项卡中查看应用程序的运行时日志。

    请查看 Cloudflare Wrangler 配置了解更多详细信息。

常见问题

  1. 构建大小过大:如果您的 Worker 超过大小限制,请考虑:

    • 升级到 Workers 付费计划
    • 优化您的包大小
    • 移除不必要的依赖项
  2. 数据库连接问题:确保您的 Hyperdrive 配置正确,并且您的 PostgreSQL 数据库可访问。

  3. 环境变量问题:确保所有环境变量都在 Cloudflare 的构建和运行时环境中配置。

  4. 类型错误:在任何配置更改后运行 pnpm run cf-types 以重新生成类型定义。

参考

视频教程

下一步

现在您了解了如何将网站部署到 Cloudflare Workers,请探索其他相关主题: