分享一下我自建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版本):
第三方版本安装说明 优点:资源占用少,减少服务器负担,特别是自己的小无忧……直接吃了一半内存,改用第三方版本后减少了一半的内存占用。
- 安装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,否则无法进行 - 执行安装脚本
如果之前已经按照方法一安装,此时需要将法一安装的文件卸载……
- 通过此命令来查询命令列表,官网命令会提示带个”-“,实则不用
[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
- 按照官方说明,现执行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]
- 执行后是熟悉的配置rclone的地方,我们也就熟悉的选定新。
- 接着是配置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]
- 接着,选择备份环境,我喜欢坚果云哈哈,继续坚果云。
[code] 注:因为坚果云风控,此处同时设置七牛云的配置,见下方
- 坚果云风控细则(官方邮件)
您好,坚果云不会风控直接拉黑您的账号的。
目前webdav有三个限制:
**文件上传大小限制:**当前 WebDAV 客户端和网页端上传大小的限制是一致的,默认为 500M。
**访问频率限制:**由于WebDAV协议比较占用系统资源,免费版用户限制访问频率为每30分钟不超过600次请求。付费用户限制访问频率为每30分钟不超过1500次请求。
**同步目录数限制:**目前坚果云的WebDAV协议单次请求文件数(包含文件和文件夹)为750个,支持分多页多次加载。如果您使用WebDAV的三方工具未实现按分页多次加载,可能会出现文件同步不完整的情况,建议您使用坚果云客户端进行直接同步。
503错误一般是超过了访问频率的限制了,一般等待一段时间即可,不过不确定您所使用的应用是否还会持续的发起请求,如果会的话,可能建议您最好先断开webdav连接,等待一段时间后再重新连接您的应用试试。
如果您有使用多个webdav应用,需要注意的是其他的应用也会共同受到这些限制。
[/code]
- 完成后先服务器cd到我们需要的目录:
/home/project/rclone_bitwarden_backup
- 检查配置是否设置正确:
[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]
- 使用下面的自动备份镜像 :(注意,这里是我先安装了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]
- 还原备份
[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]
- 测试邮件是否成功:
略
- 镜像更新
'docker pull ttionya/vaultwarden-backup' 本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议
yaidiya说道: 2023年7月20日 下午5:27
Moreality说道: 2023年7月20日 下午8:04
key说道: 2023年8月31日 下午6:16
发表回复 取消回复电子邮件地址不会被公开。必填项已用 标注 __ __