GitHub Action 自动部署教程
July 16, 2026 · View on GitHub
本项目已包含一个预先配置好的 GitHub Action 工作流文件 (.github/workflows/deploy.yml),可以帮助您自动将 Vmail 应用部署到 Cloudflare Workers。
准备工作
在开始之前,请确保您已经完成了 接收邮件部署教程 中的所有步骤,特别是 Cloudflare 和 Turso 的配置。
配置 GitHub Secrets
为了让 GitHub Actions 能够安全地访问您的 Cloudflare 和数据库账户,您需要将以下敏感信息配置为 GitHub 仓库的 Secrets。
前往您的 GitHub 仓库页面,点击 Settings -> Secrets and variables -> Actions,然后添加以下 Repository secrets:
| Secret Name | 说明 | 示例值 |
|---|---|---|
CF_API_TOKEN | Cloudflare API Token,用于授权 Wrangler 操作。请确保该 Token 具有编辑 Workers 和 D1 数据库的权限。 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
CF_ACCOUNT_ID | 您的 Cloudflare 账户 ID,可以在 Cloudflare 控制台主页的右侧找到。 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
D1_DATABASE_ID | 您的 D1 数据库 ID。 | xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx |
D1_DATABASE_NAME | 您的 D1 数据库名称。 | vmail |
EMAIL_DOMAIN | 您的邮箱域名,如果多个域名请用逗号隔开。 | vmail.dev,example.com |
COOKIES_SECRET | 用于加密 Cookie 的密钥,请设置为一个随机且足够复杂的字符串。 | a-very-strong-and-random-secret |
TURNSTILE_KEY | 可选,Cloudflare Turnstile 网站密钥 (Site Key)。 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
TURNSTILE_SECRET | 可选,Cloudflare Turnstile 密钥 (Secret Key)。 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
PASSWORD | 可选,用于访问 Vmail 网站的密码。 | password |
API_RATE_LIMIT_PER_MINUTE | 可选,API 每分钟请求限制,默认为 100。 | 100 |
ENABLE_OPENAPI | 可选,是否开启 OpenAPI;默认关闭,只有显式设置为 true 时才允许创建 API Key 和访问 /api/v1/*。 | true |
SEND_CHANNEL | 可选,发件渠道:resend、mailchannels 或 cloudflare;留空时不启用发信。旧值 send_email 仅用于兼容。 | cloudflare |
SENDER_EMAIL | 启用发信时必填,服务商允许或已验证的固定发件地址。 | noreply@example.com |
MAILBOX_TOKEN_SECRET | 启用发信时必填,用于签发邮箱发信授权的随机密钥。 | another-strong-random-secret |
RESEND_API_KEY | SEND_CHANNEL=resend 时必填,工作流会将其写入 Cloudflare Worker secret。 | re_xxxxxxxxx |
MAILCHANNELS_API_KEY | SEND_CHANNEL=mailchannels 时必填,工作流会将其写入 Cloudflare Worker secret。 | xxxxxxxx |
SEND_RATE_LIMIT_PER_MINUTE | 可选,每个邮箱每分钟最大发信数,默认 3。 | 3 |
SEND_IP_RATE_LIMIT_PER_MINUTE | 可选,每个 IP 每分钟最大发信数,默认 10。 | 10 |
使用 Cloudflare Worker 原生发信时,新增并设置以下 Secrets:
SEND_CHANNEL=cloudflareSENDER_EMAIL=<已允许发信的域名邮箱>MAILBOX_TOKEN_SECRET=<足够长的随机字符串>
该渠道不需要 RESEND_API_KEY 或 MAILCHANNELS_API_KEY。部署前还需要在 Cloudflare 中为邮箱域名启用 Email Routing;仓库中的 [[send_email]] / SEND_EMAIL 是 Cloudflare 原生绑定名称,不需要修改。
触发自动部署
配置好以上 Secrets 后,每当您向 main 分支推送(push)代码时,GitHub Action 都会自动触发,执行以下步骤:
- 检查凭据:确认
CF_API_TOKEN和CF_ACCOUNT_ID是否已设置。 - 安装与构建:安装 pnpm 依赖并构建前端和 Worker 应用。
- 数据库迁移:自动应用
worker/drizzle目录下的数据库迁移脚本到您的 D1 数据库。 - 部署应用:将构建好的应用部署到 Cloudflare。
您也可以在 GitHub 仓库的 Actions 标签页手动触发部署。
注意事项
- 工作流文件 (
.github/workflows/deploy.yml) 会自动从您的 Secrets 中读取配置并应用到wrangler.toml文件中,请勿直接将敏感信息写入wrangler.toml文件。 - 如果您的数据库结构有变更(例如,修改了
worker/src/database/schema.ts),请记得生成新的迁移文件并提交到代码库中,GitHub Action 会自动帮您应用更新。