首先,自建不推荐用官方的docker版本,占用很大,推荐用vaultwarden版本
下面比较杂乱,去年写下的,摸鱼的时候直接从notion复制出来删除了敏感字段贴出来的……回头改一下
当前网络环境不方便上外网,项目地址自行在github寻找vaultwarden,stars最多的那个就是
推荐安装在国内小鸡
我自己使用的amh面板,坛子里用的不多,就不写amh的lngx反代部分了,也很简单,bt自己配置即可
docker cli 懒人不看版
# 记得删除下面的注释
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
详细版命令行(第三方Bitwarden_rs/vaultwarden版本):
-
第三方版本安装说明
优点:资源占用少,减少服务器负担,特别是自己的小无忧……直接吃了一半内存,改用第三方版本后减少了一半的内存占用。
- 安装docker和Docker Compose
- 创建 Bitwarden 本地用户和目录
sudo adduser bitwardensudo passwd bitwarden:自己设置密码sudo groupadd docker详见docker安装说明,通常安装了docker就有了该用户组sudo usermod -aG docker bitwarden将用户添加到docker用户组sudo chmod -R 700 /home/project/bitwarden为目录设置权限,该目录手动创建,以/home/project/bitwarden为例sudo chown -R bitwarden:bitwarden /home/project/bitwarden将 bitwarden 用户设置为目录的所有者,注意,这里的user:group拥有文件的用户和组,以冒号分隔,中间没有空格- su
bitwarden,并cd/home/project/bitwarden,否则无法进行
- 执行安装脚本
-
如果之前已经按照方法一安装,此时需要将法一安装的文件卸载……
- 通过此命令来查询命令列表,官网命令会提示带个”-“,实则不用
./bitwarden.sh help- 卸载之前先将原本的数据导出备份
- 执行命令,根据提示给两次Y
./bitwarden.sh uninstall -
执行以下安装脚本(通过docker)
docker pull vaultwarden/server:latest- 执行下个语句,挂载本地配置,注意这里修改了端口号和挂载目录
docker run -d --name vaultwarden -v /home/project/bitwarden/:/data/ -p 8080:80 vaultwarden/server:latest- 更新镜像
# 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
管理员功能
- 在使用前务必开启https
- 启用管理功能先要设置身份验证令牌:
```jsx
-e ADMIN_TOKEN=你的令牌 \
```
- 此时可以通关***/admin/***页面进行访问。
- 一次在管理页面中保存设置时,将在 DATA _ FOLDER 中生成 config.json。此文件中的值将优先于相应的环境变量。同时如果要关闭记得将其中的`"admin_token"键删除。`
启用 WebSocket 通知
- 默认端口`-p 3012:3012 \`
- 启用功能`-e WEBSOCKET_ENABLED=true \`
- 目前应该需要结合WebSocket 服务器来使用
- 可在管理页面配置。
将Steam暴雪等应用安全令牌增加到密码库中
将两步验证的TOTP提取出来填入管理器的编辑框即可,不同的应用对应的totp长度以及提取方法不一样,这里就不再赘述,具体方法请自行搜索。
自动备份 不推荐,我推荐最下方的docker方式备份
可以用,但是更建议使用下面的,也可以都采用,更安全,密码这东西丢了就真丢了
官方说明:
Backing up your vault · dani-garcia/vaultwarden Wiki
参考项目:
- 完成上个page的相关部署后,我们继续实现bitwarden的自动备份
- 监听文件变化进行坚果云同步
-
其实也可以直接将上面的
docker-compose挂载目录设置到webdav的挂载目录上去,但是icon_cache这个目录下很多文件,调用webdav次数过多会触发坚果云风控,如果不在意的话也可以采取该方案 -
这里是采用
inotify进行监控同步的方案:- 首先安装
rsync和inotifywait
apt install -y rsync inotify-tools使用教程:
inotifywait的安装及基本使用_liuwkk的博客-CSDN博客
- 然后监控文件变更,同步到webdav的挂载目录
# 示例代码 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.最后这个是有坑的:实际上应该是:
创建文件
auto_Sync_bitwarden.sh给权限
sudo chmod 755 ./auto_Sync_bitwarden.sh# 留着备用 # 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上面这个shell脚本适合一直监听执行……最后想了想,我才用了下面的定时备份方法
- 首先安装
-
如果利用crontab定时执行:
TaoR的定时执行操作过程:
使用前先确认是否开启ubuntu系统cron日志。
- 查看日志
cat /var/log/cron.log
创建文件:
auto_Sync_bitwarden_crontab.shrsync -aHv /home/project/bitwarden /home/project/rclone_bitwarden_backup注意是否给予了权限:
sudo chmod 755 ./xxxxx.sh如有权限,可以先执行测试。
使用crontab示例:
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服务*/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
-
按照官方说明,现执行docker 镜像,获取token。这里的镜像一大部分都是Rclone。
```jsx docker run --rm -it \ --mount type=volume,source=vaultwarden-rclone-data,target=/config/ \ ttionya/vaultwarden-backup:latest \ rclone config ``` -
执行后是熟悉的配置rclone的地方,我们也就熟悉的选定新。
-
接着是配置rclone远程名称,偷个懒就按照官方的建议了:
BitwardenBackup
- 不偷懒相关:设置环境变量建议将远程名称设置为 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` -
接着,选择备份环境,我喜欢坚果云哈哈,继续坚果云。
注:因为坚果云风控,此处同时设置七牛云的配置,见下方 - 坚果云风控细则(官方邮件) 您好,坚果云不会风控直接拉黑您的账号的。 目前webdav有三个限制: **文件上传大小限制:**当前 WebDAV 客户端和网页端上传大小的限制是一致的,默认为 500M。 **访问频率限制:**由于WebDAV协议比较占用系统资源,免费版用户限制访问频率为每30分钟不超过600次请求。付费用户限制访问频率为每30分钟不超过1500次请求。 **同步目录数限制:**目前坚果云的WebDAV协议单次请求文件数(包含文件和文件夹)为750个,支持分多页多次加载。如果您使用WebDAV的三方工具未实现按分页多次加载,可能会出现文件同步不完整的情况,建议您使用坚果云客户端进行直接同步。 503错误一般是超过了访问频率的限制了,一般等待一段时间即可,不过不确定您所使用的应用是否还会持续的发起请求,如果会的话,可能建议您最好先断开webdav连接,等待一段时间后再重新连接您的应用试试。 如果您有使用多个webdav应用,需要注意的是其他的应用也会共同受到这些限制。 -
完成后先服务器cd到我们需要的目录:
/home/project/rclone_bitwarden_backup -
检查配置是否设置正确:
```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 ``` -
使用下面的自动备份镜像:(注意,这里是我先安装了bitwarden,所以才执行本镜像。)
- 坚果云备份```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`指定数据文件夹,问题基本在这里 -
还原备份
**重要:** 还原备份会覆盖已存在的文件。 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` 压缩文件设置了密码,你可以用这个选项指定备份文件的密码。 不建议使用该选项,因为在没有使用该选项且存在密码时,程序会交互式地询问密码。 -
测试邮件是否成功:
略
- 镜像更新
'docker pull ttionya/vaultwarden-backup'

了解,学习,点赞
最新版本的 vaultwarden 已经不需要 websocket 单独的端口了: https://github.com/dani-garcia/vaultwarden/wiki/Enabling-WebSocket-notifications
技术帖,绑定