• 首页
  • 归档
  • 关于
  • 搜索
  • 夜间模式
    ©2026  望时代 Theme by OneBlog

    望时代

    搜索
    标签
    # 教程 # Linux # 脚本 # AI # 影音 # 游戏 # 随笔 # 科技 # 认知
  • 首页>
  • >
  • 正文
  • 分享一下我自建bitwarden及进阶使用、备份的经验吧……比较杂乱

    2026年06月26日 2 阅读 0 评论 15044 字

    分享一下我自建bitwarden及进阶使用、备份的经验吧……比较杂乱 __2023年7月20日 __3条评论 __353次阅读 __0人点赞 __Tao_Qi 首先,自建不推荐用官方的docker版本,占用很大,推荐用vaultwarden版本 下面比较杂乱,去年写下的,摸鱼的时候直接从notion复制出来删除了敏感字段贴出来的……回头改一下 当前网络环境不方便上外网,项目地址自行在github寻找vaultwarden,stars最多的那个就是 推荐安装在国内小鸡 我自己使用的amh面板,坛子里用的不多,就不写amh的lngx反代部分了,也很简单,bt自己配置即可 docker cli 懒人不看版
    [code]

    # 记得删除下面的注释
    docker run -d --name vaultwarden \
      -e DOMAIN=https://你的域名 \
      -e SMTP_HOST=你的自建邮箱域 \
      -e SMTP_FROM=自建邮箱\
      -e SMTP_PORT=465 \
      -e SMTP_SECURITY=starttls \
      -e SMTP_USERNAME=自建邮箱 \
      -e SMTP_PASSWORD=密码 \
      -e ADMIN_TOKEN=自己设置,管理界面密码 \
      -e WEBSOCKET_ENABLED=true \
      -v /home/project/bitwarden/:/data/ \    你的目录绑定位置
      -p 8080:80 \ 给一个端口
      -p 3012:3012 \
      --restart=always \
      vaultwarden/server:latest
    

    [/code]

    详细版命令行(第三方Bitwarden_rs/vaultwarden版本):

    • 第三方版本安装说明 优点:资源占用少,减少服务器负担,特别是自己的小无忧……直接吃了一半内存,改用第三方版本后减少了一半的内存占用。

      1. 安装docker和Docker Compose
      2. 创建 Bitwarden 本地用户和目录
      3. sudo adduser bitwarden
      4. sudo passwd bitwarden : 自己设置密码
      5. sudo groupadd docker 详见docker安装说明,通常安装了docker就有了该用户组
      6. sudo usermod -aG docker bitwarden 将用户添加到docker用户组
      7. sudo chmod -R 700 /home/project/bitwarden 为目录设置权限,该目录手动创建,以/home/project/bitwarden为例
      8. sudo chown -R bitwarden:bitwarden /home/project/bitwarden 将 bitwarden 用户设置为目录的所有者,注意,这里的 user:group 拥有文件的 用户 和 组 ,以冒号分隔,中间没有空格
      9. su bitwarden ,并cd /home/project/bitwarden ,否则无法进行
      10. 执行安装脚本
      11. 如果之前已经按照方法一安装,此时需要将法一安装的文件卸载……

        • 通过此命令来查询命令列表,官网命令会提示带个”-“,实则不用

    [code] ./bitwarden.sh help

    [/code]

      * 卸载之前先将原本的数据导出备份
      * 执行命令,根据提示给两次Y

    [code] ./bitwarden.sh uninstall

    [/code]

    * 执行以下安装脚本(通过docker)

    [code] docker pull vaultwarden/server:latest

    [/code]

    * 执行下个语句,挂载本地配置,注意这里修改了端口号和挂载目录

    [code] docker run -d --name vaultwarden -v /home/project/bitwarden/:/data/ -p 8080:80 vaultwarden/server:latest

    [/code]

    1. 更新镜像

    [code] # Pull the latest version 拉取最新镜像

    docker pull vaultwarden/server:latest
    
    # Stop and remove the old container 停止并移除旧的镜像,此举不会删除挂载的文件内容
    docker stop vaultwarden
    docker rm vaultwarden
    
    # Start new container with the data mounted 启用一个新的镜像
    # 如果涉及下列的运行配置,则将相应的配置一并使用,类似于下面SMTP的配置。
    # docker run -d --name vaultwarden -v /home/project/bitwarden/:/data/ -p 8080:80 vaultwarden/server:latest
    

    [/code]

    管理员功能
    [code]

    - 在使用前务必开启https
    - 启用管理功能先要设置身份验证令牌:
    
    ```jsx
    -e ADMIN_TOKEN=你的令牌 \
    ```
    
    - 此时可以通关***/admin/***页面进行访问。
    - 一次在管理页面中保存设置时,将在 DATA _ FOLDER 中生成 config.json。此文件中的值将优先于相应的环境变量。同时如果要关闭记得将其中的`"admin_token"键删除。`
    

    [/code]

    启用 WebSocket 通知
    [code]

    - 默认端口`-p 3012:3012 \`
    - 启用功能`-e WEBSOCKET_ENABLED=true \`
    - 目前应该需要结合WebSocket 服务器来使用
    - 可在管理页面配置。
    

    [/code]

    将Steam暴雪等应用安全令牌增加到密码库中
    [code]

    将两步验证的TOTP提取出来填入管理器的编辑框即可,不同的应用对应的totp长度以及提取方法不一样,这里就不再赘述,具体方法请自行搜索。
    

    [/code]

    自动备份 不推荐,我推荐最下方的docker方式备份 可以用,但是更建议使用下面的,也可以都采用,更安全,密码这东西丢了就真丢了
    官方说明: Backing up your vault · dani-garcia/vaultwarden Wiki 参考项目:

    • 完成上个page的相关部署后,我们继续实现bitwarden的自动备份
    • 监听文件变化进行坚果云同步

      • 其实也可以直接将上面的 docker-compose挂载目录设置到webdav的挂载目录上去,但是icon_cache这个目录下很多文件,调用webdav次数过多会触发坚果云风控,如果不在意的话也可以采取该方案
      • 这里是采用 inotify进行监控同步的方案:

        • 首先安装 rsync和inotifywait

    [code] apt install -y rsync inotify-tools

    [/code]

    使用教程: inotifywait的安装及基本使用_liuwkk的博客-CSDN博客

      * 然后监控文件变更,同步到webdav的挂载目录

    [code] # 示例代码

    inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w %f %e' -e modify,create,delete,move /root/bitwarden_rs/bw-data | while read -r event; do rsync -aHv --exclude icon_cache /root/bitwarden_rs/bw-data/ /mnt/rclone_bitwarden_backup/; done.
    
    # 例子格式说明
    inotifywait /production/sites/vue-program/src #只监听src目录,因为package.json等文件在构建完成后也会被修改
    -r #监听所有子目录文件
    --timefmt '%d/%m/%y %H:%M' #时间输出格式,如果--format设置了%f,则必须指明
    --format "%T %f" #输出格式
    -e MODIFY #只监听文件修改事件
    --exclude '^.*.swp$' #如果直接使用vim等编辑工具改动文件,会触发 .swp 临时文件的修改事件,所以我们需要排除所有正则形如 /^\.((?!\.swp$).)*$/ 的文件,但此表达式在linux中貌似不行,所以用的.*.swp
    
    #  同步
    # 因为上述示例代码还是老版本rs的代码,此处直接将整个docker的本地文件同步,一了百了。
    # 因为icon的文件结构变化了,因此
    
    inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w %f %e' -e modify,create,delete,move /home/project/bitwarden | while read -r event -o /home/project/file_change.log
    while read -r event; 
    do rsync -aHv /home/project/bitwarden /home/project/rclone_bitwarden_backup;
    done.
    

    [/code]

    最后这个是有坑的:实际上应该是: 创建文件auto_Sync_bitwarden.sh 给权限sudo chmod 755 ./auto_Sync_bitwarden.sh
    [code] # 留着备用

    # projectDir=/production/sites/vue-program;
    # cd $projectDir && git pull && npm run build
    # 下一句,生成对应日志
    # inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w %f %e' -e modify,create,delete,move /home/project/bitwarden -o /home/project/order/file_change.log
    # 注意while循环的语法,while不能放到下一行
    
    #!/bin/bash
     
    inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w %f %e' -e modify,create,delete,move /home/project/bitwarden | while read -r event
    do rsync -aHv /home/project/bitwarden /home/project/rclone_bitwarden_backup
    done
    

    [/code]

    上面这个shell脚本适合一直监听执行……最后想了想,我才用了下面的定时备份方法

    * **如果利用crontab定时执行:** **TaoR的定时执行操作过程:** 使用前先确认是否开启ubuntu系统cron日志。
      * 查看日志`cat /var/log/cron.log`

    创建文件:auto_Sync_bitwarden_crontab.sh
    [code] rsync -aHv /home/project/bitwarden /home/project/rclone_bitwarden_backup

    [/code]

    注意是否给予了权限:sudo chmod 755 ./xxxxx.sh 如有权限,可以先执行测试。 使用crontab示例:
    [code] crontab -e #编辑cron任务模式

    i #默认文字编辑器为vim,按i字母键即可添加cron任务
    30 3 * * * /usr/local/etc/rc.d/lighttpd restart #将命令代码放入,此命令意义为每天的03:30 重启apache
    ESC #按ESC键退出编辑模式
    :wq #键入:wq保存
    service crond restart #重启crontab服务
    

    [/code]

    */5 * * * * taor_bitwarden /home/project/order/auto_Sync_bitwarden_crontab.sh 用crontab -l可以查看当前执行的命令。 测试时要注意是否已经同步到服务器(是否有变更)。 现在就实现了每5分钟执行备份。这个办法有个问题,就是只能同步一份……所以后来我又使用docker项目来进行压缩备份。

    docker 项目(vaultwarden backup)来进行压缩备份 vaultwarden-backup/README_zh.md at master · ttionya/vaultwarden-backup

    1. 按照官方说明,现执行docker 镜像,获取token。这里的镜像一大部分都是Rclone。

    [code] `jsx

          docker run --rm -it \
            --mount type=volume,source=vaultwarden-rclone-data,target=/config/ \
            ttionya/vaultwarden-backup:latest \
            rclone config
          ```
         

    [/code]

    1. 执行后是熟悉的配置rclone的地方,我们也就熟悉的选定新。
    2. 接着是配置rclone远程名称,偷个懒就按照官方的建议了:BitwardenBackup

    - 不偷懒相关:设置环境变量
    [code] 建议将远程名称设置为 BitwardenBackup,否则你需要指定环境变量 RCLONE_REMOTE_NAME 为你设置的远程名称。

         
              > 注意: 所有的环境变量都有默认值,你可以在不设置任何环境变量的情况下使用 Docker 镜像。
              >
         
              ### RCLONE_REMOTE_NAME
         
              Rclone 远程名称,它需要和 rclone config 中的远程名称保持一致。
         
              你可以通过以下命令查看当前远程名称。
         
              ```jsx
              docker run --rm -it \
                --mount type=volume,source=vaultwarden-rclone-data,target=/config/ \
                ttionya/vaultwarden-backup:latest \
                rclone config show
         
              # [BitwardenBackup] <- 就是它
              # ...
              ```
         
              默认值:`BitwardenBackup`
         

    [/code]

    1. 接着,选择备份环境,我喜欢坚果云哈哈,继续坚果云。

    [code] 注:因为坚果云风控,此处同时设置七牛云的配置,见下方

         
          - 坚果云风控细则(官方邮件)
         
              您好,坚果云不会风控直接拉黑您的账号的。
         
              目前webdav有三个限制:
         
              **文件上传大小限制:**当前 WebDAV 客户端和网页端上传大小的限制是一致的,默认为 500M。
         
              **访问频率限制:**由于WebDAV协议比较占用系统资源,免费版用户限制访问频率为每30分钟不超过600次请求。付费用户限制访问频率为每30分钟不超过1500次请求。
         
              **同步目录数限制:**目前坚果云的WebDAV协议单次请求文件数(包含文件和文件夹)为750个,支持分多页多次加载。如果您使用WebDAV的三方工具未实现按分页多次加载,可能会出现文件同步不完整的情况,建议您使用坚果云客户端进行直接同步。
         
              503错误一般是超过了访问频率的限制了,一般等待一段时间即可,不过不确定您所使用的应用是否还会持续的发起请求,如果会的话,可能建议您最好先断开webdav连接,等待一段时间后再重新连接您的应用试试。
         
              如果您有使用多个webdav应用,需要注意的是其他的应用也会共同受到这些限制。
         

    [/code]

    1. 完成后先服务器cd到我们需要的目录:

    /home/project/rclone_bitwarden_backup

    1. 检查配置是否设置正确:

    [code] `jsx

          docker run --rm -it \
            --mount type=volume,source=vaultwarden-rclone-data,target=/config/ \
            ttionya/vaultwarden-backup:latest \
            rclone config show
         
          # Microsoft Onedrive Example
          # [BitwardenBackup]
          # type = onedrive
          # token = {"access_token":"access token","token_type":"token type","refresh_token":"refresh token","expiry":"expiry time"}
          # drive_id = driveid
          # drive_type = personal
          ```
         
          ```jsx
          rclone copy BitwardenBackup_qiniu:LOGO.svg /home/project/rclone_bitwarden_backup_auto7Z
          ```
         

    [/code]

    1. 使用下面的自动备份镜像 :(注意,这里是我先安装了bitwarden,所以才执行本镜像。)

    - 坚果云备份
    [code] `docker

              # 坚果云webdav备份
              docker run -d \
                --restart=always \
                --name vaultwarden_backup \
                --volumes-from=vaultwarden \
                --mount type=volume,source=vaultwarden-rclone-data,target=/config/ \
                -e DATA_DIR="/data" \
                -e RCLONE_REMOTE_NAME=BitwardenBackup \
                  -e RCLONE_REMOTE_DIR="坚果云地址" \
                  -e ZIP_TYPE="7z" \
                  -e CRON="*/30 * * * *" \
                  -e ZIP_PASSWORD="压缩密码" \
                  -e BACKUP_KEEP_DAYS="20" \
                  -e MAIL_SMTP_ENABLE="TRUE"\
                  -e MAIL_TO="提醒邮箱账号" \
                  -e MAIL_SMTP_VARIABLES="
                  -S smtp-use-force_tls
                  -S smtp=smtp://你的自建邮箱域:465
                  -S smtp-auth=login
                  -S smtp-auth-user=你的域名邮箱
                  -S smtp-auth-password=你的域名邮箱密码
                  -S from=邮件发信人" \
                  -e MAIL_WHEN_SUCCESS="TRUE" \
                -e MAIL_WHEN_FAILURE="TRUE" \
                ttionya/vaultwarden-backup:latest
              ```
         
          - 七牛云配置如下:
         
              ```docker
              #  rclone 配置
              #  参考:https://developer.qiniu.com/kodo/12285/docking-rclone
              #  参考:https://developer.qiniu.com/kodo/5906/storage-type
              #  name:BitwardenBackup_qiniu
              ```
         
              ```docker
              # 七牛云 docker 备份配置,这里仅参考,正式备份内容见下方备份到多个位置
              docker run -d \
                --restart=always \
                --name vaultwarden_backup_qiniu \
                --volumes-from=vaultwarden \
                --mount type=volume,source=vaultwarden-rclone-data,target=/config/ \
                -e DATA_DIR="/data" \
                -e RCLONE_REMOTE_NAME=BitwardenBackup_qiniu \
                  -e RCLONE_REMOTE_DIR="储存桶地址" \
                  -e ZIP_TYPE="7z" \
                  -e CRON="*/30 * * * *" \
                  -e ZIP_PASSWORD="压缩密码" \
                  -e BACKUP_KEEP_DAYS="60" \
                  -e MAIL_SMTP_ENABLE="TRUE"\
                  -e MAIL_TO="提醒邮箱" \
                  -e MAIL_SMTP_VARIABLES="
                  -S smtp-use-force_tls
                  -S smtp=smtp://自建邮箱域:465
                  -S smtp-auth=login
                  -S smtp-auth-user=自建邮箱
                  -S smtp-auth-password=自建邮箱密码
                  -S from=提醒邮件发件人" \
                  -e MAIL_WHEN_SUCCESS="TRUE" \
                -e MAIL_WHEN_FAILURE="TRUE" \
                ttionya/vaultwarden-backup:latest
              ```
         
          - **多个远程目的备份**
         
              参见上方坚果云、七牛云备份,增加两个_1的配置即可,如果多个,就_2 _3 _4……
         
              ```docker
         
                -e RCLONE_REMOTE_NAME=BitwardenBackup_qiniu \
                  -e RCLONE_REMOTE_DIR="taor-backupself/BitwardenBackup/auto/" \
                -e RCLONE_REMOTE_NAME_1=BitwardenBackup \
                  -e RCLONE_REMOTE_DIR_1="/00WebDAV_Backup/BitwardenBackup/Auto/" \
         
              ```
         
          - **执行测试**
         
         
              ```jsx
              docker exec -it vaultwarden_backup /app/backup.sh
              ```
         
         
          用docker ps测试是否成功,否则用docker logs id 去看日志,找原因。
         
          注意环境变量 `DATA_DIR`指定数据文件夹,问题基本在这里
         

    [/code]

    1. 还原备份

    [code] 重要: 还原备份会覆盖已存在的文件。

         
          1. 备份前先停止 Docker 容器。
          2. 需要下载备份文件到本地计算机,因为主机的文件无法在 Docker 容器中直接访问,所以要将需要还原的备份文件所在目录映射到 Docker 容器中
          3. 自动备份:
         
              请确认 vaultwarden 卷的命名,并替换 `--mount` `source` 部分。
         
              同时不要忘记使用环境变量 `DATA_DIR` 指定数据目录(`-e DATA_DIR="/data"`)
         
              ```docker
              docker run --rm -it \
                \ # 如果你将本地目录映射到 Docker 容器中,就像 `vw-data` 一样
                --mount type=bind,source="本地目录的绝对路径",target=/data/ \
                \ # 如果你使用 Docker 卷
                --mount type=volume,source="Docker 卷名称",target=/data/ \
                --mount type=bind,source=$(pwd),target=/bitwarden/restore/ \
                -e DATA_DIR="/data" \
                ttionya/vaultwarden-backup:latest restore \
                [OPTIONS]
              ```
         
              - 关于选项:
                  1. **你有一个名为 `backup` 的压缩文件:**
         
                  **--zip-file **
         
                  你需要使用这个选项来指定 `backup` 压缩文件。
         
                  请确保压缩文件中的文件名没有被更改。
         
                  **-p / --password**
         
                  **这是不安全的!!**
         
                  如果 `backup` 压缩文件设置了密码,你可以用这个选项指定备份文件的密码。
         
                  不建议使用该选项,因为在没有使用该选项且存在密码时,程序会交互式地询问密码。
         

    [/code]

    1. 测试邮件是否成功:

    略

    1. 镜像更新

    'docker pull ttionya/vaultwarden-backup' 本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议

    1. yaidiya说道: 2023年7月20日 下午5:27
    2. Moreality说道: 2023年7月20日 下午8:04
    3. key说道: 2023年8月31日 下午6:16

    发表回复 取消回复电子邮件地址不会被公开。必填项已用 标注 __ __

    本文著作权归作者 [ doudoudoubao ] 享有,未经作者书面授权,禁止转载,封面图片来源于 [ 互联网 ] ,本文仅供个人学习、研究和欣赏使用。如有异议,请联系博主及时处理。
    取消回复

    发表留言
    回复

    Copyright©2026  All Rights Reserved.  Load:0.012 s
    Theme by OneBlog V3.7.1
    夜间模式

    开源不易,请尊重作者版权,保留基本的版权信息。