更新
2024.02.12更新,按照文档从新配置,反向代理使用的的 Nginx Proxy Manager
,使用 docker-compose
部署,其他的没必要看了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| version: '3'
services: vaultwarden: container_name: vaultwarden image: vaultwarden/server:latest restart: unless-stopped volumes: - ./data/:/data/ ports: - 127.0.0.1:8080:80 environment: - SIGNUPS_ALLOWED=ture - INVITATIONS_ALLOWED=false - PUSH_ENABLED=true - PUSH_INSTALLATION_ID=<> - PUSH_INSTALLATION_KEY=<> - DOMAIN=https://pa.365day.top - SHOW_PASSWORD_HINT=false - LOGIN_RATELIMIT_MAX_BURST=2 - EMERGENCY_ACCESS_ALLOWED=false - WEB_VAULT_ENABLED=false
|
更新升级镜像
1 2 3 4 5
| docker-compose pull
docker-compose up -d
docker image prune
|
背景
目前在用的密码管理软件是 1Password,没有订阅,使用的是 iCloud 同步,希望有一个全平台的密码管理软件,最后目标锁定在了 Enpass 和 Bitwarden 上。
Enpass 需要 29.99 美刀购买终身订阅,可以通过坚果云 webdav 协议同步自己的密码,密码文件由自己管理,缺点是在 Windows 端使用的时候,软件需要后台运行,才能在浏览器正常使用插件(也没毛病,密码又不在云端,那只能软件后台运行)
Enpass 购买地址:Enpass Password Manager Individual Plan: Lifetime Subscription
可以考虑等黑五的时候购买,有优惠的时候可以到 15 美刀。
Bitwarden 官方提供免费服务,也可以 10 美刀订阅高级版,解锁了 TOTP 验证,密码储存在云端,当然软件是开源的,也可以自己搭建,今天就来自己尝试搭建一下 Bitwarden 服务。
环境
Bitwarden 有两个版本
- 一个是官方提供的免费版(没有解锁高级功能):开源地址
- 一个是第三方基于 Rust 编写的解锁了高级功能的版本:开源地址
本次部署的是基于 Rust 的版本,使用的系统是 Ubuntu 20.04.1,使用 Docker 部署
安装
1、安装 docker
1
| wget -qO- get.docker.com | bash
|
查看安装结果,并设置开机自启
1 2 3
| docker version systemctl start docker systemctl enable docker
|
查看状态
2、运行镜像
拉取最新镜像
1
| docker pull vaultwarden/server:latest
|
运行镜像,目的是先配置好账号,之后再进行详细的配置(将容器的 80 端口映射到宿主机的 8080 端口,因为 80 端口要由 Nginx 监控)
1
| docker run -d --name bitwarden -v /vw-data/:/data/ -p 8080:80 vaultwarden/server:latest
|
需要启用启用 HTTPS ,不然无法设置账号(bitwarden 强制服务端必须提供 https)
This browser requires HTTPS to use the web vault
Check the Vaultwarden wiki for details on how to enable it
提前准备好证书和私钥,创建目录
把证书和私钥放到目录下,比如我的文件名字
ps.365day.top.crt ps.365day.top.key
3、配置 Nginx
修改配置文件
1 2
| mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak vim /etc/nginx/nginx.conf
|
Nginx 的完整配置如下,需要修改 3 处位置,已经标注。使用的例子:Proxy-examples
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
| user www-data; worker_processes auto; pid /run/nginx.pid; include /etc/nginx/modules-enabled/*.conf;
events { worker_connections 768; # multi_accept on; }
http {
upstream vaultwarden-default { zone vaultwarden-default 64k; server 127.0.0.1:8080; keepalive 2; }
upstream vaultwarden-ws { zone vaultwarden-ws 64k; server 127.0.0.1:3012; keepalive 2; }
# Redirect HTTP to HTTPS server { listen 80; listen [::]:80; # 1、配置自己的域名 server_name ps.365day.top; return 301 https://$host$request_uri; }
server { listen 443 ssl http2; listen [::]:443 ssl http2; # 2、配置自己的域名 server_name ps.365day.top;
# 3、配置SSL证书位置 # 配置证书文件 ssl_certificate /vw-data/ssl/ps.365day.top.crt; # 配置证书私钥文件 ssl_certificate_key /vw-data/ssl/ps.365day.top.key;
client_max_body_size 128M;
location / { proxy_http_version 1.1; proxy_set_header "Connection" "";
proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://vaultwarden-default; }
location /notifications/hub/negotiate { proxy_http_version 1.1; proxy_set_header "Connection" "";
proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://vaultwarden-default; }
location /notifications/hub { proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade";
proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Forwarded $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://vaultwarden-ws; } } }
|
设置开机启动,重启
1 2
| systemctl enable nginx systemctl restart nginx
|
开放防火墙端口
1 2 3 4 5 6
| iptables -I INPUT -p tcp --dport 80 -j ACCEPT iptables -I INPUT -p tcp --dport 443 -j ACCEPT iptables -I INPUT -p tcp --dport 3012 -j ACCEPT iptables-save netfilter-persistent save netfilter-persistent reload
|
4、根据 wiki 文档配置
之后应该就可以使用域名正常访问了,先创建一个账号。
账号创建完成之后,移除镜像,完善配置后重新创建
1 2
| docker stop bitwarden docker rm bitwarden
|
文档地址:Vaultwarden,部署以前最好先阅读一遍 wiki、
配置说明(更多的自行阅读 wiki 文档)
- SIGNUPS_ALLOWED=false:禁用新用户的注册
- INVITATIONS_ALLOWED=false:禁用组织邀请
- ADMIN_TOKEN:设置身份验证令牌,启用管理页面(使用命令
openssl rand -base64 48
生成) - WEBSOCKET_ENABLED=true:启用通知,例如当密码数据库中的条目被修改或删除时。收到通知(对移动端不起作用),需要开放
3012
端口 - DOMAIN=https://<自己的域名>:启用 U2F 身份验证
- SHOW_PASSWORD_HINT=false:密码提示显示
如果需要启用管理页面(此处的设置将覆盖环境变量,地址为域名后面/admin),首先执行命令,复制生成的秘钥
root@ubuntu:~# openssl rand -base64 48
ET1f7w5ieS7Zh1ChDb1MSjaNiQK6l0f07cI13cTwXOhRCAYakHAttSTt7URTHnD8
根据上面的配置,运行 docker 镜像
1 2 3 4 5 6 7 8 9
| docker run -d --name bitwarden \ -e SIGNUPS_ALLOWED=false \ -e INVITATIONS_ALLOWED=false \ -e WEBSOCKET_ENABLED=true \ -e DOMAIN=https://ps.365day.top \ -v /vw-data/:/data/ \ -p 8080:80 \ -p 3012:3012 \ vaultwarden/server:latest
|
现在就不允许注册。注册的话会出现提示:Registration not allowed or user already exists
这时我们就可以用之前注册好的账户登录
备份
这里使用 git 来定期备份
1、在 GitHub 创建私有仓库
2、系统安装 git
3、在个人指定的位置建立仓库,并和远程仓库建立连接,我是建立在了 /root/bitwarden
目录下
4、建立脚本 bitwarden.sh
,脚本内容如下
1
| cd /vw-data && tar czvf bitwarden_backup_$(date '+%Y%m%d_%H%M').tgz /vw-data && mv bitwarden_backup_$(date '+%Y%m%d_%H%M').tgz /root/bitwarden && cd /root/bitwarden && git add . && git commit -m 'update' && git push && find /root/bitwarden -mtime +7 -name "bitwarden_backup_*.tgz" -exec rm -Rf {} \;
|
5、赋予权限,创建定时任务,可以设置每天备份一次,每次执行会检查是否有 7 天前的备份,并自动删除。