type
status
date
slug
summary
tags
category
icon
password
🚀 简易部署教程:基于 Cloudflare + D1 的 Bitwarden
项目简介:利用 Cloudflare Workers 部署 Bitwarden 后端,使用 D1 数据库存储,支持 R2 附件存储。参考原文:Linux.do 社区文章 详细图文可看 你可曾想过,直接将BitWarden部署到Cloudflare Worker?
🛠️ 第一步:前期准备
在正式开始前,请确保你已经拥有以下环境:
GitHub 账户:用于托管代码和自动部署。
Cloudflare 账户:需开启 Workers、D1 数据库和 R2(可选)。
自定义域名:需已托管在 Cloudflare 且未被墙。
📂 第二步:GitHub 项目与 Secrets 配置
- Fork 仓库:先将项目仓库 Fork 到你的账号下。
- 开启 Actions:点击仓库顶部的
Actions选项卡,点击绿色按钮启用。
- 添加密钥 (Secrets):进入
Settings->Secrets and variables->Actions,点击 New repository secret,依次添加:
密钥名称 | 说明 | 获取位置 |
CLOUDFLARE_ACCOUNT_ID | 你的 CF 账户 ID | CF 控制台右侧或 URL 中 |
CLOUDFLARE_API_TOKEN | CF API 令牌 | 创建令牌,需有 D1 和 Workers 权限 |
D1_DATABASE_ID | D1 数据库 ID | 在 CF 控制台创建一个 D1 数据库后可看到 |
R2_NAME | (可选) R2 存储桶名 | 若需附件功能,填入你创建的 R2 桶名 |
💡 部署提示:设置完 Secret 后,回到 GitHub Actions 页面,手动触发 Build 工作流进行初次部署。
🗄️ 第三步:初始化 D1 数据库 (建表)
注意: 请登录 Cloudflare 控制台,打开你的 D1 数据库,点击 Explore -> Query。请逐个复制并运行以下 6 段代码:
1. 用户信息表 (Users)
SQL
2. 密码项数据表 (Ciphers)
SQL
3. 文件夹管理表 (Folders)
SQL
4. 附件信息表 (Attachments)
SQL
5. 待处理附件表 (Attachments Pending)
SQL
6. 二步验证表 (Two-Factor)
SQL
⚙️ 第四步:Workers 变量与域名绑定
GitHub Action 运行完成后,前往 Cloudflare 控制台的 Workers & Pages:
- 设置环境变量:进入
warden-worker->设置->变量与机密,添加: ALLOWED_EMAILS: 允许注册的邮箱(多个用逗号隔开)。JWT_SECRET: 填入一个随机的长字符串。JWT_REFRESH_SECRET: 填入另一个随机的长字符串。
- 绑定域名:在
设置->域和路由中,添加自定义域名路由(如vault.example.com/*)。
- 安全配置:建议在域名页面的 安全性 -> 安全规则 中,对
/identity/*路径开启速率限制。
📱 第五步:登录与使用
- 注册账号:由于本方案不含 Web 前端,请使用 Bitwarden 手机 APP 注册。在登录界面点击左上角“设置”,填入你的自定义域名,然后点击“创建账户”。
- 数据迁移:注册后,在电脑端登录,即可导入旧的密码库 JSON 文件。
- 主密码风险:请务必记牢主密码,因为 D1 数据库中存储的是加密后的哈希,无法找回。
🛡️ 第六步:进阶——S3 异地备份
建议在 GitHub Secrets 中配置 S3 备份(推荐使用免费的 Backblaze B2),防止 CF 账户异常。
- S3 配置项:需添加
S3_ACCESS_KEY_ID,S3_SECRET_ACCESS_KEY,S3_BUCKET,S3_ENDPOINT。
- 加密备份:建议设置
BACKUP_ENCRYPTION_KEY以确保备份文件安全。
💎 额外技巧:D1 数据回滚
如果发生误操作,可利用 D1 的 Time Travel 功能:
Bash
- Author:NOOMI
- URL:https://t.me/rnm6bot_bo/article/bitwardens
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!


.png?table=block&id=26fc907f-4c45-809c-8926-e1a9b2250cb9&t=26fc907f-4c45-809c-8926-e1a9b2250cb9)

