Vaultwarden是一个密码管理器,它有个好处就是可以跨平台使用,网页端可以添加Chrome插件,IOS端可以在password中设置为使用Vaultwarden进行Auto Fill,我之前一直是IOS自带的的,手机又一直在用Safari,所以在电脑上注册了账号手机还得重新保存一遍,因为害怕忘记所以所有的密码都只能设置成一样,这样的风险实在是太大了。
密码管理器这种最好是部署在自己的服务器上,使用官方的话那就和IOS/Chrome差别不大了,这篇文章记录一下如何将它用Docker部署在我的miniPC上,使用Docker Compose和Cloudflared。
还是要提醒一句,自己管理密码还是很烦心的,虽然安全性提高了太多,但是精力也是同步增长,后期导出导入密码,数据备份都会是一个不小的问题。
部署
这里我试过两种部署方法,Nginx和Cloudflared,两种各有优劣。这篇文章主要将如何将服务加入他们的网络,前置配置请看之前的文章:
- Nginx:将自己的服务暴露公网 | Kunyang’s Blog
- Cloudflared:将自己的服务暴露公网 | Kunyang’s Blog
Nginx
-
首先我们需要配置好Nginx
-
创建一个文件夹用于存放配置和Docker关联的数据,文件目录大致为
~ ├── nginx └── vaultwarden ├── docker-compose.yml └── server -
进入
vaultwarden,创建一个docker-compose.ymlservices: vaultwarden: image: vaultwarden/server:latest container_name: vaultwarden restart: unless-stopped expose: - "80" environment: DOMAIN: "https://your.domain.com" VIRTUAL_HOST: "your.domain.com" LETSENCRYPT_HOST: "your.domain.com" LETSENCRYPT_EMAIL: "[email protected]" ICON_SERVICE: "bitwarden" DISABLE_ICON_DOWNLOAD: "true" ADMIN_TOKEN: 'your_admin_token' IP_HEADER: "X-Forwarded-For" SIGNUPS_ALLOWED: "false" # 默认禁止其他人新注册,防止别人白嫖你的服务 volumes: - ./data:/data networks: - nginx networks: nginx: external: true其中这个
ADMIN_TOKEN是你自定义的token,可以取任意字符串,建议越长越好,以抵抗别人的暴力破解。建议自己先想一个明文密码,然后使用argon2,将这个明文密码再转换成一个哈希值,把这个哈希值作为ADMIN_TOKEN。下面命令是让docker pull一个alpine,在alpine里下载argon2工具,然后生成一个token,再把token的$替换成$$,最后再删除容器。docker run --rm alpine sh -c 'apk add --no-cache argon2 openssl >/dev/null && echo -n "YOUR SECRET" | argon2 $(openssl rand -base64 32) -e -id -k 19456 -t 2 -p 1 | sed "s/\\$/\$\$/g"'注意:
- 不要忘记这个明文密码
- 使用双
$$之后,在docker-compose.yml中要使用单引号
-
启动容器
docker compose up -d -
之后注册好域名,开放路由器的443端口,就可以公网访问了。
Cloudflared
-
首先我们需要配置好Cloudflared
-
创建一个文件夹用于存放配置和Docker关联的数据,文件目录大致为
~ ├── cloudflared └── vaultwarden ├── docker-compose.yml └── server -
进入
vaultwarden,创建一个docker-compose.yml,其余的和上述都一致,把网络换成cloudflared即可(之前需要创建过cloudflared这个docker network,且cloudflared容器已经加入了这个网络)services: vaultwarden: image: vaultwarden/server:latest container_name: vaultwarden restart: unless-stopped expose: - "80" environment: DOMAIN: "https://your.domain.com" VIRTUAL_HOST: "your.domain.com" LETSENCRYPT_HOST: "your.domain.com" LETSENCRYPT_EMAIL: "[email protected]" ICON_SERVICE: "bitwarden" DISABLE_ICON_DOWNLOAD: "true" ADMIN_TOKEN: 'your_admin_token' IP_HEADER: "X-Forwarded-For" SIGNUPS_ALLOWED: "false" # 默认禁止其他人新注册,防止别人白嫖你的服务 volumes: - ./data:/data networks: - cloudflared networks: cloudflared: external: true -
注意cloudflared官网的配置应该和你本地的docker容器用一样的端口
-
启动容器后可以登录到admin页面,url是
your_hostname/admin,输入刚才的明文密码就可以进入了
-
但是建议使用
docker-compose.yml做配置,因为它的优先级高,这样可以避免冲突,admin页面仅用于读取 -
添加SMTP,配置邮件,我用的是Gmail
environment: SMTP_HOST: "smtp.gmail.com" SMTP_FROM: "YOUR EMAIL" SMTP_FROM_NAME: "Vaultwarden" SMTP_SECURITY: "starttls“ SMTP_PORT: "587" SMTP_USERNAME: "YOUR EMAIL" SMTP_PASSWORD: "YOUR PASSWORD" SMTP_AUTH_MECHANISM: "Plain" SMTP_TIMEOUT: "15"填写完之后可以重启一个容器
-
之后就可以去Users页面邀请新用户了,包括自己