Bitwarden是一个Vault软件,将你所有的信息都存储在一个加密的保险库里。它不仅可以可以管理密码,可以添加笔记和文件。这些都是加密存储的,通过一个主密码来解锁保险库。它有免费的版本,可以在它官网上注册,并且有苹果和安卓的客户端。
Bitwarden也是可以私有部署,但是它的组件非常多,部署极为复杂,并且非常占用资源。因此,Vaultwarden出现了。它是一个Bitwarden的替代方案,体验和Bitwarden几乎是一样的,兼容Bitwarden的客户端。它的docker镜像只有一个,部署难度很低,且资源占用很低,2核2G的轻量服务器可以流畅运行。Github项目地址。
最简单的方式就是使用Docker部署。本身作为一个要求安全性的软件,官方推荐部署在一个代理后面,代理负责处理HTTPS的流量。
/data
,这里面有Vaultwarden的数据库文件,默认是SQLite。SIGNUPS_ALLOWED=true
,也就是注册第一个admin账号。在需要的账号的注册都注册完之后,改成false
关闭新用户注册。ADMIN_TOKEN
来管理Admin界面来设置整体应用。设置完之后,将这一行注释掉。network
是让Vaultwarden只可以和Nginx进行交互。我是有一个单独的Nginx来代理很多的应用。每次用新应用就直接attach新的容器到Nginx的网络里。但是可以将Nginx和Vaultwarden放到一个Docker Compose文件里。这样也不需要额外的Docker网络。yamlservices:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: unless-stopped
expose:
- 80
volumes:
- ./vw-data:/data
environment:
- SIGNUPS_ALLOWED=true
- WEBSOCKET_ENABLED=true
- ADMIN_TOKEN='sA3uL1kwrhXEZOu7BIAopdvLL3P99g4qxcN62IKI62HgpN/BQ+ilVjJc6G+oRpaZ'
- DOMAIN=https://password.example.com
networks:
- nginx-reverse-proxy
networks:
nginx-reverse-proxy:
external: true
yamlservices:
nginx:
image: nginx:latest
container_name: nginx-reverse-proxy
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d:ro
- ./log:/var/log/nginx
- /etc/letsencrypt/live/zenseek.site/fullchain.pem:/etc/nginx/certs/fullchain.pem:ro
- /etc/letsencrypt/live/zenseek.site/privkey.pem:/etc/nginx/certs/privkey.pem:ro
- /etc/localtime:/etc/localtime:ro
networks:
- nginx-reverse-proxy
- internet
restart: always
networks:
nginx-reverse-proxy:
external: true
internet:
external: true
http://vaultwarden:80
,因为容器之间通信,只需要HTTP就可以了。而这个容器名可以在docker network里看到它的名字和IP。在YAML文件里设置了container_name
,那就不会错了。nginxserver { listen 443 ssl; server_name password.example.com; # Add this line to increase the limit client_max_body_size 100M; ssl_certificate /etc/nginx/certs/fullchain.pem; ssl_certificate_key /etc/nginx/certs/privkey.pem; # SSL/TLS Security Settings ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers HIGH:!aNULL:!MD5; # Enable HSTS add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; location / { proxy_pass http://vaultwarden:80; 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; } location /notifications/hub { proxy_pass http://vaultwarden:3012; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } location /notifications/hub/negotiate { proxy_pass http://vaultwarden:80; } }
在Nginx的容器内查看新的配置文件是否正确并重启Nginx。
bashroot@b2f567d4689b:/# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
root@b2f567d4689b:/# nginx -s reload
访问地址就是https://password.example.com
. Nginx会终结HTTPS,将HTTP流量转到Vaultwarden容器。在允许注册的情况,页面会让你输入邮箱地址和用户名,然后下一步到设置主密码。
本文作者:潘晓可
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!