自学内容网 自学内容网

使用docker部署自托管密码管理器(vaultwarden)

简介

Vaultwarden 是一个开源的密码管理服务器实现,它是 Bitwarden 的非官方替代版本,使用 Rust 语言重写。作为一个轻量级的替代方案,它完全兼容 Bitwarden 客户端,同时具有更低的系统资源需求。

主要特点

  • 资源占用低:相比官方服务器,内存占用显著降低,仅需约 10MB 内存
  • 完整功能支持:支持密码存储、安全笔记、信用卡信息、身份信息等核心功能
  • 多平台兼容:可与所有官方 Bitwarden 客户端无缝协作,包括浏览器插件、移动应用等
  • 安全可靠:采用端到端加密,确保数据安全性
  • 自托管友好:易于部署和维护,支持 Docker 容器化部署
  • 免费开源:基于 AGPL-3.0 许可证开源,可自由使用和修改

适用场景:

  • 个人用户自托管密码管理服务
  • 小型团队或组织的密码管理方案
  • 对系统资源敏感的环境
  • 需要完全控制数据存储位置的用户

Vaultwarden 为用户提供了一个安全、可靠且易于维护的密码管理解决方案。它既保留了 Bitwarden 的优秀特性,又在性能和资源占用方面做出了显著优化,是一个理想的自托管密码管理器选择。

部署要求

  • 🐳 Docker Engine
    用于容器化部署和管理
  • 🔧 Docker Compose
    支持configs的版本
    用于多容器应用的编排
  • 💻 推荐服务器配置
    CPU:2核心
    内存:2GB RAM
    存储:20GB+ 可用空间
  • 🌐 网络环境
    要求支持https访问,需配备tls证书,如果是自签证书,需要浏览器信任

自签tls证书

公网可通过Let's Encrypt获取免费证书,这里我内网使用,所以用的是自签证书,下面我使用的是idea里面的jtools插件中的证书管理插件生成证书

导入配置模板

在这里插入图片描述

修改hosts

设置为你的服务器ip或者你能解析到服务器ip的域名
在这里插入图片描述

生成CA证书

在这里插入图片描述

根据CA证书生成TLS证书

在这里插入图片描述

导出CA证书

在右侧内容面板右键,弹出的菜单中选择导出证书内容即可,后续浏览器信任需要
在这里插入图片描述
在这里插入图片描述

浏览器信任证书

Google
设置->隐私与安全->安全->管理证书->本地证书->管理从Windows导入的证书->导入->证书存储(受信任的根证书颁发机构)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

部署vaultwarden

  1. 编写docker-compose.yml
    tls.crt是通过插件生成的certificate.pem中的内容
    在这里插入图片描述
    tls.key是通过插件生成的certificate.key中的内容
    在这里插入图片描述
configs:
  tls.crt:
    content: |
      -----BEGIN CERTIFICATE-----
      MIIB8zCCAZmgAwIBAgIIzj0s04yQMlQwCgYIKoZIzj0EAwIwHjEcMBoGA1UEAwwT
      U2VsZiBDZXJ0aWZpY2F0ZSBDQTAgFw0yNTAxMjAwMjU2NDdaGA8yMzI1MDEyMDAy
      NTY0N1owIDEeMBwGA1UEAwwVU2VsZiBDZXJ0aWZpY2F0ZSBOYW1lMFkwEwYHKoZI
      zj0CAQYIKoZIzj0DAQcDQgAEa/QYX4TQOQqIEu7qE1tMD7MFiJWVis+qv6WfeEsw
      RGfNP+KCg0GgU3rGx2ibL0VU1M9WyBQD+GGLFCvgnK3R3aOBvDCBuTAMBgNVHRMB
      Af8EAjAAME0GA1UdIwRGMESAFDEqdzASmY7KoT3RKwj+C6gWIcF4oSKkIDAeMRww
      GgYDVQQDDBNTZWxmIENlcnRpZmljYXRlIENBggjzKbbJe5RcOzAdBgNVHQ4EFgQU
      IP+r+MCpabDSrO1hulIZmGuIF08wCwYDVR0PBAQDAgWgMB0GA1UdJQQWMBQGCCsG
      AQUFBwMCBggrBgEFBQcDATAPBgNVHREECDAGhwTAqAG8MAoGCCqGSM49BAMCA0gA
      MEUCID3fiqMM5mzJ8uzG23L2ANuIG6Nd//NeAXFfTyNCg6qAAiEAjIXnkAfqW+9/
      0ffc5eoIGSgCYyqGJhYJ0IbDlkav3Qw=
      -----END CERTIFICATE-----
  tls.key:
    content: |
      -----BEGIN EC PRIVATE KEY-----
      MHcCAQEEIDIAlK8VFiYO5knIiDmxtDWKuWErwNocWlMT0lj7628EoAoGCCqGSM49
      AwEHoUQDQgAEa/QYX4TQOQqIEu7qE1tMD7MFiJWVis+qv6WfeEswRGfNP+KCg0Gg
      U3rGx2ibL0VU1M9WyBQD+GGLFCvgnK3R3Q==
      -----END EC PRIVATE KEY----
  vaultwarden.conf:
    content: |
      proxy_cache_path /var/cache/nginx/vaultwarden levels=1:2 keys_zone=vaultwarden:500m inactive=1d max_size=200m;
      server {
          server_name default;
          listen 8080 ssl;
          http2 on;
          access_log /var/log/nginx/vaultwarden-req.log;
          error_log /var/log/nginx/vaultwarden-err.log debug;
          ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
          ssl_ciphers TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_CCM_SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
          client_body_buffer_size 256k;
          client_max_body_size 0;
          ssl_certificate     /tls/tls.crt;
          ssl_certificate_key  /tls/tls.key;
          gzip on;
          gzip_types text/plain image/gif image/jpeg image/png text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
          gzip_min_length 1000;
          gzip_comp_level 6;
          gzip_proxied any;
          gzip_vary on;
          location / {
            proxy_pass http://vaultwarden;
            proxy_set_header Host $$host;
            proxy_http_version 1.1;
            proxy_set_header Upgrade "websocket";
            proxy_set_header Connection "upgrade";
            proxy_set_header Connection "";
            proxy_set_header X-Real-IP $$remote_addr;
            proxy_set_header X-Forwarded-For $$proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Host $$http_host;
            proxy_set_header X-Forwarded-Port $$server_port;
            proxy_set_header X-Forwarded-Proto $$scheme;
          }
          location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|html|htm|css|woff2)$$ {
            proxy_pass http://vaultwarden;
            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-Host $$http_host;
            proxy_set_header X-Forwarded-Port $$server_port;
            proxy_set_header X-Forwarded-Proto $$scheme;
            client_body_buffer_size 256k;
            client_max_body_size 2m;
            proxy_cache vaultwarden;
            proxy_cache_valid 200 304 302 1h;
            expires 7d;
            proxy_cache_key $$uri$$is_args$$args;
          }
      }
