<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Bitwarden on recca0120 技術筆記</title><link>https://recca0120.github.io/tags/bitwarden/</link><description>Recent content in Bitwarden on recca0120 技術筆記</description><generator>Hugo -- gohugo.io</generator><language>zh-hant-tw</language><lastBuildDate>Tue, 07 Apr 2026 17:34:00 +0800</lastBuildDate><atom:link href="https://recca0120.github.io/tags/bitwarden/index.xml" rel="self" type="application/rss+xml"/><item><title>NodeWarden：跑在 Cloudflare Workers 上的 Bitwarden，不用自架伺服器</title><link>https://recca0120.github.io/2026/04/07/nodewarden-bitwarden-cloudflare-workers/</link><pubDate>Tue, 07 Apr 2026 17:34:00 +0800</pubDate><guid>https://recca0120.github.io/2026/04/07/nodewarden-bitwarden-cloudflare-workers/</guid><description>&lt;img src="https://recca0120.github.io/" alt="Featured image of post NodeWarden：跑在 Cloudflare Workers 上的 Bitwarden，不用自架伺服器" /&gt;&lt;p&gt;自架 Bitwarden 有兩條路。官方版本要跑 Docker，吃記憶體。&lt;a class="link" href="https://github.com/dani-garcia/vaultwarden" target="_blank" rel="noopener"
 &gt;Vaultwarden&lt;/a&gt; 用 Rust 重寫，輕量很多，但你還是需要一台 VPS、要設定 HTTPS、要定期更新、要備份資料庫。&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://github.com/shuaiplus/nodewarden" target="_blank" rel="noopener"
 &gt;NodeWarden&lt;/a&gt; 走第三條路：直接跑在 Cloudflare Workers 上。不用 VPS、不用管 SSL、不用顧 uptime。Cloudflare 的免費額度就能跑。&lt;/p&gt;
&lt;h2 id="跟-vaultwarden-差在哪"&gt;&lt;a href="#%e8%b7%9f-vaultwarden-%e5%b7%ae%e5%9c%a8%e5%93%aa" class="header-anchor"&gt;&lt;/a&gt;跟 Vaultwarden 差在哪
&lt;/h2&gt;&lt;p&gt;Vaultwarden 是目前最多人用的第三方 Bitwarden 服務端，用 Rust 寫的，跑在 Docker 裡。NodeWarden 用 TypeScript 寫，跑在 Cloudflare Workers 上。&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;&lt;/th&gt;
 &lt;th&gt;Vaultwarden&lt;/th&gt;
 &lt;th&gt;NodeWarden&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;語言&lt;/td&gt;
 &lt;td&gt;Rust&lt;/td&gt;
 &lt;td&gt;TypeScript&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;部署&lt;/td&gt;
 &lt;td&gt;Docker / VPS&lt;/td&gt;
 &lt;td&gt;Cloudflare Workers&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;資料庫&lt;/td&gt;
 &lt;td&gt;SQLite / MySQL / PostgreSQL&lt;/td&gt;
 &lt;td&gt;Cloudflare D1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;附件儲存&lt;/td&gt;
 &lt;td&gt;本地檔案系統&lt;/td&gt;
 &lt;td&gt;R2 或 KV&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;SSL&lt;/td&gt;
 &lt;td&gt;要自己設定&lt;/td&gt;
 &lt;td&gt;Cloudflare 自動處理&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;維護&lt;/td&gt;
 &lt;td&gt;要自己更新、備份&lt;/td&gt;
 &lt;td&gt;Fork + 自動同步上游&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;費用&lt;/td&gt;
 &lt;td&gt;VPS 月費&lt;/td&gt;
 &lt;td&gt;Cloudflare 免費額度&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;組織/集合&lt;/td&gt;
 &lt;td&gt;支援&lt;/td&gt;
 &lt;td&gt;不支援&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;最大的差異就是運維負擔。Vaultwarden 要你顧一台 VPS，NodeWarden 完全 serverless。壞處是少了組織和集合功能，不適合團隊用。&lt;/p&gt;
