1.系统要求
Vaultwarden 使用 Rust 编写,支持 SQLite、MySQL 和 PostgreSQL 数据库后端,运行时只需要 10M 内存,可以说对硬件基本没有要求。
2.预设环境
- 假设使用域名
vault.ekhysis.com访问 Vaultwarden 实例 - Vaultwarden 容器的 80 端口暴露到宿主机的 3280 端口上,注意防火墙开放端口
- 使用 acme.sh 由 Let’s Encrypt 生成并自动更新的免费证书
- 在 Nginx 上设置反向代理为 Vaultwarden 开启 https
3.设置 http 跳转到 https、设置反向代理
server {
listen 80;
# listen [::]:80;
server_name vault.ekhysis.com;
index index.html index.htm index.php default.html default.htm default.php;
root /usr/share/nginx/html;
return 301 https://$server_name$request_uri; #设置 http 跳转到 https
# include rewrite/none.conf;
# error_page 404 /404.html;
# Deny access to PHP files in specific directory
# location ~ /(wp-content|uploads|wp-includes|images)/.*\.php$ { deny all; }
# include enable-php.conf;
access_log off;
}
server {
listen 443 ssl http2;
# listen [::]:443 ssl http2;
server_name vault.ekhysis.com;
"/etc/nginx/sites-available/vault.ekhysis.com" 91L, 2754C 8,2 Topserver {
listen 80;
# listen [::]:80;
server_name vault.ekhysis.com;
index index.html index.htm index.php default.html default.htm default.php;
root /usr/share/nginx/html;
return 301 https://$server_name$request_uri; #设置 http 跳转到 https
# include rewrite/none.conf;
# error_page 404 /404.html;
# Deny access to PHP files in specific directory
# location ~ /(wp-content|uploads|wp-includes|images)/.*\.php$ { deny all; }
# include enable-php.conf;
access_log off;
}
server {
listen 443 ssl http2;
# listen [::]:443 ssl http2;
server_name vault.ekhysis.com;
index index.html index.htm index.php default.html default.htm default.php;
root /usr/share/nginx/html;
ssl_certificate /root/cert/vault.ekhysis.com.cer;
ssl_certificate_key /root/cert/vault.ekhysis.com.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers "TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
ssl_session_cache builtin:1000 shared:SSL:10m;
# openssl dhparam -out /usr/local/nginx/conf/ssl/dhparam.pem 2048
# ssl_dhparam /usr/local/nginx/conf/ssl/dhparam.pem;
# include rewrite/none.conf;
# error_page 404 /404.html;
# Deny access to PHP files in specific directory
# location ~ /(wp-content|uploads|wp-includes|images)/.*\.php$ { deny all; }
# include enable-php.conf;
# ==设置反向代理开始== #
client_max_body_size 128M; #允许大型附件
location / {
proxy_pass http://127.0.0.1:3280;
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 timeouts
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
location /notifications/hub {
proxy_pass http://127.0.0.1:3012;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location /notifications/hub/negotiate {
proxy_pass http://127.0.0.1:3280;
}
location /admin {
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://127.0.0.1:3280;
}
# ==设置反向代理结束== #
location ~ /.well-known {
allow all;
}
location ~ /\. {
deny all;
}
access_log off;
}
4.部署 Vaultwarden
docker run -d --name vaultwarden \ -e ADMIN_TOKEN=some_random_token \ -v ./vaultwarden-data/:/data/ \ --restart unless-stopped \ -p 3280:80 \ vaultwarden/server:latest
-d:指定容器运行于前台或者后台(默认为false表示运行于后台)--restart always:自动启动(在宿主机重启后或者 Docker 服务重启后)--name vaultwarden:指定容器名称为vaultwarden-e ADMIN_TOKEN=some_random_token:设置 ADMIN_TOKEN 环境变量以启用管理页面,some_random_token可以用openssl rand -base64 48命令来生成一个长 token 来保护 admin 页面,开启 admin 页面后会在DATA_FOLDER目录下生成一个config.json文件,如果后期需要关闭 admin 页面,需要同时删除环境变量和config.json文件中的admin_token参数-v ./vaultwarden-data/:/data/:挂载容器的data目录到宿主机的 /root/vaultwarden-data目录上-p 3280:80:指定容器的80端口暴露在宿主机的3280端口上
4.1vaultwarden 常用环境变量
通过设置环境变量或在 admin 管理页面(会将设置写入 data 目录下的 config.json 文件)来配置 vaultwarden。注意,config.json 中的设置会覆盖相应的环境变量设置,因此推荐两种方式二选一。完整的环境变量参数可以参考 .env.example,通过 docker run --env-file <env-file> 或者 docker run -v /path/to/.env:/.env 来使用自定义环境变量,下面是一些我使用到的参数,仅供参考:
SIGNUPS_ALLOWED=false:禁止注册新用户INVITATIONS_ALLOWED=false:禁止邀请用户,即使设置了禁止注册/邀请用户,在 admin 页面仍然可以邀请用户ADMIN_TOKEN=some_long_long_random_token:开启 admin 管理页面,推荐使用openssl rand -base64 48命令来生成一个长 token 来保护 admin 页面,开启 admin 页面后会在DATA_FOLDER目录下生成一个config.json文件,如果后期需要关闭 admin 页面,需要同时删除环境变量和config.json文件中的admin_token参数LOG_FILE=/data/vaultwarden.log:输出日志,默认使用 stdout 输出日志,可以通过设置该参数输出到文件SHOW_PASSWORD_HINT=false:关闭密码提示
5.常见故障解决
5.1直接修改 config.json 文件不生效
通过管理页面修改配置并保存后,会将配置参数写入 config.json 文件,但当通过直接编辑 config.json 文件配置参数后,管理页面无法读取修改后的配置参数。
原因为只有在 Vaultwarden 容器启动时才会读取 config.json 文件。修改 config.json 文件后要使功能生效,需要在修改 config.json 文件后重启 Vaultwarden 容器:
docker restart vaultwarden
5.2日志记录项的时间和系统时间不一致
日志记录使用 UTC(全球标准时间),而中国使用时间为 UTC+8,比 UTC 推后 8小时。
在创建 Vaultwarden 容器时加上时区环境变量:复制
-e TZ=Asia/Shanghai
0