Contents

Docker宝库:密码管理器Vaultwarden

Contents

Vaultwarden是一个密码管理器,包括个人保险库、TOTP/硬件密钥 2FA、密码生成与自动填充、附件与发送(安全一次性分享)、组织共享、目录遍历自动填表等,且全部免费。

运行docker命令:

docker run -d \
  --name vaultwarden \
  --restart unless-stopped \
  -e DOMAIN=https://pw.example.com \
  -e SIGNUPS_ALLOWED=true \
  -e ADMIN_TOKEN="your-admin-token" \
  -v /opt/vaultwarden:/data \
  -p 127.0.0.1:2729:80 \
  vaultwarden/server:latest
  • 把宿主机 /opt/vaultwarden 挂进容器做持久化
  • 只监听 127.0.0.1:2729,不直接暴露给外网,后续由 Caddy 反代
  • -e ADMIN_TOKEN=“your-admin-token"是随机生成一个管理员密码,双引号内的内容可以直接改为字符串密码。
  • -e DOMAIN=https://pw.example.com 用于指定实际访问密码管理器的网址。
  • -e SIGNUPS_ALLOWED=true 允许用户注册(这个稍后需要关闭)

之后在caddy的caddyfile中设置反代密码管理器的网址:

pw.example.com {
    # 普通 Web 与 API
    reverse_proxy 127.0.0.1:2729

    # WebSocket 推送通知(可选)
    @websockets {
        header Connection *Upgrade*
        header Upgrade websocket
        path /notifications/hub
    }
    reverse_proxy @websockets 127.0.0.1:2729
}

浏览器访问 https://pw.example.com → 注册第一个账号。

注册完成后,把第 1 步容器的环境变量 SIGNUPS_ALLOWED 改成 false 再重启容器,防止他人随意注册:

docker stop vaultwarden
docker rm vaultwarden

重新创建容器,关闭注册功能:

docker run -d \
  --name vaultwarden \
  --restart unless-stopped \
  -e DOMAIN=https://pw.example.com \
  -e SIGNUPS_ALLOWED=false \
  -e ADMIN_TOKEN="your-admin-token" \
  -v /opt/vaultwarden:/data \
  -p 127.0.0.1:2729:80 \
  vaultwarden/server:latest