Vaultwarden 的安装与使用

2026/03/09 更新 1 次 更新于 2026/08/08 Net 共 5799 字,约 17 分钟

Vaultwarden 是一款开源、自托管的密码管理服务器,为 Bitwarden 的轻量化替代方案;完全兼容 Bitwarden 客户端(轻松实现跨平台使用),并且可以免费使用其企业级功能。

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 地址

image-20260309140447000

本地服务器运行 cloudflared 客户端代理服务

# token 由 cloudflare 创建隧道时生成
docker run --name cloudflared -d --restart always cloudflare/cloudflared:latest tunnel --protocol http2 --no-autoupdate run --token yourtoken

image-20260309145510925

测试访问,私有 Vaultwarden 搭建完成,自行注册账号使用

注册账号后进入管理页面将:Setting -> General setting -> Allow new signups勾上用来关闭新用户注册。

Setting -> SMTP Email Settings下配置 SMTP 邮件服务器用来邀请用户,填写保存后在 Test SMTP输入收件人邮箱测试是否配置正确,配置参考官方 wiki:SMTP-Configuration

image-20260320160906467

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

image-20260320161128295

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 格式的密码库)来重新搭建服务端恢复数据。

Search

    Table of Contents