4.使用 Podman
对应的官方页面地址
Podman 是替代 Docker 的无守护程序,它与大部分 Docker 容器兼容。
创建 Quadlet(适用于 Podman 4.4+)
从版本 4.4 开始,Podman 使用 quadlets,如果您使用以前的 generate systemd 方法,则会显示一个警告。
额外的好处是此方法将使容器保持更新。
通过环境文件配置
在环境文件中进行配置可能会更容易并且不易出错。
注意:此文件包含机密,请确保只有 root 拥有访问权限!
sudo install -o0 -g0 -m600 /dev/null /etc/vaultwarden.env
sudo vi /etc/vaultwarden.env# Contents of /etc/vaultwarden.env
ROCKET_PORT=8080
# DISABLE_ADMIN_TOKEN=true
# ADMIN_TOKEN=$argon2id$...
# LOG_LEVEL=debug创建 podman Quadlet
配置看起来像 systemd 的,但我们配置的是容器,而不是单元。请参阅所有 [Container] 指令的文档。
编辑 quadlet 后,运行 systemctl daemon-reload 以创建或更新 systemd 单元。您可以使用常规的 systemctl 命令控制此容器,例如 systemctl start vaultwarden.service 。
自动更新
自动更新可自动执行更新过程:
或者,您可以启用定时器,它会每天自动更新(默认情况。也可以编辑):
创建 systemd 服务文件(适用于老版本的 Podman)
由于 Podman 的无守护程序架构,它比 Docker 更容易在 systemd 中运行。它带有一个便捷的 generate syetemd 命令,该命令可以生成 systemd 文件。这一篇不错的文章详细介绍了它,还有这篇文章也详细介绍了一些最新的更新。
您可以提供 --files 标志告诉 podman 将 systemd 服务放到某个文件中,或使用 podman generate systemd --name vaultwarden > /etc/systemd/system/container-vaultwarden.service。这样,我们就可以像任何正常的服务文件一样启用和启动容器了。
每次重启时新建容器
如果我们希望每次服务启动时都创建一个新的容器,可以使用 podman generate systemd --new 命令生成一个重新创建容器的服务文件:
如果您使用的是旧版 Podman,则可以编辑服务文件以包含如下内容:
环境文件 vaultwarden.conf 可以包含您需要的容器的所有环境值,比如:
如果您希望此容器拥有特定的名称,则需要添加 ExecStartPre=/usr/bin/podman rm -i -f vaultwarden,如果进程未被正确清理的话。注意,此方式当前无法与具有 User= 选项的用户一起正常工作(见 https://github.com/containers/podman/issues/5572)。
故障排除
调试 systemd 服务文件
如果主机出现故障或容器崩溃,则 systemd 服务文件应自动停止现有容器并将其重新启动。可以通过 journalctl --user -u container-vaultwarden -t 100 来定位错误。
在大多数情况下,我们可以通过简单地增加服务文件中的 podman 命令的超时时间来解决我们看到的错误。
充分利用 Vaultwarden 和数据库的 quadlet 文件
应用程序和 PostgreSQL 数据库被容器化并放置在 pod 中。应用程序通过 Podman 网络功能使用自己的网络。持久卷用于数据库数据和 Vaultwarden 应用程序数据。部署容器使用的机密由 Podman 机密功能管理。
该基础设施使用以下 quadlet 文件定义:
vaultwarden-app.containervaultwarden-app.volumevaultwarden-db.containervaultwarden-db.volumevaultwarden.networkvaultwarden.pod
Pod 的定义
创建 ~/.config/containers/systemd/vaultwarden.pod 文件:
网络的定义
创建 ~/.config/containers/systemd/vaultwarden.network 文件:
持久卷的定义
创建 ~/.config/containers/systemd/vaultwarden-app.volume 文件:
以及 ~/.config/containers/systemd/vaultwarden-db.volume 文件:
容器的定义
创建 ~/.config/containers/systemd/vaultwarden-app.container 文件:
以及 ~/.config/containers/systemd/vaultwarden-db.container 文件:
配置
使用环境文件 /etc/vaultwarden/config 和 ~/vaultwarden/vaultwarden-db.env 完成配置。
在 ~/vaultwarden/vaultwarden-db.env 文件中设置变量 POSTGRES_USER 和 POSTGRES_DB 。
机密
您需要定义机密 postgres_password、database_url 和 admin_token:
我假设 POSTGRES_USER=vaultwarden 和 POSTGRES_DB=vaultwarden
部署
最后更新于