# Docker宝库：Vaultwarden密码管理器



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

运行docker命令：
```bash
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中设置反代密码管理器的网址：
```yaml
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`** 再重启容器，防止他人随意注册：
```bash
docker stop vaultwarden
docker rm vaultwarden
```
重新创建容器，关闭注册功能：
```bash
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
```





<!-- 自用
首次安装：
```bash
docker run -d \
  --name vaultwarden \
  --restart unless-stopped \
  -e DOMAIN=https://pw.hotine.wang \
  -e SIGNUPS_ALLOWED=true \
  -e ADMIN_TOKEN="HotinePasswardSaver2025" \
  -v /opt/vaultwarden:/data \
  -p 127.0.0.1:2729:80 \
  vaultwarden/server:latest
```
caddy反代：
```yaml
pw.hotine.wang {
    # 普通 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
}
```
关闭用户注册：
```bash
docker run -d \
  --name vaultwarden \
  --restart unless-stopped \
  -e DOMAIN=https://pw.hotine.wang \
  -e SIGNUPS_ALLOWED=false \
  -e ADMIN_TOKEN="HotinePasswardSaver2025" \
  -v /opt/vaultwarden:/data \
  -p 127.0.0.1:2729:80 \
  vaultwarden/server:latest
```
-->

