使用 Docker 部署 Bitwarden 第三方开源后端 vaultwarden
最近无聊, 搞搞密码管理器, 在自己的服务器上存密码. (好像还是第一次使用 Docker)
Bitwarden 是一个开源的密码管理器, 而 vaultwarden 是一个调用 Bitwarden API 实现的第三方服务端, 据说能够使用 Bitwarden 的付费内容, 而且资源占用更少.
为了方便, 这里使用 Docker 部署 vaultwarden.
安装 Docker CE (社区版)
一般来说都能够安装 Docker, 装不了升级一下内核(或者砸了服务器重买一个).
yum -y install docker-ce
直接用 root 比较方便, 因为 docker 运行也需要 root 权限组.
docker version
检查是否安装成功.
安装 Docker compose
Docker compose 是一个运行多个 Docker 容器的工具, 非常方便.
在 release 里下载对应的二进制文件, 然后拷贝到任意一个 bin 目录下, 给可执行权限就行了.
docker-compose version
检查是否安装成功.
部署 vaultwarden
在某个目录下新建文件 docker-compose.yml
, 输入以下内容:
version: '3'
services:
vaultwarden:
image: vaultwarden/server:latest
restart: always
ports:
+ "3080:80"
+ "3012:3012"
environment:
DOMAIN: 'https://bitwarden.example.com/'
SIGNUPS_ALLOWED: 'true'
WEBSOCKET_ENABLED: 'true'
volumes:
+ ./data:/data
解释一下, image
是镜像名, 后面指定版本, ports
是本机和 docker 的端口映射, 这里表示将 docker 的 80 端口映射到本机的 3080 端口, 将 docker 的 3012 端口映射到本机的 3012 端口(3012 是 Bitwarden 的 websocket 默认端口). 环境里的 WEBSOCKET_ENABLED
是设置启用 ws. DOMAIN
是部署的域名(可以通过这个域名访问网页端, 这个域名也是各个客户端链接到服务器的凭证). SIGNUPS_ALLOWED
是允许注册(相当于服务器部署后, 可以注册多个帐号, 每个帐号都可以保存各自的数据, 所以先要开放注册, 自己一个人用的话注册完了以后就可以关了). volumes
是将 docker 中的 /data
目录实际存储在 ./data
(当前目录下的 data
文件夹).
然后启动容器, 在 docker-compose.yml
所在目录运行命令:
docker-compose up -d
Nginx 代理
Bitwarden 是存密码等重要信息的, 所以需要 SSL. 先给域名搞一个证书, 然后添加 Nginx 配置如下:
Define the server IP and ports here.
upstream bitwardenrs-default { server 127.0.0.1:3080; }
upstream bitwardenrs-ws { server 127.0.0.1:3012; }
Redirect HTTP to HTTPS
server {
listen 80;
server_name bitwarden.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name bitwarden.example.com;
SSL
ssl_certificate /etc/ssl/fullchain.pem;
ssl_certificate_key /etc/ssl/privkey.pem;
ssl_trusted_certificate /etc/ssl/chain.pem;
client_max_body_size 128M;
location / {
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://bitwardenrs-default;
}
location /notifications/hub/negotiate {
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://bitwardenrs-default;
}
location /notifications/hub {
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://bitwardenrs-ws;
}
}
把证书和服务器名称换一下就行了, 如果映射的端口不一样的话也记得换一下.
然后访问 bitwarden.example.com
就可以注册了使用了.