&lt;h2 id="技術架構"&gt;&lt;a href="#%e6%8a%80%e8%a1%93%e6%9e%b6%e6%a7%8b" class="header-anchor"&gt;&lt;/a&gt;技術架構
&lt;/h2&gt;&lt;p&gt;NodeWarden 完全建在 Cloudflare 的基礎設施上：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;運算&lt;/strong&gt;：Cloudflare Workers（serverless）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;資料庫&lt;/strong&gt;：D1（Cloudflare 的 SQLite）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;附件儲存&lt;/strong&gt;：R2（物件儲存）或 KV（key-value）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;前端&lt;/strong&gt;：Preact（原創 Web Vault 介面）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;兩種儲存方案的差異：&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;方案&lt;/th&gt;
 &lt;th&gt;需要綁卡&lt;/th&gt;
 &lt;th&gt;單個附件上限&lt;/th&gt;
 &lt;th&gt;免費額度&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;R2&lt;/td&gt;
 &lt;td&gt;需要&lt;/td&gt;
 &lt;td&gt;100 MB（可調）&lt;/td&gt;
 &lt;td&gt;10 GB&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;KV&lt;/td&gt;
 &lt;td&gt;不需要&lt;/td&gt;
 &lt;td&gt;25 MiB（硬限制）&lt;/td&gt;
 &lt;td&gt;1 GB&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;如果你不想綁信用卡，用 KV 模式就好。1 GB 的免費額度對個人密碼管理綽綽有餘。需要存大附件才考慮 R2。&lt;/p&gt;
&lt;h2 id="功能對照"&gt;&lt;a href="#%e5%8a%9f%e8%83%bd%e5%b0%8d%e7%85%a7" class="header-anchor"&gt;&lt;/a&gt;功能對照
&lt;/h2&gt;&lt;p&gt;跟官方 Bitwarden 比，個人使用該有的都有：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Web Vault 網頁密碼庫&lt;/li&gt;
&lt;li&gt;全量同步（&lt;code&gt;/api/sync&lt;/code&gt;），相容官方客戶端&lt;/li&gt;
&lt;li&gt;附件上傳下載&lt;/li&gt;
&lt;li&gt;Send 功能（文字和檔案）&lt;/li&gt;
&lt;li&gt;導入導出（支援 Bitwarden JSON/CSV、ZIP 含附件）&lt;/li&gt;
&lt;li&gt;TOTP 和 Steam TOTP&lt;/li&gt;
&lt;li&gt;多用戶（邀請碼註冊）&lt;/li&gt;
&lt;li&gt;密碼提示（網頁端直接看，不用發 email）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;NodeWarden 多了一個官方沒有的功能：&lt;strong&gt;雲端備份中心&lt;/strong&gt;。支援 WebDAV 和 E3 協定定時備份，備份包含 &lt;code&gt;db.json&lt;/code&gt;、&lt;code&gt;manifest.json&lt;/code&gt; 和 &lt;code&gt;attachments/&lt;/code&gt; 目錄。還原的時候缺少的附件會安全跳過，不會留下壞掉的記錄。&lt;/p&gt;
&lt;p&gt;不支援的：組織、集合、權限管理、SSO、SCIM、企業目錄。這些是團隊功能，個人用不到。&lt;/p&gt;
&lt;h3 id="客戶端相容性"&gt;&lt;a href="#%e5%ae%a2%e6%88%b6%e7%ab%af%e7%9b%b8%e5%ae%b9%e6%80%a7" class="header-anchor"&gt;&lt;/a&gt;客戶端相容性
&lt;/h3&gt;&lt;p&gt;已測試可用：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Windows 桌面端&lt;/li&gt;
&lt;li&gt;手機 App（iOS / Android）&lt;/li&gt;
&lt;li&gt;瀏覽器擴充功能&lt;/li&gt;
&lt;li&gt;Linux 桌面端&lt;/li&gt;
&lt;li&gt;macOS 桌面端（未完整驗證）&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="部署方式"&gt;&lt;a href="#%e9%83%a8%e7%bd%b2%e6%96%b9%e5%bc%8f" class="header-anchor"&gt;&lt;/a&gt;部署方式
&lt;/h2&gt;&lt;h3 id="網頁部署推薦"&gt;&lt;a href="#%e7%b6%b2%e9%a0%81%e9%83%a8%e7%bd%b2%e6%8e%a8%e8%96%a6" class="header-anchor"&gt;&lt;/a&gt;網頁部署（推薦）
&lt;/h3&gt;&lt;p&gt;最簡單的方式，不用裝任何東西：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Fork &lt;a class="link" href="https://github.com/shuaiplus/nodewarden" target="_blank" rel="noopener"
 &gt;NodeWarden 的 repo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;到 &lt;a class="link" href="https://dash.cloudflare.com" target="_blank" rel="noopener"
 &gt;Cloudflare Workers 控制台&lt;/a&gt; 建新專案&lt;/li&gt;
