一、速览:Bitwarden Server 帮你把密码库搬回自己家

入门

Bitwarden 是一款开源密码管理器,客户端负责保存密码、自动填充登录表单;而 Bitwarden Server 是它的“后端大脑”,提供 API(应用程序编程接口,程序之间对接的对话规则)、用户数据存储、设备同步和身份认证等核心服务。官方虽然提供云端托管,但很多团队或个人不想把密码数据放在别人服务器上,希望完全掌控自己的敏感信息。

你可以把 Bitwarden Server 理解成“私人保险箱的管家”:它保管加密后的密码库,并负责在你手机、电脑、浏览器扩展之间同步。你只需要准备一台自己的服务器,就能让官方客户端全部连接到你的私人后台。

Bitwarden Server 项目概览

这个项目用 C# 和 .NET Core 编写,官方推荐使用 Docker 部署,因为整套后端由多个服务组成。直接手动安装 .NET 和 SQL Server 非常繁琐,而 Docker 可以把每个服务分别打包成“集装箱”,相互隔离又方便统一管理。

二、安装:用官方脚本一键拉起 Docker 环境

入门

开始之前,需要满足两个前置条件:

  • 一台能联网的 Linux、Windows 或 macOS 服务器,建议至少 2 核 CPU、4 GB 内存,因为数据库服务比较吃资源
  • 已安装 Docker(一种把软件打包成“集装箱”、随处可运行的工具)和 Docker Compose(同时管理多个容器的编排工具)

Linux 或 macOS 上执行以下命令,脚本会自动下载部署所需文件:

curl -s -L -o bitwarden.sh \
    "https://func.bitwarden.com/api/dl/?app=self-host&platform=linux" \
    && chmod +x bitwarden.sh
./bitwarden.sh install
./bitwarden.sh start

Windows 的 PowerShell 中执行:

Invoke-RestMethod -OutFile bitwarden.ps1 `
    -Uri "https://func.bitwarden.com/api/dl/?app=self-host&platform=windows"
.\bitwarden.ps1 -install
.\bitwarden.ps1 -start

install 阶段会生成一个 bwdata 目录,里面存放配置、数据库文件、证书和容器编排文件;start 阶段会从 GitHub Container Registry 拉取所需镜像并启动容器。第一次拉取可能需要几分钟,具体时间取决于服务器带宽。

Bitwarden Docker 部署文件结构与容器关系

三、核心用法:启动、访问管理后台、绑定客户端

进阶 · 推荐细读

脚本执行完成后,默认入口是 http://你的服务器IP。如果你已经配置了域名解析,也可以直接用域名访问。要确认所有容器是否正常运行,可以执行:

docker ps

正常情况下会看到多个容器同时运行,例如 bitwarden-apibitwarden-identitybitwarden-adminbitwarden-nginx 等。只要没有容器反复重启,就说明基础部署成功。

管理后台通常位于 http://你的服务器IP/admin。第一次进入时需要创建管理员账号,设置主密码并获取恢复代码。恢复代码必须离线保存,因为自托管环境没有人能帮你重置主密码。

最后,打开任意 Bitwarden 客户端,例如浏览器扩展或手机 App,在登录页点击“自托管”或“Self-hosted”,填入你的服务器地址。这样客户端就会把你的密码库加密后同步到你自己的服务器,而不是官方公有云。

四、配置:改环境变量、启用 HTTPS、调资源限制

进阶 · 推荐细读

Bitwarden Server 的主要配置并不直接编辑容器,而是修改 bwdata 目录下的 env 文件和 config.yml 文件。改完后需要执行 ./bitwarden.sh restart 让配置生效。常用的参数包括:

  • globalSettings__baseServiceUri__vault:客户端访问地址,通常设为 https://你的域名
  • globalSettings__identityServer__baseUri:身份认证服务地址,格式同上
  • globalSettings__sqlServer__vaultDbConnectionString:数据库连接字符串,脚本一般已自动生成,不建议手动修改

正式使用必须启用 HTTPS,不要让密码数据通过明文 HTTP 传输。推荐在服务器前面加一层反向代理(把外部请求转发给内部服务的“接待员”),常见选择是 Nginx 或 Caddy。Caddy 可以自动申请免费证书,适合不熟悉证书配置的新手。

反向代理配置完成后,把上面的两个地址都改成 https://你的域名,重启服务即可。注意不要为了图省事直接把 80 端口暴露到公网。

五、运维场景:用 systemd 托管、定时备份、平滑更新

深入 · 老手可选

生产环境建议把 Bitwarden 交给 systemd 管理。systemd 是 Linux 的系统服务管家,能让服务开机自启、崩溃自动拉起。创建一个服务单元文件 /etc/systemd/system/bitwarden.service,内容如下:

[Unit]
Description=Bitwarden
After=docker.service
Requires=docker.service

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/opt/bitwarden/bitwarden.sh start
ExecStop=/opt/bitwarden/bitwarden.sh stop
User=bitwarden

[Install]
WantedBy=multi-user.target

路径中的 /opt/bitwarden 要替换成你实际的安装位置。保存后执行 systemctl enable bitwarden --now 即可。

备份方面,Bitwarden 的数据库、附件和配置都放在 bwdata 目录。建议每天用 tar 打包这个目录,并把压缩包上传到与服务器不同的存储位置。只备份 bwdata 可以恢复文件,但为了数据库一致性,最好再使用 Bitwarden 自带的数据库备份功能导出一份加密副本。

更新版本时先停止服务,备份完成后执行:

./bitwarden.sh update

更新脚本会拉取新镜像并处理数据库迁移。执行结束后用 docker ps 检查容器状态,确认没有异常再恢复使用。

六、踩坑:端口冲突、证书、数据目录和内存不足

进阶 · 推荐细读

下面是自托管时最常见的问题:

  • 80/443 端口被占用:如果服务器本来就装了 Nginx 或其他 Web 服务,Bitwarden 默认需要的端口会冲突,需要先释放端口或让现有 Nginx 转发
  • 容器反复重启:用 docker logs bitwarden-api --tail 100 查看日志,常见原因是数据库连接失败或 bwdata 目录权限不正确
  • 内存不足导致数据库退出:低配服务器建议限制 SQL Server 容器内存,或改用官方文档支持的轻量数据库方案;更换数据库前务必先做完整备份
  • 忘记主密码:自托管环境无法重置主密码,只能通过恢复代码和备份恢复,因此恢复代码要离线保管

配置过程中不要随意删除 bwdata 目录,也不要把它提交到 Git 仓库,里面包含数据库和密钥等敏感信息。下一步可以在客户端完成首次同步测试,再逐步接入多台设备。

项目信息

项目
仓库 bitwarden/server
语言 C#
Star 20,121
Fork 1,767
主页 https://bitwarden.com

参考链接

延伸阅读

想继续探索?这些同领域的教程可能也适合你: