1. 项目概述
Vaultwarden(原Bitwarden_rs)是一个轻量级的Bitwarden兼容服务器实现,它完美复刻了Bitwarden官方服务器的所有核心功能,但资源占用更低,特别适合个人或小团队在本地环境部署。与官方版本相比,Vaultwarden对硬件要求更低,甚至可以在树莓派这样的设备上流畅运行。
我在实际部署过程中发现,最大的技术难点在于如何在局域网内实现HTTPS安全访问。大多数教程都假设用户有公网域名和正规SSL证书,但这对纯内网使用场景并不友好。本文将分享一套完整的解决方案,使用Docker-compose一键部署,并通过自签名证书解决内网HTTPS问题,确保密码传输的绝对安全。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与工具选型
2.1 硬件与系统要求
Vaultwarden对硬件要求极低,以下是经过实测的推荐配置:
- CPU:1核以上(树莓派4B即可胜任)
- 内存:512MB以上(实际运行占用约100MB)
- 存储:至少1GB空间(用于数据库和附件存储)
操作系统方面,推荐使用以下任一发行版:
- Ubuntu Server 20.04/22.04 LTS
- Debian 10/11
- CentOS 7/8(需额外配置防火墙)
注意:如果使用ARM架构设备(如树莓派),需要确认Docker官方支持该架构。我在树莓派4B上测试通过,性能完全满足需求。
2.2 必备软件安装
部署前需要确保系统已安装以下组件:
- Docker Engine(版本20.10.0+)
bash复制# Ubuntu/Debian安装示例
sudo apt-get update
sudo apt-get install docker.io
sudo systemctl enable --now docker
- Docker-compose(版本1.29.0+)
bash复制# 官方推荐安装方式
sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
- OpenSSL(用于生成自签名证书)
bash复制sudo apt-get install openssl
3. Docker-compose部署配置
3.1 目录结构规划
合理的目录结构能避免后续管理混乱,建议按以下方式组织:
code复制~/vaultwarden/
├── docker-compose.yml # 主配置文件
├── data/ # 数据库和附件存储
├── ssl/ # SSL证书存放目录
└── config/ # 环境变量配置文件
3.2 编写docker-compose.yml
以下是经过优化的一键部署配置,已包含HTTPS支持:
yaml复制version: '3'
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: unless-stopped
volumes:
- ./data:/data
- ./ssl:/ssl
environment:
- WEBSOCKET_ENABLED=true
- SIGNUPS_ALLOWED=false
- INVITATIONS_ALLOWED=true
- ADMIN_TOKEN=your_secure_admin_token_here
ports:
- "443:443"
- "3012:3012" # WebSocket端口
关键参数说明:
WEBSOCKET_ENABLED:启用实时同步功能SIGNUPS_ALLOWED:建议生产环境设为false,手动控制用户注册ADMIN_TOKEN:用于访问/admin管理界面,务必修改为强密码
3.3 生成自签名SSL证书
内网HTTPS访问的核心是创建可信证书,执行以下命令:
bash复制mkdir -p ~/vaultwarden/ssl && cd ~/vaultwarden/ssl
# 生成CA私钥和根证书
openssl genrsa -out ca.key 2048
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt -subj "/CN=Vaultwarden CA"
# 生成服务器证书
openssl genrsa -out server.key 2048
openssl req -new -key server.key -out server.csr -subj "/CN=your.internal.ip.or.hostname"
openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt
实操技巧:将ca.crt导入到所有客户端的信任证书库,可避免浏览器安全警告。Windows双击证书选择"安装证书",macOS使用钥匙串访问工具导入。
4. HTTPS配置与优化
4.1 Nginx反向代理配置
虽然Vaultwarden自带Web服务器,但通过Nginx可以获得更好的性能和安全性。创建~/vaultwarden/nginx.conf:
nginx复制server {
listen 443 ssl http2;
server_name your.internal.ip;
ssl_certificate /ssl/server.crt;
ssl_certificate_key /ssl/server.key;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m;
location / {
proxy_pass http://vaultwarden:80;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /notifications/hub {
proxy_pass http://vaultwarden:3012;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
更新docker-compose.yml,添加Nginx服务:
yaml复制services:
nginx:
image: nginx:alpine
ports:
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf
- ./ssl:/ssl
depends_on:
- vaultwarden
4.2 客户端配置要点
各平台客户端需要特殊配置才能连接自签名证书的服务器:
-
浏览器扩展:
- 安装后点击设置 → 服务器URL填写
https://your.server.ip - 首次连接时会提示证书风险,选择"高级"→"继续前往"
- 安装后点击设置 → 服务器URL填写
-
移动端APP:
- 在登录页面点击"自托管环境"
- 服务器URL填写上述地址
- 进入设置→安全→信任自签名证书
-
桌面客户端:
- 启动时添加
--accept-self-signed-certs参数 - 或提前将ca.crt导入系统证书库
- 启动时添加
5. 日常维护与问题排查
5.1 数据备份策略
密码数据无价,建议设置自动化备份:
bash复制# 简单备份脚本示例
#!/bin/bash
BACKUP_DIR="/path/to/backups"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
docker stop vaultwarden
tar -czf $BACKUP_DIR/vaultwarden_$TIMESTAMP.tar.gz ~/vaultwarden/data
docker start vaultwarden
# 保留最近7天备份
find $BACKUP_DIR -type f -name 'vaultwarden_*.tar.gz' -mtime +7 -delete
设置cron定时任务:
bash复制0 3 * * * /path/to/backup_script.sh
5.2 常见问题解决方案
问题1:WebSocket连接失败导致实时同步失效
- 检查防火墙是否放行3012端口
- 确认客户端和服务器时间同步(时差超过5分钟会导致失败)
问题2:移动端无法连接
- 确保URL以https://开头
- 尝试关闭WiFi使用蜂窝数据测试,排查本地DNS问题
问题3:浏览器提示"不安全连接"
- 确认已正确安装CA证书
- 清除浏览器缓存后重试
- 检查证书CN是否与访问地址完全匹配
6. 安全加固建议
6.1 网络层防护
- 修改默认端口:
yaml复制# docker-compose.yml
ports:
- "8443:443" # 外部访问端口改为非标准
- 配置防火墙规则:
bash复制# 只允许内网IP段访问
sudo ufw allow from 192.168.1.0/24 to any port 443
sudo ufw enable
6.2 应用层防护
-
启用两步验证:
- 管理员登录Web界面 → 设置 → 两步登录
- 推荐使用Authenticator应用而非邮件/SMS
-
定期轮换密钥:
bash复制# 重置管理员令牌
docker exec -it vaultwarden bash
export ADMIN_TOKEN=$(openssl rand -base64 48)
echo "New ADMIN_TOKEN: $ADMIN_TOKEN"
- 禁用不必要功能:
yaml复制environment:
- SMTP_ENABLED=false # 无邮件服务器时禁用
- SHOW_PASSWORD_HINT=false
我在实际维护中发现,定期检查日志能提前发现异常:
bash复制docker logs --tail 50 vaultwarden
典型的安全日志特征包括:
- 大量401错误请求
- 来自异常地理位置的登录尝试
- 同一IP短时间内多次注册请求
