Vaultwarden是一个密码管理器,它有个好处就是可以跨平台使用,网页端可以添加Chrome插件,IOS端可以在password中设置为使用Vaultwarden进行Auto Fill,我之前一直是IOS自带的的,手机又一直在用Safari,所以在电脑上注册了账号手机还得重新保存一遍,因为害怕忘记所以所有的密码都只能设置成一样,这样的风险实在是太大了。

密码管理器这种最好是部署在自己的服务器上,使用官方的话那就和IOS/Chrome差别不大了,这篇文章记录一下如何将它用Docker部署在我的miniPC上,使用Docker Compose和Cloudflared。

还是要提醒一句,自己管理密码还是很烦心的,虽然安全性提高了太多,但是精力也是同步增长,后期导出导入密码,数据备份都会是一个不小的问题。

部署

这里我试过两种部署方法,Nginx和Cloudflared,两种各有优劣。这篇文章主要将如何将服务加入他们的网络,前置配置请看之前的文章:

Nginx

  • 首先我们需要配置好Nginx

  • 创建一个文件夹用于存放配置和Docker关联的数据,文件目录大致为

    ~
    ├── nginx
    └── vaultwarden
        ├── docker-compose.yml
        └── server
    
  • 进入vaultwarden,创建一个docker-compose.yml

    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:
          - 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,输入刚才的明文密码就可以进入了

    Admin Login

  • 但是建议使用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页面邀请新用户了,包括自己