bitwarden_rs

在个人隐私毫不安全的年代。
密码太多记不住、密码太简单容易被撞库怎么办?
当然是自建个人密码库啦!!!使用自带的生成器生成不低于16位及以上的密码!,再也不用担心被撞库了!

bitwarden_rs

官方原版教程(英文):https://github.com/dani-garcia/bitwarden_rs/wiki

直接使用docker拉取容器,使用命令+参数运行

使用SQLite存储数据的初始化(初次使用无证书,记得反代启用SSL证书,否则客户端无法连接)

docker stop rs
docker rm rs
docker run -d --name rs \
  -e DOMAIN=http://ip或域名:8088 \
  -e ADMIN_TOKEN=HWsaw6Vjmz46BReN\
  -v /home/bw-data/:/data/ \
  -p 8088:80 \
  vaultwarden/server:latest
docker logs --tail 30 -f rs

第一次运行。需要初始化设置域名、管理员密码。请改成你自己的在运行!

docker logs --tail 30 -f rs 为容器日志查看。一般无问题的话可按CTRL+C取消查看

登陆后台

如果初始化密码的时候忘记改了,可以登陆后在后台修改 ,也可以改配置文件

ip:8088/admin

登陆后可修改各种参数,记得点击保存按钮。也可使用下方配置文件脚本直接写入

配置文件设置

cat > /home/bw-data/config.json<<-EOF
{
  domain: https://ip或域名:8088,
  disable_icon_download: false,
  signups_allowed: false,
  signups_verify: false,
  signups_verify_resend_time: 3600,
  signups_verify_resend_limit: 6,
  invitations_allowed: true,
  password_iterations: 100000,
  show_password_hint: true,
  admin_token: HWsaw6Vjmz46BReN,
  invitation_org_name: Bitwarden_RS,
  ip_header: X-Real-IP,
  icon_cache_ttl: 2592000,
  icon_cache_negttl: 259200,
  icon_download_timeout: 10,
  icon_blacklist_non_global_ips: true,
  disable_2fa_remember: false,
  authenticator_disable_time_drift: false,
  require_device_email: false,
  reload_templates: false,
  disable_admin_token: false,
  _enable_yubico: false,
  _enable_duo: false,
  _enable_smtp: false,
  smtp_host: smtpdm.aliyun.com,
  smtp_ssl: true,
  smtp_explicit_tls: true,
  smtp_port: 465,
  smtp_from: xxxx@发信域名,
  smtp_from_name: 迷失安全密码库_Bitwarden_RS,
  smtp_username: 发信用户名,
  smtp_password: 发信密码,
  smtp_timeout: 15,
  _enable_email_2fa: true,
  email_token_size: 6,
  email_expiration_time: 600,
  email_attempts_limit: 3
}
EOF

然后用新的命令启动容器

  • 启动SQLite
docker stop rs
docker rm rs
docker run --name rs --restart=always -d -v /home/bw-data/:/data/ -p 8088:80 vaultwarden/server:latest
docker logs --tail 30 -f rs
# --restart=always 表示启动容器后自动启动此镜像。
docker run --name rs --restart=always -d -v /home/bw-data/:/data/ -p 8088:80 vaultwarden/server:latest
# 容器名称简写为rs,方便手动重启镜像,例如:docker restart rs
# 8080:80 将本地8080端口映射到容器80端口,然后使用caddy或者nginx反向代理本机的8080端口.并且安装ssl证书

如果你的docker/ bitwarden_rs在具有固定IP的设备上运行,则可以将主机端口绑定到该特定IP,从而避免将主机端口暴露给外网。

如下所示,在主机端口和容器端口前面添加IP地址(例如192.168.0.2):

docker run --name rs --restart=always -d -v /home/bw-data/:/data/ -p 192.168.0.2:8088:80 vaultwarden/server:latest

查看容器IP

docker inspect --format '{{ .NetworkSettings.IPAddress }}'  rs
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' rs
docker inspect rs

获取宿主机IP

ip address show docker0

升级容器

# 升级SQLite bitwardenrs代码
docker pull vaultwarden/server:latest
# 关闭容器
docker stop rs
# 杀死已经运行的容器
#docker kill rs
# 杀死并删除旧容器
docker rm -f rs
# 然后运行上面的run代码启动
# 运行正常~删除无用旧镜像
docker image prune -f

