如何在 Ubuntu 22.04 上使用 Docker 安装 Vaultwarden
在此页
- 先决条件
- 第 1 步 - 配置防火墙
- 第 2 步 - 安装 Docker 和 Docker Compose
- 第 3 步 - 为 Vaultwarden 创建 Docker Compose 文件
- 第 4 步 - 其他 Vaultwarden 配置
- 禁用注册
- 禁用邀请
- 禁用密码提示
- 禁用管理面板
- 地窖守卫日志
Vaultwarden 是用 Rust 语言编写的 Bitwarden 服务器的非官方端口。它与官方 Bitwarden 客户端兼容,并且比 Bitwarden 资源占用更少。除了一些功能外,它几乎实现了 Bitwarden 的所有功能。它使用 Bitwarden API 提供组织支持、附件、身份验证器、U2F、Yubikey、Duo 支持和电子邮件别名服务支持等功能。
在本教程中,您将学习如何在 Ubuntu 22.04 服务器上设置 Vaultwarden 副本。
先决条件
-
A server running Ubuntu 22.04.
-
A non-root user with sudo privileges.
-
The uncomplicated Firewall(UFW) is enabled and running.
-
A Fully Qualified domain name (FQDN) pointing to the server like,
vaultwarden.example.com
. -
Everything is updated.
$ sudo apt update && sudo apt upgrade
第 1 步 - 配置防火墙
在安装任何包之前,第一步是配置防火墙以允许 HTTP 和 HTTPS 连接。
检查防火墙的状态。
$ sudo ufw status
您应该会看到如下内容。
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6)
允许 HTTP 和 HTTPs 端口。
$ sudo ufw allow http $ sudo ufw allow https
再次检查状态以确认。
$ sudo ufw status Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 80/tcp ALLOW Anywhere 443 ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) 80/tcp (v6) ALLOW Anywhere (v6) 443 (v6) ALLOW Anywhere (v6)
第 2 步 - 安装 Docker 和 Docker Compose
添加 Dockers 官方 GPG 密钥。
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker.gpg
运行以下命令以添加 Docker 存储库。
$ echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
更新系统以包含 Dockers 存储库。
$ sudo apt update
安装泊坞窗。
$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
本教程将使用 Docker Compose v2 插件而不是旧的遗留二进制文件。因此,运行它的命令从
docker-compose
更改为docker compose
,这反映在这里。Docker 以提升的权限运行,因此您需要经常使用
sudo
来运行命令。更好的选择是将您的 Linux 用户帐户添加到docker
用户组。$ sudo usermod -aG docker ${USER}
$ {USER}
变量获取当前登录的系统帐户。如果您未使用要授予权限的用户登录,请将$ {USER}
替换为用户名。要申请新的组成员资格,请退出服务器并重新登录,或使用以下命令。系统将提示您输入用户密码。
$ su - ${USER}
第 3 步 - 为 Vaultwarden 创建 Docker Compose 文件
为 Vaultwarden 创建一个新目录。
$ mkdir vaultwarden
切换到目录。
$ cd vaultwarden
创建 Docker 组合文件并打开它进行编辑。
$ nano docker-compose.yml
将以下代码粘贴到其中。将 DOMAIN 和 EMAIL 变量替换为适当的值。
version: '3' services: vaultwarden: image: vaultwarden/server:latest container_name: vaultwarden restart: always environment: WEBSOCKET_ENABLED: "true" # Enable WebSocket notifications. DOMAIN: "https://vaultwarden.example.com" SMTP_HOST: "<smtp.domain.tld>" SMTP_FROM: "<>" SMTP_PORT: "587" SMTP_SECURITY: "starttls" SMTP_USERNAME: "<username>" SMTP_PASSWORD: "<password>" volumes: - ./vw-data:/data caddy: image: caddy:2 container_name: caddy restart: always ports: - 80:80 # Needed for the ACME HTTP-01 challenge. - 443:443 volumes: - ./Caddyfile:/etc/caddy/Caddyfile:ro - ./caddy-config:/config - ./caddy-data:/data environment: DOMAIN: "https://vaultwarden.example.com" # Your domain. EMAIL: "" # The email address to use for ACME registration. LOG_FILE: "/data/access.log"
通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。
我们在单个 Docker 组合文件中设置 Vaultwarden 和 Caddy Web 服务器。让我们看一下文件中定义的所有选项。
- image是指Vaultwarden和Caddy的Docker镜像在Dockerhub上的位置。
- container_name 允许您将标签应用于 docker 容器,以便在 Docker 网络中引用容器时使用。
- restart 指定容器的重启策略。将它设置为 always 意味着容器如果退出,将自动重新启动。
- 环境部分设置 Vaultwarden 和 Caddy 所需的变量。如果你的服务的SMTP端口是587,设置变量
SMTP_SECURITY
的值为starttls
,如果你的服务的SMTP端口是465,将变量SMTP_SECURITY
的值设置为force_tls
。域变量是电子邮件验证工作所必需的。我们已启用 Web 套接字以使通知正常工作。 - volume 定义了服务器上存储持久数据的目录。服务器上的
/vw-data
目录映射到容器中的/data
目录,该目录存储 Vaultwarden 所需的所有数据。同理,将Caddy文件所在位置、Caddy配置、caddys数据映射到容器中的相应目录。 Docker 将自动在 Volume 部分下配置的服务器上创建相应的目录。 - 端口告诉容器向主机发布端口或一系列端口。
第 4 步 - 额外的 Vaultwarden 配置
禁用注册
如果您不想为用户注册打开 Vaultwarden 安装,您可以通过在 Docker 组合文件的
environment
部分下添加以下变量来禁用它。environment: WEBSOCKET_ENABLED: "true" # Enable WebSocket notifications. SIGNUPS_ALLOWED: "false" ....
禁用邀请
即使在禁用用户注册之后,属于组织的现有用户仍然可以邀请新用户。要停止它,请使用以下变量。
INVITATIONS_ALLOWED: "false"
禁用密码提示
Vaultwarden 通过电子邮件发送密码提示,并在密码提示页面上显示它们。要禁用该功能,请设置
SHOW_PASSWORD_HINT
变量的值。SHOW_PASSWORD_HINT: "false"
禁用管理面板
Vaultwarden 为其 Web 界面托管静态文件。您可以通过将以下变量设置为 false 来禁用此功能。
WEB_VAULT_ENABLED: "false"
您可以通过使用 Compose 文件中
volumes
部分下的配置提供要托管的静态文件来覆盖 Vault 文件。volumes: - ./vw-data:/data - /path/to/static/files_directory:/web-vault
秘藏守卫日志
Vaultwarden 仅记录到标准输出。您可以将其配置为记录到文件。
LOG_FILE: "/data/vaultwarden.log"
要减少日志消息的数量,您可以将日志级别设置为
warn
,同时将变量EXTENDED_LOGGING
设置为 true。LOG_LEVEL: "warn" EXTENDED_LOGGING: "true"
第 5 步 - 为 Vaultwarden 创建 Caddy 文件
现在我们已经配置了 Vaultwarden,让我们为 Vaultwarden 创建一个 caddy 文件并打开它进行编辑。
$ nano Caddyfile
将以下代码粘贴到其中。
{$DOMAIN}:443 { log { level INFO output file {$LOG_FILE} { roll_size 10MB roll_keep 10 } } # Use the ACME HTTP-01 challenge to get a cert for the configured domain. tls {$EMAIL} # This setting may have compatibility issues with some browsers # (e.g., attachment downloading on Firefox). Try disabling this # if you encounter issues. encode gzip # The file size is set to 500MB to support the Vaultwarden (Bitwarden) Send feature. request_body { max_size 500MB } header { # Enable cross-site filter (XSS) and tell browser to block detected attacks X-XSS-Protection "1; mode=block" # Disallow the site to be rendered within a frame (clickjacking protection) X-Frame-Options "DENY" # Prevent search engines from indexing (optional) X-Robots-Tag "none" # Server name removing -Server } # Notifications redirected to the WebSocket server reverse_proxy /notifications/hub vaultwarden:3012 # Proxy everything else to Rocket reverse_proxy vaultwarden:80 { # Send the true remote IP to Rocket, so that vaultwarden can put this in the # log, so that fail2ban can ban the correct IP. header_up X-Real-IP {remote_host} } }
通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。
第 6 步 - 运行 Vaultwarden
启动 Vaultwarden Docker 容器。
$ docker compose up -d
您可以使用以下命令检查容器的状态。
$ docker ps
您将获得类似的输出。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4ad23954f1d5 caddy:2 "caddy run --config …" About a minute ago Up About a minute 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp, 2019/tcp caddy d55a037850bc vaultwarden/server:latest "/usr/bin/dumb-init …" About a minute ago Up About a minute (healthy) 80/tcp, 3012/tcp vaultwarden
第 7 步 - 将 Vaultwarden 与 Bitwarden 客户端一起使用
在浏览器中打开 URL
https://vaultwarden.example.com
。第一步是创建一个帐户。单击创建帐户按钮继续。
输入您的帐户详细信息,然后单击提交按钮继续。您将被重定向到登录页面。输入您的帐户详细信息以登录。
您需要通过验证电子邮件来解锁帐户的全部功能。单击发送电子邮件按钮发送验证邮件。
您将收到以下邮件。单击链接以验证您的电子邮件地址。
现在我们已经准备好 Vaultwarden 帐户,是时候将它用于 Bitwarden 客户端了。对于我们的教程,我们使用的是 Chrome 扩展程序。通过从 Bitwardens 网站获取它来安装它。
单击扩展图标以显示 Vaultwarden 登录屏幕。
单击弹出窗口左上角的齿轮图标以打开高级设置页面。填写
https://vaultwarden.example.com
作为服务器 URL。单击保存按钮应用设置。使用您的 Vaultwarden 凭据登录以登录应用程序。
登录后,您将进入应用程序页面并可以开始使用 Bitwarden。
第 8 步 - 备份 Vaultwarden
Vaultwarden 将其数据存储在 SQLite 数据库中。一种方法是简单地从
/vw-data
文件夹中复制.sqlite3
文件。但这不是推荐的解决方案,因为由于 Vaultwarden 运行,数据库不会处于一致状态。为了以可靠的方式备份,我们将使用 SQLite 备份命令。安装
sqlite3
包。$ sudo apt install sqlite3
为备份创建一个目录。
$ mkdir ~/vw-backups
删除组和其他用户的读、写和执行权限。
$ chmod go-rwx ~/vw-backups
创建 Vaultwarden 备份服务文件并打开它进行编辑。
$ sudo nano /etc/systemd/system/vaultwarden-backup.service
将以下代码粘贴到其中。
[Unit] Description=backup the vaultwarden sqlite database [Service] Type=oneshot WorkingDirectory=/home/<username>/vw-backups ExecStart=/usr/bin/env bash -c 'sqlite3 /home/<username>/vaultwarden/vw-data/db.sqlite3 ".backup backup-$(date -Is | tr : _).sqlite3"' ExecStart=/usr/bin/find . -type f -mtime +30 -name 'backup*' -delete
通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。
启动服务以测试服务并进行备份。
$ sudo systemctl start vaultwarden-backup.service
检查备份文件是否存在。
$ ls -l ~/vw-backups
您应该看到备份文件的列表。
total 192 -rw-r--r-- 1 root root 196608 Jul 31 17:25 backup-2022-07-31T17_25_04+00_00.sqlite3
要为备份创建定期计划,请创建并打开 systemd 计时器单元文件。您需要确保文件名与服务的文件名匹配。
$ sudo nano /etc/systemd/system/vaultwarden-backup.timer
将以下代码粘贴到其中。
[Unit] Description=schedule vaultwarden backups [Timer] OnCalendar=04:00 Persistent=true [Install] WantedBy=multi-user.target
通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。这将安排备份在每天凌晨 4 点进行。
启动并启用计时器单元服务。
$ sudo systemctl enable vaultwarden-backup.timer $ sudo systemctl start vaultwarden-backup.timer
检查定时器服务的状态。
$ systemctl status vaultwarden-backup.timer ? vaultwarden-backup.timer - schedule vaultwarden backups Loaded: loaded (/etc/systemd/system/vaultwarden-backup.timer; enabled; vendor preset: enabled) Active: active (waiting) since Sun 2022-07-31 17:27:03 UTC; 7s ago Trigger: Mon 2022-08-01 04:00:00 UTC; 10h left Triggers: ? vaultwarden-backup.service Jul 31 17:27:03 vaultwarden systemd[1]: Started schedule vaultwarden backups.
这只是备份数据。您应该确保定期将数据库文件备份到异地或本地系统。要备份剩余的内容,您可以通过复制
~/vaultwarden/vw-data
文件夹下的所有内容来实现。在剩下的东西中,attachments
目录、config.json
文件和rsa_key*
文件必须备份。sends
和icon_cache
目录是可选的,如果它们足够大并且您需要它们,则应进行备份。它们是严格可选的。第 9 步 - 恢复 Vaultwarden
要恢复 Vaultwarden 数据,请确保容器已停止。您可以用其备份版本替换数据目录下的所有内容。恢复 SQLite 备份时,请确保删除现有的
db.sqlite3-wal
文件以避免损坏。第 10 步 - 更新 Vaultwarden
升级 Vaultwarden 是一个简单的步骤。切换到 Vaultwardens Docker 组合目录。
$ cd ~/vaultwarden
接下来,停止并移除现有容器。不过,您的数据将被保留。
$ docker compose down --remove-orphans
拉取最新版本的 Gitlab docker 镜像。
$ docker compose pull
再次启动容器。
$ docker compose up -d
您的 Vaultwarden 安装已更新并重新启动。
结论
我们关于在 Ubuntu 22.04 服务器上安装和配置 Vaultwarden 的教程到此结束。如果您有任何问题,请在下面的评论中发表。