前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker部署Vaultwarden(Bitwarden_RS)

Docker部署Vaultwarden(Bitwarden_RS)

原创
作者头像
SakuraRain
修改2023-10-31 11:05:36
3K0
修改2023-10-31 11:05:36
举报
文章被收录于专栏:Rain的随笔小记Rain的随笔小记

此教程已经较为陈旧,目前新版本已不再适合此命令,如需较新教程请前往我的个人博客查阅

https://blog.im.ci/study-notes/880/

最近又有超星学习通的数据库被脱裤的消息,涉及了1.6亿条个人信息,又是一次密码大泄露,所以我也开始考虑使用密码管理器了。

因为1Password收费且价格不低,所以我想尝试一下可以自行部署的Bitwarden,但是当我看到官方版本的Docker部署时,头直接大一圈:

官方版本的Docker容器部署
官方版本的Docker容器部署

只能说官方的Docker脚本属实太全面,也难怪最低要求为2GB的RAM,普通用户属实是无福消受了

然后我在GitHub瞎晃的时候突然看见了名为Vaultwarden的项目,自介绍为使用Rust重写的Bitwarden Server API(官方为C语言),大幅减少了内存占用的同时也提供了更精简的镜像部署,非常适合个人的私有化部署,并且文档真的是相当详细了(从部署到数据库备份到恢复备份都有完整的文档说明),那么立即开整!

安装Docker

使用官方安装脚本,安装源为阿里云,默认最新发行版

代码语言:javascript
复制
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

拉取镜像&&部署镜像

代码语言:javascript
复制
docker run -d --restart=always --name vaultwarden  \-v /vw-data/:/data/  \-p 3011:80 \-p 3012:3012 \-e ADMIN_TOKEN=some_random_token_as_per_above_explanation \vaultwarden/server:latest

参数解释:

/vw-data/:数据存放位置,可以替换为自定义目录

ADMIN_TOKEN:管理员登录密钥,推荐使用openssl rand -base64 48创建一个随机字符串

-p:端口设置,如果本机环境内有NGINX作为反向代理的话,则应该将80端口映射到其他端口上.

NGINX反向代理(示例)

代码语言:javascript
复制
# http
    server {
        listen       80;
        listen  [::]:80;
        server_name  bitwarden.example.com;
       ##防止搜索引擎收录
       if ($http_user_agent ~* "qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot|^$") {  
        return 404;
            }
        location / { # 访问80端口后的所有路径都转发到 proxy_pass 配置的ip中
            root   /usr/share/nginx/html;
            index  index.html index.htm;

##如果使用cloudflare加速就换成302
         return 301 https://bitwarden.example.com;
            
        }
    }


# https
 server {
        listen       443 ssl http2;
        listen  [::]:443 ssl http2;
        server_name  bitwarden.example.com;
           if ($http_user_agent ~* "qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot|^$") {  
        return 404;
        }
        #启用HSTS    
        add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; 
        ssl_certificate /path/to/ssl/cert;
        ssl_certificate_key /path/to/cert/key;
        keepalive_timeout   70;

        # OCSP stapling
        ssl_stapling        on;
        ssl_stapling_verify on;
##填入你机器的DNS
        resolver 8.8.8.8;
        ssl_protocols  TLSv1.1 TLSv1.2 TLSv1.3;

             location / {
             root   /usr/share/nginx/html;
#            index  index.html index.htm;



               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;
               proxy_set_header X-Forwarded-Port $server_port;
               proxy_pass http://localhost:port;
              
      }
  }

备份

这里使用vaultwarden-backup项目

配置Rclone

代码语言:javascript
复制
docker run --rm -it \
  --mount type=volume,source=vaultwarden-rclone-data,target=/config/ \
  ttionya/vaultwarden-backup:latest \
  rclone config

代码语言:javascript
复制
docker run --rm -it \
  --mount type=volume,source=vaultwarden-rclone-data,target=/config/ \
  ttionya/vaultwarden-backup:latest \
  rclone config show

# Microsoft Onedrive Example
# [YouRemoteName]
# type = onedrive
# token = {"access_token":"access token","token_type":"token type","refresh_token":"refresh token","expiry":"expiry time"}
# drive_id = driveid
# drive_type = personal

配置自动备份&&邮件发送

代码语言:javascript
复制
docker run -d \
  --restart=always \
  --name vaultwarden_backup \
  --volumes-from=vaultwarden \
  --mount type=volume,source=vaultwarden-rclone-data,target=/config/ \
  -e RCLONE_REMOTE_NAME="YouRemoteName" \
  -e DATA_DIR="/data" \
  -e ZIP_ENABLE="TRUE" \
  -e ZIP_PASSWORD="your-zip-password" \
  -e BACKUP_KEEP_DAYS="7" \
  -e CRON="*/60 * * * *" \
  -e TIMEZONE="Asia/Shanghai" \
  -e MAIL_SMTP_ENABLE="TRUE"\
  -e MAIL_SMTP_VARIABLES="
  -S smtp-use-starttls \
  -S smtp=smtp://smtp.office365.com:587 \
  -S smtp-auth=login \
  -S smtp-auth-user=your-email-address \
  -S smtp-auth-password=Your_APP_Password \
  -S from=your-email-address(your-email-name)" \
  -e MAIL_TO="your-email-address" \
  ttionya/vaultwarden-backup:latest

此处的配置为完整的自动备份docker run命令,其含义为时区为Asia/Shanghai,每小时压缩备份一次,并且在备份完成后发送邮件到MAIL_TO地址。SMTP的示例为Outlook配置,请将your-email-addressyour-email-nameYour_APP_Password自行替换为邮件地址、发件人名称与应用密码!

更多的配置项请参考项目文档

关于配置完成后,FIDO2认证在Windows Desktop客户端卡Loading的问题修复

根据Windows 10 Desktop app FIDO2 Webauthn stuck on “Loading” · Discussion #2111 · dani-garcia/vaultwarden来看,这是一个已知的程序问题,原因在于Vaultwarden处理FIDO2认证标头时出现了错误。但作者认为此问题很容易靠外部修复所以不在程序内进行修复。

解决办法一:

反向代理增加两个响应标头

代码语言:javascript
复制
proxy_hide_header Content-Security-Policy;
proxy_hide_header X-Frame-Options;

解决办法二:

Admin-Setting-Advanced Settings-Allowed iframe ancestors增加内容file://*

或者,在启动容器时增加下面的环境变量

代码语言:javascript
复制
ALLOWED_IFRAME_ANCESTORS="file://*"

参考资料

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装Docker
  • 拉取镜像&&部署镜像
  • NGINX反向代理(示例)
  • 备份
    • 配置Rclone
      • 配置自动备份&&邮件发送
      • 关于配置完成后,FIDO2认证在Windows Desktop客户端卡Loading的问题修复
        • 解决办法一:
          • 解决办法二:
          • 参考资料
          相关产品与服务
          轻量应用服务器
          轻量应用服务器(TencentCloud Lighthouse)是新一代开箱即用、面向轻量应用场景的云服务器产品,助力中小企业和开发者便捷高效的在云端构建网站、Web应用、小程序/小游戏、游戏服、电商应用、云盘/图床和开发测试环境,相比普通云服务器更加简单易用且更贴近应用,以套餐形式整体售卖云资源并提供高带宽流量包,将热门软件打包实现一键构建应用,提供极简上云体验。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档