Vaultwarden 是一款开源、自托管的密码管理服务器,为 Bitwarden 的轻量化替代方案;完全兼容 Bitwarden 客户端(轻松实现跨平台使用),并且可以免费使用其企业级功能。
- 项目地址:https://github.com/dani-garcia/vaultwarden
中文 wiki:https://rs.ppgg.in
安卓端:Google play
Apple 端:App Store
chrome 拓展:Bitwarden Password Manager
Edge 拓展:Bitwarden Password Manager
- 桌面应用:Bitwarden on macOS, Windows, and Linux
1、数据库
本次采用 Docker 本地部署 + Cloudflare Tunnels 代理方式实现外网域名访问,按需求选择相应数据库。
# 拉取镜像
docker pull vaultwarden/server:latest
# 生成管理员 token
docker run --rm -it vaultwarden/server /vaultwarden hash
1.1、SQLite
# 启动容器,默认使用 SQLite 数据库
docker run -d --name vaultwarden --restart=always -p 8000:80 \
-v /data/vaultwarden:/data \
-e TZ=Asia/Shanghai \
-e DOMAIN=https://your.domin.com \
-e ADMIN_TOKEN='$argon2id$v=19$m=65540,t=3,p=4$/vEBQYfSMAfGWspbCAazTaYpott1BgPLB/FGnD622rM$2awfT86JexykzhSq0lJszpZQ1LTDVmPqVgmjaij5sFI' \
vaultwarden/server:latest
--restart always:自动启动(在宿主机重启后或者 Docker 服务重启后)
-v /data/vaultwarden:/data:本地数据持久化目录
-e TZ=Asia/Shanghai:设置时区
ADMIN_TOKEN=**:启用/admin管理后台的网页访问控制
1.2、MySQL
建议使用 MySQL 8+ 版本
# 先新建数据库,字符集为:utf8mb4,排序规则使用 utf8mb4_unicode_ci
CREATE DATABASE vaultwarden CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# 创建新数据库用户并授予数据库权限
CREATE USER 'vaultwarden'@'localhost' IDENTIFIED BY 'yourpassword';
GRANT ALL ON `vaultwarden`.* TO 'vaultwarden'@'localhost';
FLUSH PRIVILEGES;
# 使用 MySQL 环境变量值启动 Vaultwarden
docker run -d --name vaultwarden --restart=always -p 8000:80 \
-v /data/vaultwarden:/data \
-e TZ=Asia/Shanghai \
-e DOMAIN=https://your.domin.com \
-e DATABASE_URL='mysql://dbuser:yourpassword@192.168.1.100:3306/vaultwarden' \
-e ADMIN_TOKEN='$argon2id$v=19$m=65540,t=3,p=4$/vEBQYfSMAfGWspbCAazTaYpott1BgPLB/FGnD622rM$2awfT86JexykzhSq0lJszpZQ1LTDVmPqVgmjaij5sFI' \
vaultwarden/server:latest
连接示例:
mysql://dbuser:yourpassword@192.168.1.100:3306/vaultwarden使用 SSL 加密连接:
mysql://dbuser:yourpassword@192.168.1.100:3306/vaultwarden?ssl-mode=REQUIRED&ssl_ca=/etc/secrets/ca.pem
可能遇到的问题
# 主键问题
[ERROR] thread 'main' panicked at 'Error running migrations: QueryError(DieselMigrationName { name: "2022-03-02-210038_update_devices_primary_key", version: MigrationVersion("20220302210038") }, DatabaseError(Unknown, "Unable to create or change a table without a primary key, when the system variable 'sql_require_primary_key' is set. Add a primary key to the table or unset this variable to avoid this message. Note that tables without a primary key can cause performance problems in row-based replication, so please consult your DBA before changing this setting."))': src/db/mod.rs:501
# MySQL 8 中 sql_require_primary_key 参数默认开启(ON),强制要求所有表必须包含主键。修改配置文件手动关闭
[mysqld]
sql_require_primary_key = OFF
# 重启 MySQL 服务以使更改生效
systemctl restart mysql
1.3、PostgreSQL
建议使用 v15.x 版本
# 新建数据库,字符集为:utf8mb4,排序规则使用 utf8mb4_unicode_ci
CREATE DATABASE vaultwarden CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# 创建新数据库用户并授予数据库权限
CREATE USER 'vaultwarden'@'localhost' IDENTIFIED BY 'yourpassword';
GRANT ALL ON `vaultwarden`.* TO 'vaultwarden'@'localhost';
FLUSH PRIVILEGES;
# 使用 MySQL 环境变量值启动 Vaultwarden
docker run -d --name vaultwarden --restart=always -p 8000:80 \
-v /data/vaultwarden:/data \
-e TZ=Asia/Shanghai \
-e DOMAIN=https://your.domin.com \
-e DATABASE_URL='postgresql://dbuser:yourpassword@192.168.1.100:5432/vaultwarden' \
-e ADMIN_TOKEN='$argon2id$v=19$m=65540,t=3,p=4$/vEBQYfSMAfGWspbCAazTaYpott1BgPLB/FGnD622rM$2awfT86JexykzhSq0lJszpZQ1LTDVmPqVgmjaij5sFI' \
vaultwarden/server:latest
连接示例:
DATABASE_URL=postgresql://dbuser:yourpassword@192.168.1.100:5432/vaultwarden使用 SSL 加密连接:
postgres://dbuser:yourpassword@192.168.1.100:5432/vaultwarden?sslmode=verify-full&sslrootcert=/etc/secrets/ca.pem
容器启动后开放端口即可访问
# 查看日志是否有报错
docker logs -f vaultwarden
# 开放端口
firewall-cmd --zone=public --permanent --add-port=8000/tcp
firewall-cmd --reload
# 网页访问,可以看到提示必须使用 HTTPS 说明启动成功
http://192.168.1.100:8000
2、反向代理
使用 Nginx 配置,参考:https://github.com/dani-garcia/vaultwarden/wiki/Proxy-examples
# 修改 nginx 配置文件
vim /data/nginx/conf/nginx.conf
# http 内增加配置
include nine/*.conf;
# 增加 vaultwarden 配置文件,内容如下
vim /data/nginx/conf/nine/vaultwarden-5000.conf
# 重载 Nginx,访问服务:https://your.domin.com
/data/nginx/sbin/nginx -s reload
Nginx 配置文件:vaultwarden-5000.conf
upstream vaultwarden-default {
zone vaultwarden-default 64k;
server 192.168.1.100:8000;
keepalive 2;
}
map $http_upgrade $connection_upgrade {
default upgrade;
'' "";
}
server {
listen 5000;
listen [::]:5000;
server_name your.domin.com;
client_max_body_size 128M;
proxy_http_version 1.1;
# WebSocket 支持
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
location / {
proxy_pass http://vaultwarden-default;
}
}
3、外网访问
由于 Vaultwarden 要求强制使用 https 才能够正常使用,下面使用 Cloudflare Tunnels 代理来实现 https 公网访问。
没有自已的域名可以前往 digitalplat 注册账号使用免费子域名:https://dash.domain.digitalplat.org/signup?ref=LVKqMormu8(使用我的邀请链接成功注册后双方都可获得 +1 个域名配额)。
登录 Cloudflare 账号:
- 在
域名->概览->添加域名->连接域名下输入域名,选择免费计划,按提示到 digitalplat 配置名称服务器 - 在
网络->连接器下创建隧道,隧道类型选择Cloudflared - 在
网络->连接器->点击已存在隧道->已发布应用程序路由添加路由,子域名自定义,服务填写内网 ip 地址

本地服务器运行 cloudflared 客户端代理服务
# token 由 cloudflare 创建隧道时生成
docker run --name cloudflared -d --restart always cloudflare/cloudflared:latest tunnel --protocol http2 --no-autoupdate run --token yourtoken

测试访问,私有 Vaultwarden 搭建完成,自行注册账号使用
注册账号后进入管理页面将:
Setting -> General setting -> Allow new signups勾上用来关闭新用户注册。
Setting -> SMTP Email Settings下配置 SMTP 邮件服务器用来邀请用户,填写保存后在Test SMTP输入收件人邮箱测试是否配置正确,配置参考官方 wiki:SMTP-Configuration

PC 端、浏览器拓展程序、app 端登录账号时,选择自托管方式,服务器 URL 为上面的自定义域名。

4、版本升级
# 查看当前版本
curl https://your.domin.com/api/version
# 拉取最新版本的镜像
docker pull vaultwarden/server:latest
# 停止并删除旧版本容器
docker stop vaultwarden
docker rm vaultwarden
# 使用旧版本已挂载的数据目录启动容器
docker run -d --name vaultwarden --restart=always -p 8000:80 \
-v /data/vaultwarden:/data \
-e TZ=Asia/Shanghai \
-e DOMAIN=https://your.domin.com \
-e ADMIN_TOKEN='$argon2id$v=19$m=65540,t=3,p=4$/vEBQYfSMAfGWspbCAazTaYpott1BgPLB/FGnD622rM$2awfT86JexykzhSq0lJszpZQ1LTDVmPqVgmjaij5sFI' \
vaultwarden/server:latest
5、备份与恢复
Vaultwarden 的核心数据都在
/data,可以直接备份持久化目录来重建容器。将本地容器
stop来模拟服务意外停止或网站访问异常情况,经测试本地 PC 端、浏览器拓展程序、app 端均能正常使用,已有数据可以正常导出,因此即使服务端发生异常也能靠客户端数据(导出 json 格式的密码库)来重新搭建服务端恢复数据。
- 本文作者:Nine
- 本文链接:https://blog.nine.gt.tc/2026/03/09/docker-install-vaultwarden/
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)