什么是Vaultwarden
Vaultwarden是一个用Rust编写的Bitwarden服务器API的替代实现,兼容上游Bitwarden客户端,适合配置较低的机器自托管部署。
准备工作
- 一个域名
- 一台用于搭建Vaultwarden的主机,本文仅演示macOS系统,但配置HTTPS的内容是通用的。
安装Docker
我使用OrbStack管理Docker容器,因此使用homebrew安装:
brew install --cask orbstack
在启动台中找到软件并启动,进行初始化设置。
安装Vaultwarden
新建~/vaultwarden
目录,用于存放compose.yml
以及Vaultwarden产生的数据。
mkdir -p ~/vaultwarden && cd ~/vaultwarden
随后创建compose.yml
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: always
environment:
DOMAIN: "https://[your-domain]:8443/"
SIGNUPS_ALLOWED: "true"
volumes:
- ./data:/data
ports:
- 11001:80
注意替换[your-domain]
的内容,11001
端口也可以替换为其他端口。(这里我添加了:8443是因为后文Nginx监听了8443端口)
随后拉取Docker镜像并启动容器:
docker compose pull
docker compose up -d
开启HTTPS
我的解决方案参考了Vautlwarden官方的这篇文章:Running a private vaultwarden instance with Let’s Encrypt certs,其中也解释了不适用私有证书的原因。
我使用域名解析服务商将vaultwarden要使用的域名解析到服务器的内网ip,例如将vw.example.com
解析到192.168.1.2
。再使用acme.sh
通过DNS验证申请SSL证书,在服务器使用Nginx
进行反向代理。
使用acme.sh
申请证书可以参考这篇文章
。
Nginx的安装与基础配置我便不过多赘述,反向代理配置我参考了Vaultwarden官方给出的例子:
upstream vaultwarden {
zone vaultwarden 128k;
server 127.0.0.1:11001;
keepalive 2;
}
map $http_upgrade $connection_upgrade {
default upgrade;
'' "";
}
server {
listen 8000;
server_name [your-domain];
if ($host = [your-domain]) {
return 301 https://$host:8443$request_uri;
}
return 404;
}
server {
listen 8443 ssl;
http2 on;
server_name [your-domain];
ssl_certificate [your-cert-path];
ssl_certificate_key [your-key-path];
client_max_body_size 525M;
location / {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://vaultwarden;
}
}
PS:这里我并没有监听常规
80
与443
端口,而是选择8000
和8443
端口。
注意替换[your-domain]
以及[your-cert-path]
和[your-key-path]
,若此前修改了Vaultwarden的外部端口,此处也应一并修改。
一般情况下,重启Nginx后访问[your-domain]:8000
即可看到HTTPS
已经成功启用了。