Quadlet 配置分享:Vaultwarden

本文属于「quadlet 配置分享」系列,直接贴配置,不讲 Quadlet 基础。入门见 Podman 教程

Vaultwarden

Vaultwarden 是 Bitwarden 的轻量 Rust 实现,资源占用极低,单容器即可运行。

配置

Vaultwarden 默认用 SQLite,个人使用足够;生产环境建议换 PostgreSQL。

方案一:SQLite(单容器)

个人用 SQLite 最简单,一个 .container 文件搞定:

[Container]
Image=docker.io/vaultwarden/server:latest
PublishPort=8080:80
Volume=/path/to/vw-data:/data
Environment=ADMIN_TOKEN=123
AutoUpdate=registry

[Service]
Restart=always

[Install]
WantedBy=default.target
  1. /path/to/ 替换为你自己的值。
  2. 8080 替换为你想暴露的端口
  3. 123 替换为一个复杂文本

方案二:PostgreSQL(Pod)

生产环境推荐 PostgreSQL。需要用 Pod 把 Vaultwarden 和数据库放在一起:

# vaultwarden.pod
[Pod]
PublishPort=8080:80
UserNS=keep-id

[Install]
WantedBy=default.target
# vaultwarden.container
[Unit]
Requires=vaultwarden-db.service
After=vaultwarden-db.service

[Container]
Image=docker.io/vaultwarden/server:latest
Pod=vaultwarden.pod
Volume=/path/to/vw-data:/data
Environment=DATABASE_URL=postgresql://vaultwarden:[email protected]:5432/vaultwarden ADMIN_TOKEN=123
AutoUpdate=registry
Group=0
User=0

[Service]
Restart=always

[Install]
WantedBy=default.target
# vaultwarden-db.container
[Container]
Image=docker.io/library/postgres:17-alpine
Pod=vaultwarden.pod
Volume=/path/to/vw-pgdata:/var/lib/postgresql/data
Environment=POSTGRES_USER=vaultwarden POSTGRES_PASSWORD=vaultwarden POSTGRES_DB=vaultwarden
AutoUpdate=registry

[Service]
Restart=always

[Install]
WantedBy=default.target
  1. /path/to/ 替换为你自己的值。
  2. 8080 替换为你想暴露的端口
  3. 123 替换为一个复杂文本

启动

  1. 保存上述文件到 ~/.config/containers/systemd/
  2. 运行 systemctl --user daemon-reload
  3. 启动容器
    • 单容器运行 systemctl --user start vaultwarden
    • Pod 运行 systemctl --user start vaultwarden-pod
  4. 【可选】启用自动更新:systemctl --user enable --now podman-auto-update.timer

反代

Pod 暴露 8080 端口,用 Caddy 或 Nginx 反代到域名即可。记得开启 HTTPS,Vaultwarden 的客户端强制要求 HTTPS。

Caddy 示例:

vw.example.com {
    reverse_proxy 127.0.0.1:8080
}

访问 vw.example.com/admin 输入设置的 ADMIN_TOKEN 登录管理页面。