自用升级脚本(自行修改pull的类型)

cat > /root/qdrs.sh<<-EOF
#!/usr/bin/env bash
echo Info:bitwardenrs 开始
docker pull vaultwarden/server:latest
docker stop rs
docker rm rs
#clear
docker run --name rs --restart=always -d -v /opt/bitwarden/:/data/ -p 8088:80 vaultwarden/server:latest
#clear
docker image prune -f
echo Info:bitwardenrs 完成
echo Info:以下为实时日志 docker logs --tail 30 -f rs
EOF

然后执行 bash /root/qdrs.sh

数据备份

  • SQLite3数据库

应该使用自带的的sqlite3 backup命令备份sqlite3数据库。如果在数据库工作期间进行备份,这将确保数据库不会损坏。

mkdir /home/bw-data/db-backup
sqlite3 /home/bw-data/db.sqlite3 .backup '/home/bw-data/db-backup/backup.sqlite3'

Mysql数据库教程网络很多。可搜索下。。暂时不写

  • 附件文件夹

默认情况下,它位于 /home/bw-data/attachments

  • 密钥文件(可选备份)

它们仅用于存储当前登录用户的令牌,删除令牌只会将每个用户注销,从而要求他们再次登录。

默认情况下,它们位于<span class="color" style="color:#0693e3">/home/bw-data</span>。有3个文件: rsa_key.der、 rsa_key.pem、rsa_key.pub.der。

  • 网站图标缓存(可选备份)

图标缓存可以自行重新下载,但是如果缓存很大,则可能需要很长时间。 默认情况下,它位于/home/bw-data/icon_cache中

从SQLite切换到Mysql

之前再下就一个人使用,所以使用了SQLite数据库。

后来带上小伙伴以及盆友等等,人就多起来了。

考虑到SQLite的效率比不上Mysql,且Mysql用APPNODE备份很方便。故此进行迁移

从SQLite迁移到MySQL

首先嘛,创建 数据库、专用用户名、专用密码(记得改成你自己的再执行)

教程使用的库:bitwarden_rs 用户名:bitwarden_rs 密码:jRts8Vec6RwcoDn6 容器镜像IP:172.17.0.2

mysql -uroot -p
# 输入密码后回车,然后继续
CREATE DATABASE `bitwarden_rs` COLLATE 'utf8_general_ci';
# 下面为你的数据库用户名、镜像IP、密码。
CREATE USER 'bitwarden_rs'@'localhost' IDENTIFIED BY 'jRts8Vec6RwcoDn6';
GRANT ALL ON `bitwarden_rs`.* TO 'bitwarden_rs'@'localhost';
CREATE USER 'bitwarden_rs'@'172.17.0.2' IDENTIFIED BY 'jRts8Vec6RwcoDn6';
GRANT ALL ON `bitwarden_rs`.* TO 'bitwarden_rs'@'172.17.0.2';
FLUSH PRIVILEGES;
exit

停止旧的镜像,启用一次Mysql的bitwarden_rs镜像

docker stop rs
docker run -d --name rs --restart=always \
-e DATABASE_URL='mysql://bitwarden_rs:[email protected]:3306/bitwarden_rs' \
-e ENABLE_DB_WAL='false' \
-v /home/bw-data/:/data/ \
-p 8088:80 \
bitwardenrs/server-mysql:latest
docker stop rs

开始将SQLite转换成MySQL的sql

cd /home/bw-data
sqlite3 db.sqlite3 .dump > sqlitedump.sql
grep INSERT INTO sqlitedump.sql | grep -v __diesel_schema_migrations > mysqldump.sql
rm -f sqlitedump.sql

2020年5月6日 然后报错了。。。找了半天是双引号的问题。。。

# 替换引号
sed -i s#\#\#g mysqldump.sql

导入sql到数据库

mysql -ubitwarden_rs -pjRts8Vec6RwcoDn6
use bitwarden_rs
source /home/bw-data/mysqldump.sql
exit

然后启动bitwarden_rs

docker start rs
docker logs --tail 30 -f rs