Docker部署的Bitwarden

Docker 部署 Bitwarden 自建密码管理教程(Vaultwarden 轻量版)

说明:官方 Bitwarden 自托管版需要 8+ 个容器、内存占用高(≥2G),对个人用户不友好。 推荐使用 Vaultwarden(原 bitwarden_rs,Rust 重写的兼容实现):单容器、内存占用~100MB、兼容所有 Bitwarden 客户端(浏览器插件 / 手机 App / 桌面端),是个人 / 小团队自建的事实标准方案。

一、前置准备

# 确认Docker已安装并运行
docker --version
docker compose version

# 开放端口(默认80/443,或自定义8080)
firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --reload

云服务器:安全组放行对应端口。

二、方案 1:docker run 一键启动(最快)

docker run -d \
  --name vaultwarden \
  --restart=unless-stopped \
  -v /bw-data:/data \
  -p 8080:80 \
  -e WEBSOCKET_ENABLED=true \
  -e SIGNUPS_ALLOWED=true \
  vaultwarden/server:latest

参数说明:

  • -v /bw-data:/data:数据持久化目录,务必挂载
  • -p 8080:80:宿主机 8080 映射容器 80
  • WEBSOCKET_ENABLED=true:开启实时同步(推荐)
  • SIGNUPS_ALLOWED=true:首次启动允许注册;注册完第一个管理员账号后务必关掉

三、方案 2:docker-compose(推荐,便于维护)

新建目录并编写 docker-compose.yml:

mkdir -p /opt/vaultwarden && cd /opt/vaultwarden
version: '3'
services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: unless-stopped
    volumes:
      - ./data:/data
      - ./bwrs-icons:/var/lib/vaultwarden/icon-cache
    ports:
      - "8080:80"
    environment:
      # 开启WebSocket实时同步
      WEBSOCKET_ENABLED: "true"
      # 首次安装后改为false,关闭公开注册
      SIGNUPS_ALLOWED: "false"
      # 管理后台访问密钥(启动后访问 /admin 用,改成自己的强密码)
      ADMIN_TOKEN: "ChangeMe_StrongAdminToken_2026!"
      # 时区
      TZ: "Asia/Shanghai"
      # 域名(配了反代后填你的域名,例如 https://bw.example.com)
      # DOMAIN: "https://bw.example.com"

启动:

docker compose up -d

查看日志:

docker logs -f vaultwarden

四、首次访问与注册

  1. 浏览器打开:http://你的服务器IP:8080
  2. 点击 Create Account 注册第一个账号(邮箱 + 主密码)
  3. 登录后即可添加密码、卡片、安全笔记
  4. 重要安全步骤:
    • 编辑 docker-compose.yml,把 SIGNUPS_ALLOWED 改为 "false"
    • 重启:docker compose up -d(防止别人注册)
  5. 管理后台:http://IP:8080/admin,输入 ADMIN_TOKEN 进入,可配置邮件、域名、版本。

五、客户端连接

  • 浏览器插件:Chrome/Firefox 商店搜 Bitwarden,安装后 → 设置 → 服务器地址填 http://IP:8080
  • 手机 App:Bitwarden App → 设置 → 自托管服务器 → 填你的地址
  • 桌面端:设置 → 自托管环境 → 填 URL

⚠️ HTTP 明文会提示不安全,生产建议配 HTTPS(见下)。

六、配 HTTPS(Nginx 反向代理 + 域名,强烈推荐)

没有 HTTPS,浏览器和手机端会拒绝明文密码传输。以 Nginx 为例:

server {
    listen 443 ssl;
    server_name bw.example.com;

    ssl_certificate     /path/fullchain.pem;
    ssl_certificate_key /path/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:8080;
        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;
    }
    # WebSocket支持
    location /notifications/hub {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

同时把 compose 里 DOMAIN 改成 https://bw.example.com,重启容器。

证书可用 certbot 自动申请:

certbot --nginx -d bw.example.com

七、数据备份

所有数据都在 ./data 目录(SQLite 数据库 db.sqlite3、附件、配置),直接整目录备份即可:

# 简单备份
tar -czf vaultwarden-backup-$(date +%F).tar.gz /opt/vaultwarden/data

# 定时任务每日备份(crontab -e)
0 3 * * * tar -czf /backup/vw-$(date +\%F).tar.gz /opt/vaultwarden/data

恢复:把备份解压覆盖 data/ 目录,重启容器。

八、升级

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

九、常用环境变量速查

表格

变量作用
SIGNUPS_ALLOWED是否允许公开注册,装完改 false
ADMIN_TOKEN管理后台 /admin 的登录密钥
WEBSOCKET_ENABLED实时同步,true
DOMAIN完整外部访问 URL(含 https://)
DATABASE_URL可选,用 PostgreSQL/MySQL 替代默认 SQLite
ENABLE_HTTPS容器内直接开 TLS(一般反代处理,不需要)

十、常见问题

  1. 打不开网页:先 docker ps 看容器是否 Up;docker logs vaultwarden 看报错;防火墙 / 安全组放行端口。
  2. 手机 / 插件连不上:地址末尾不要加斜杠;确认服务器端口通;HTTPS 证书要受信任(用 Let’s Encrypt,别用自签)。
  3. 注册后忘记关注册:SIGNUPS_ALLOWED=false 重启即可;已注册的垃圾账号可在 /admin 后台删除。
  4. 数据放哪:/opt/vaultwarden/data/db.sqlite3,这是最核心的备份文件。
  5. 官方 vs Vaultwarden:Vaultwarden 不支持官方企业版组织 / SSO 等高级功能,个人和小团队完全够用;团队 / 企业建议用官方 self-hosted 或 Bitwarden 云。
© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享
评论 抢沙发
头像-次元社
欢迎您留下宝贵的见解!
提交
头像-次元社

昵称

取消
昵称表情代码图片快捷回复

    暂无评论内容