Bitwarden 自建服务器部署指南

by 落墨in 技术

适用场景:希望密码库数据完全不出自己掌控的服务器(家庭 NAS、VPS、内网机器)。
核心结论:个人/家庭首选 Vaultwarden(轻量、免费、官方客户端通用);想要“原厂”则选官方 Bitwarden(标准脚本 或 Lite 单镜像)。


一、两种方案怎么选

维度 Vaultwarden(社区) 官方 Bitwarden 标准部署 官方 Bitwarden Lite
是什么 Rust 重写的服务端,兼容 Bitwarden 协议 官方全套容器(C# + MSSQL) 官方单镜像(2025-12 退出 beta 改名)
资源占用 极低,< 200 MB 内存 高(含 MSSQL,建议 2 GB+) 低,≥ 200 MB 内存
付费功能 全部免费(组织、TOTP、Send) 部分需订阅解锁 部分需订阅解锁
数据库 内置 SQLite(也支持 PG/MySQL) 强制 MSSQL 自选 SQLite/PG/MySQL/MSSQL
安装复杂度 一个 docker-compose 官方脚本交互安装 单镜像 + settings.env
获取方式 镜像 vaultwarden/server 脚本 bitwarden.sh 镜像 ghcr.io/bitwarden/lite
适合 个人、家庭、极客 企业、需要官方支持 个人/家庭实验室、ARM 设备

强烈建议从 Vaultwarden 开始——它用官方 Bitwarden 的浏览器扩展、桌面端、手机 App 直连,体验与官方云完全一致,但更省资源、功能全免费。


二、推荐:Vaultwarden 部署(约 15 分钟)

前置条件

  • 一台能跑 Docker 的机器(VPS、家庭服务器、NAS 均可),建议 ≥ 1 GB 内存
  • 一个域名(便宜的就行),因为 Bitwarden 客户端强制要求 HTTPS,纯 IP + HTTP 无法登录
  • 已安装 Docker 与 Docker Compose(curl -fsSL https://get.docker.com | sh)

1. 域名解析

在域名 DNS 里加一条 A 记录,把子域指向服务器公网 IP:

vault.yourdomain.com  →  你的服务器IP

DNS 生效通常几分钟。

2. 创建项目与 docker-compose.yml

mkdir -p /opt/vaultwarden && cd /opt/vaultwarden

docker-compose.yml(Caddy 负责自动签发 Let’s Encrypt 证书):

services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: unless-stopped
    environment:
      - DOMAIN=https://vault.yourdomain.com
      - SIGNUPS_ALLOWED=true      # 先开,注册完账号后改 false
      - ADMIN_TOKEN=换成一段长随机字符串
    volumes:
      - ./vw-data:/data
  caddy:
    image: caddy:2
    container_name: caddy
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - caddy_data:/data
    depends_on:
      - vaultwarden
volumes:
  caddy_data:

同目录 Caddyfile:

vault.yourdomain.com {
  reverse_proxy vaultwarden:80
}

替换示例里的 vault.yourdomain.com 为你的真实子域。ADMIN_TOKEN 也可用 Argon2 hash;先用明文一段长随机串即可,启动后日志会提示用法。

3. 启动

docker compose up -d

Caddy 会自动向 Let’s Encrypt 申请证书,约一分钟内 https://vault.yourdomain.com 即可访问。

4. 注册与客户端接入

  • 浏览器打开 https://vault.yourdomain.com,创建账号并登录。
  • 在任意官方 Bitwarden 客户端(浏览器扩展 / 桌面端 / 手机 App)登录界面:
    • 找到 Server URL / 区域设置(Self-hosted)
    • 填入 https://vault.yourdomain.com
    • 注册账号并登录。行为与官方云无异。
  • 已有密码库:先在旧端导出,再在自建端导入。

5. 加固(必做)

注册完第一个账号后:

  • 把 SIGNUPS_ALLOWED 改为 false 并 docker compose up -d,防止陌生人注册。
  • ADMIN_TOKEN 已设,保护 /admin 管理页。
  • 建议在管理页开启 Argon2 作为密钥派生算法(抗 GPU 暴力破解)。

6. 备份(必做,绝不省略)

整个加密库都在 ./vw-data 目录。没有厂商替你留副本:

tar czf vw-backup-$(date +%F).tar.gz vw-data

把备份存到异机/云盘,并定期测试恢复。

7. 更新

cd /opt/vaultwarden
docker compose pull && docker compose up -d

数据在卷里,更新无损。


三、备选:官方 Bitwarden 自托管

标准部署(脚本,企业向)

curl -Lso bitwarden.sh "https://func.bitwarden.com/api/dl/?app=self-host&platform=linux" \
  && chmod 700 bitwarden.sh
./bitwarden.sh install     # 交互:填域名、Let's Encrypt(y)、installation id/key
./bitwarden.sh start
  • 需要在 https://bitwarden.com/host 用邮箱获取 installation id / key。
  • 资源占用高(MSSQL),适合企业。
  • 客户端同样在登录时填自建 Server URL。

Lite 部署(原 Unified,个人向)

单镜像 ghcr.io/bitwarden/lite,≥ 200 MB 内存,支持 SQLite/PG/MySQL/MSSQL,支持 ARM(树莓派、NAS)。
示例 settings.env:

BW_DOMAIN=vault.example.com
BW_DB_PROVIDER=sqlite
BW_DB_FILE=/etc/bitwarden/vault.db
BW_INSTALLATION_ID=你的id
BW_INSTALLATION_KEY=你的key

然后 docker run -d --name bitwarden -v $(pwd)/bwdata:/etc/bitwarden -p 80:8080 --env-file settings.env ghcr.io/bitwarden/lite


四、关键提醒

  1. HTTPS 是硬性要求:客户端拒绝纯 HTTP;必须有域名 + 受信任证书(Caddy/NGINX + Let’s Encrypt 最省事)。
  2. 备份优先:自建后你就是运维方,库丢了没人能帮你恢复。
  3. 客户端零改动:所有方案都复用官方 Bitwarden 客户端,只是把 Server URL 指向你自己的地址。
  4. WebSocket 同步:若用自有反代,记得转发 /notifications/hub 的 Upgrade/Connection 头,否则多端不会实时同步。
  5. 安全基线:关注册、强 ADMIN_TOKEN、防火墙只开 80/443/SSH、定期更新补丁。

五、常见问题

  • 家庭宽带没公网 IP? 可用内网穿透(如 Tailscale)把 Vaultwarden 只暴露给自己,不公开到公网,安全性更高。
  • Vaultwarden 安全吗? 与 Bitwarden 同样的客户端加密:数据在本地加密后才上传,服务端只存密文。配合 HTTPS + 关注册 + 备份,是自托管的安全方案。
  • 和 1Password 比? 1Password 更省心但贵且全云端;Vaultwarden 免费、数据自有,代价是要自己维护服务器和备份。