bitwarden_rs是一个免费开源、能自己搭建服务端的安全密码库服务器
- https://bitwarden.com/
- https://github.com/dani-garcia/bitwarden_rs
- https://hub.docker.com/r/bitwardenrs/server
Docker安装
wget -qO- get.docker.com | bash
安装Docker Compose
curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` > ./docker-compose
mv ./docker-compose /usr/bin/docker-compose
chmod +x /usr/bin/docker-compose
Docker进程管理
systemctl enable docker
systemctl start docker
systemctl status docker
部署 Bitwarden
‘bitwarden_rs’的docker镜像bitwardenrs/server现已变更为vaultwarden/server
为了安全,可通过docker并创建一个临时容器,Generate an Argon2id PHC string using the ‘bitwarden’ preset。
docker run --rm -it vaultwarden/server /vaultwarden hash
得到用bitwarden生成的ADMIN_TOKEN值。类似如下值
ADMIN_TOKEN='$argon2id$v=19$m=65540,t=3,p=4$iK/BPqYwo02kukcDLJH+oUV1OSGkI0NRSgpGJam3Y6A$PTk/xhEI0bWQk8mWwk8HWdOQMwOipBAtMSEU8CAt274'
复制替换掉ADMIN_TOKEN值
docker run -d --name bitwarden --restart=always -v /bw-data/:/data/ -p 45729:80 -e SIGNUPS_ALLOWED=false -e INVITATIONS_ALLOWED=false -e ADMIN_TOKEN=`ADMIN_TOKEN值` vaultwarden/server:latest
以下参数可自定义按需修改:
SIGNUP_ALLOWED值是否允许注册INVITATIONS_ALLOWED值是否允许组织邀请注册youpassword用户管理界面 (/admin)的密码/bw-data/宿主机映射目录- 将宿主机的
45729映射到容器的80端口上 --restart=always自动启动bitwarden-e SHOW_PASSWORD_HINT=false禁用密码提示
禁用日志添加-e LOG_LEVEL=off、 -e USE_SYSLOG=false 、-e EXTENDED_LOGGING=false
新增 SSH密钥 类型
-e EXPERIMENTAL_CLIENT_FEATURE_FLAGS=ssh-key-vault-item,ssh-agent
完整示范
docker run -d --name bitwarden --restart=always -e EXPERIMENTAL_CLIENT_FEATURE_FLAGS=ssh-key-vault-item,ssh-agent -e TZ=Asia/Shanghai -e SHOW_PASSWORD_HINT=false -v /bw-data/:/data/ -p 45729:80 -e SIGNUPS_ALLOWED=false -e INVITATIONS_ALLOWED=false -e ADMIN_TOKEN='$argon2id$v=19$m=65540,t=3,p=4$iK/BPqYwoMPsukcDLJH+oUV1OSGkI0NRSgpGJam3Y6A$PTk/xhEI0bWQk8mWwk8HWdOQMwOipBAtMSEU8CAt274' vaultwarden/server:latest
bitwarden容器操作命令
启动容器
docker start bitwarden
停止容器
docker stop bitwarden
删除容器
docker rm bitwarden
升级 Bitwarden 镜像
docker stop bitwarden
docker pull vaultwarden/server:latest
docker start bitwarden
备份Bitwarden
以下为必须要备份的
/bw-data/db.sqlite3是Bitwarden的数据库文件/bw-data/sends/*目录下的所有附件是不加密的
docker restart bitwarden
# 手动检查文件更新
# ls -l /bw-data/db.sqlite3
# rclone ls rclonename:bitwarden/db.sqlite3
rclone sync /bw-data/db.sqlite3 rclonename:bitwarden --update
#rclone sync /bw-data/db.sqlite3 rclonename:bitwarden --ignore-times --size-only
其它的都可以不备份(可选),例如/bw-data/config.json管理面板参数,把下面的内容保存为bitwarden_backup.sh
/bw-data/db.sqlite3是Bitwarden 数据库文件 /root/bitwarden/db.sqlite3是本地复制过来的,用于上传到github或通过rclone上传,判断比对MD5值,只有当有更新才上传。
#!/bin/bash
# 重新启动 Bitwarden Docker 容器
docker restart bitwarden
# 等待 Bitwarden 容器启动完成
sleep 3
# 获取 Bitwarden 数据库文件的 MD5 值
db_md5_before=$(md5sum /bw-data/db.sqlite3 | awk '{print $1}')
# 再次获取 Bitwarden 数据库文件的 MD5 值
db_md5_after=$(md5sum /root/bitwarden/db.sqlite3 | awk '{print $1}')
# 如果 MD5 值没有变化,则结束脚本
if [ "$db_md5_before" == "$db_md5_after" ]; then
echo "Bitwarden 数据库没有更新,脚本退出。"
exit 0
fi
#
cd /root/bitwarden/
rm /root/bitwarden/db.sqlite3
cp -f /bw-data/db.sqlite3 /root/bitwarden
# 把备份压缩包文件通过github私有仓库
git add --all
# 指定时间格式
DATE=$(TZ=Asia/Shanghai date +%Y-%m-%d_%H:%M:%S)
git commit -m "$DATE"
git push
echo "github push推送更新成功。"
# 下面是网盘备份
# 把db.sqlite3加密压缩
# 指定时间格式
DATE=$(TZ=Asia/Shanghai date +%Y%m%d%H%M%S)
zip -P yourpassword -r /bw-data/tmp/bw-$DATE.zip /bw-data/db.sqlite3 /bw-data/sends
# 把备份压缩包文件通过rclone上传到网盘
rclone copy /bw-data/tmp/*.zip rclonename:bitwarden
# 删除15天前的备份文件
rclone delete rclonename:bitwarden --min-age 15d
# 删除压缩包文件
rm /bw-data/tmp/*.zip
echo "删除压缩包文件"
# 提示用户更新完成
echo "Bitwarden 数据库已经更新完毕。"
然后授权
chmod +x bitwarden_backup.sh
通过Crontab定时执行计划任务,编辑/etc/crontab文件,添加
23 11 * * * root bash /root/bitwarden_backup.sh
然后重启Crontab
systemctl restart cron.service
/etc/init.d/cron restart
还原Bitwarden的备份数据库、镜像备用站点
rclone sync rclonename:bitwarden/db.sqlite3 /bw-data --ignore-times --size-only
docker restart bitwarden
解压、替换掉原来的文件即可,创建bitwarden_sync.sh文件,
#!/bin/bash
rm /root/bitwarden/db.sqlite3
# 例如从github恢复
cd /root/bitwarden && git pull
# 或者从rclone恢复,二选一即可
rclone copy rclonename:bitwarden/db.sqlite3 /root/bitwarden
# 获取 Bitwarden 数据库文件的 MD5 值
db_md5_before=$(md5sum /root/bitwarden/db.sqlite3 | awk '{print $1}')
# 再次获取 Bitwarden 数据库文件的 MD5 值
db_md5_after=$(md5sum /bw-data/db.sqlite3 | awk '{print $1}')
# 如果 MD5 值没有变化,则结束脚本
if [ "$db_md5_before" == "$db_md5_after" ]; then
echo "Bitwarden 数据库没有更新,脚本退出。"
exit 0
fi
rm /bw-data/db.sqlite3 /bw-data/db.sqlite3-shm /bw-data/db.sqlite3-wal
cp /root/bitwarden/db.sqlite3 /bw-data
# 重新启动 Bitwarden Docker 容器
docker restart bitwarden
# 等待 Bitwarden 容器启动完成
sleep 3
# 提示用户更新完成
echo "Bitwarden 数据库已经更新完毕。"
SMTP邮件设置
在docker部署时加上SMTP的参数,示范阿里云域名邮箱
-e SMTP_HOST=smtp.qiye.aliyun.com -e SMTP_FROM=info@example.com -e SMTP_PORT=465 -e SMTP_SECURITY=force_tls -e SMTP_USERNAME=info@example.com -e SMTP_PASSWORD=yourPassword
必要选项如下
-e SMTP_HOST=smtp.qiye.aliyun.com \
-e SMTP_FROM=info@example.com \
-e SMTP_PORT=465 \
-e SMTP_SECURITY=force_tls \
-e SMTP_USERNAME=info@example.com \
-e SMTP_PASSWORD=yourPassword \
也可以登陆http://IP:端口号/admin在网页端手动添加修改
如果发送测试时报错,请注意Secure SMTP认证方式有starttls 、force_tls 、 off及对应的端口号要设置正确
| Secure SMTP | Port |
|---|---|
| starttls | 587 |
| force_tls | 465 |
| off | 25 |
nginx配置带SSL证书的站点配置文件示范
编辑/etc/nginx/sites-available/example.com站点配置文件
server {
listen 80;
listen [::]:80;
server_name example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name example.com;
location / {
proxy_pass http://127.0.0.1:45729;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
ssl on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
}
Send上传发送文件报错
解决nginx上传文件时413 Request Entity Too Large错误
产生原因:
上传文件的大小超出了 Nginx 允许的最大值,如果没有配置的话,默认是1M;
解决方法:修改Nginx的配置文件
nano /etc/nginx/nginx.conf
在 http{} 段中增大nginx上传文件大小限制
#设置允许发布内容为500M
client_max_body_size 500M;
client_body_buffer_size 512k;
修改完成后,测试并重新加载配置文件
nginx -t
nginx -s reload
systemctl start nginx
客户端使用
Desktop
Support for Windows 7, 8, and 10
Support for most distributions