&lt;li&gt;選 Continue with GitHub，指向你 fork 的 repo&lt;/li&gt;
&lt;li&gt;保持預設設定，直接部署&lt;/li&gt;
&lt;li&gt;如果用 KV 模式，部署命令改成 &lt;code&gt;npm run deploy:kv&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;設定環境變數 &lt;code&gt;JWT_SECRET&lt;/code&gt;（至少 32 字元的隨機字串）&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;整個過程不到五分鐘。&lt;/p&gt;
&lt;h3 id="cli-部署"&gt;&lt;a href="#cli-%e9%83%a8%e7%bd%b2" class="header-anchor"&gt;&lt;/a&gt;CLI 部署
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone https://github.com/shuaiplus/NodeWarden.git
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; NodeWarden
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npm install
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npx wrangler login
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# R2 模式&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npm run deploy
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# KV 模式&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npm run deploy:kv
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;本地開發：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npm run dev &lt;span class="c1"&gt;# R2 模式&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npm run dev:kv &lt;span class="c1"&gt;# KV 模式&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="自動更新"&gt;&lt;a href="#%e8%87%aa%e5%8b%95%e6%9b%b4%e6%96%b0" class="header-anchor"&gt;&lt;/a&gt;自動更新
&lt;/h2&gt;&lt;p&gt;Fork 之後，進 GitHub Actions 啟用 &lt;code&gt;Sync upstream&lt;/code&gt; workflow，它會每天凌晨 3 點自動同步上游。不想等的話，在 fork 頁面點 Sync fork → Update branch 手動更新。&lt;/p&gt;
&lt;h2 id="該用-nodewarden-還是-vaultwarden"&gt;&lt;a href="#%e8%a9%b2%e7%94%a8-nodewarden-%e9%82%84%e6%98%af-vaultwarden" class="header-anchor"&gt;&lt;/a&gt;該用 NodeWarden 還是 Vaultwarden
&lt;/h2&gt;&lt;p&gt;如果你已經有一台穩定的 VPS，Vaultwarden 功能更完整，生態更成熟，社群更大。組織、集合、2FA 登入都支援。&lt;/p&gt;
&lt;p&gt;NodeWarden 適合的情境：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;不想管 VPS&lt;/strong&gt;。沒有伺服器就沒有維護問題，不用擔心 uptime、SSL 過期、磁碟滿了&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;預算是零&lt;/strong&gt;。Cloudflare 的免費額度對個人使用綽綽有餘&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;只有自己用&lt;/strong&gt;。不需要組織和權限管理&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;想要異地備份&lt;/strong&gt;。內建的 WebDAV 備份功能比 Vaultwarden 方便&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;最大的風險是你的密碼庫跑在 Cloudflare 的基礎設施上。D1 和 Workers 都還算新的服務，雖然 Cloudflare 大概不會突然關掉，但免費額度的限制和條款隨時可能改。定期備份到 WebDAV 是必要的。&lt;/p&gt;
&lt;p&gt;另一個要注意的是 NodeWarden 的安全性沒有經過像 Vaultwarden 那樣長時間的社群審查。密碼管理器是高敏感度的應用，用之前自己評估風險。&lt;/p&gt;
&lt;h2 id="參考資源"&gt;&lt;a href="#%e5%8f%83%e8%80%83%e8%b3%87%e6%ba%90" class="header-anchor"&gt;&lt;/a&gt;參考資源
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/shuaiplus/nodewarden" target="_blank" rel="noopener"
 &gt;NodeWarden GitHub Repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/dani-garcia/vaultwarden" target="_blank" rel="noopener"
 &gt;Vaultwarden — 用 Rust 寫的 Bitwarden 相容服務端&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://developers.cloudflare.com/d1/" target="_blank" rel="noopener"
 &gt;Cloudflare D1 文件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://developers.cloudflare.com/r2/" target="_blank" rel="noopener"
 &gt;Cloudflare R2 文件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://bitwarden.com/" target="_blank" rel="noopener"
 &gt;Bitwarden 官方網站&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>