services:
  vaultwarden:
    image: vaultwarden/server:1.32.7
    restart: always
    container_name: vaultwarden
    logging:
      options:
        max-file: '1'
        max-size: '1k'
    volumes:
      - ./data:/data
    environment:
      DOMAIN: "https://192.168.1.188:8080"
      ADMIN_TOKEN: "X!6Pf$Lt4%4iyQvR"
      TZ: "Asia/Shanghai"
      SENDS_ALLOWED: "true"
      SIGNUPS_ALLOWED: "true"
    deploy:
      resources:
        limits:
          cpus: '0.2'
          memory: '128M'
    networks:
      - lan
  nginx:
    image: nginx:alpine
    restart: always
    container_name: vaultwarden-web
    logging:
      options:
        max-file: '1'
        max-size: '1k'
    deploy:
      resources:
        limits:
          cpus: "0.1"
          memory: "64M"
    environment:
      TZ: Asia/Shanghai
    configs:
      - source: vaultwarden.conf
        target: /etc/nginx/conf.d/vaultwarden.conf
      - source: tls.key
        target: /tls/tls.key
        mode: 0400
      - source: tls.crt
        target: /tls/tls.crt
        mode: 0400
    volumes:
      - ./nginx/logs:/var/log/nginx
    ports:
      - '8080:8080'
    networks:
      - lan
networks:
  lan:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 175.168.24.0/24
  1. 启动
docker-compose up -d

在这里插入图片描述

浏览器访问和测试

访问验证

在这里插入图片描述
看到这个,说明浏览器导入的ca证书已经没问题了
在这里插入图片描述

注册账号

在这里插入图片描述
在这里插入图片描述

登陆和插件登陆

在这里插入图片描述
浏览器下载Bitwarden插件
在这里插入图片描述
选择自托管
在这里插入图片描述

在这里插入图片描述
登陆
在这里插入图片描述
在这里插入图片描述

测试自动填充功能

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
自动填充
在这里插入图片描述
在这里插入图片描述

总结与进阶建议

  • 部署完成后的检查清单
    ✅ 访问 Web 界面确认服务正常运行
    ✅ 完成管理员账号的注册与设置
    ✅ 验证 HTTPS 证书配置是否正确
    ✅ 确认数据备份路径已正确映射
  • 安全建议
    1.定期备份
    建议每周备份一次数据库
    将备份文件存储在异地或云端
    定期验证备份的可用性
    2.系统维护
    及时更新 Docker 镜像到最新版本
    定期检查系统日志
    监控服务器资源使用情况
  • 进阶使用
    配置邮件服务实现邀请和通知功能
    启用双因素认证提升安全性
    设置 API 密钥实现高级功能
    配置反向代理实现更灵活的访问控制
  • 常见问题解决
    如果遇到使用问题,可以:
    查看官方 Wiki 文档
    访问 GitHub Issues 页面
    加入社区讨论组寻求帮助
    通过以上步骤,你已经成功部署了一个安全可靠的密码管理服务。持续的维护和安全意识将帮助你更好地使用 Vaultwarden。祝你使用愉快!

原文地址:https://blog.csdn.net/qq_42413011/article/details/145278961

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!