Vaultwarden 完全指南:自建 Bitwarden 密碼管理器(2026版)
在數字化時代,密碼安全變得前所未有的重要。據統計,平均每人擁有 100+ 個在線賬戶,而 65% 的人會在多個網站重複使用相同密碼。Vaultwarden 是一款完全免費、開源的密碼管理器,它是 Bitwarden 的輕量級 Rust 實現,讓您可以在自己的服務器上搭建私有的密碼管理平臺。本指南將帶您從零開始,通過 Docker 部署 Vaultwarden,打造安全、私密、完全可控的密碼管理解決方案。
目錄
1. 什麼是 Vaultwarden?
1.1 Vaultwarden 簡介
Vaultwarden(原名 bitwarden_rs)是 Bitwarden 密碼管理器的非官方開源服務器實現,使用 Rust 語言編寫。它完全兼容官方的 Bitwarden 客戶端,包括瀏覽器擴展、桌面應用和移動端 App,但資源佔用更低,更適合個人和小型團隊自託管。
核心特點:
- 🆓 完全免費:無任何付費功能或訂閱
- 🔓 開源透明:代碼完全公開,可審計
- ⚡ 輕量高效:Rust 編寫,資源佔用極低
- 🔒 端到端加密:AES-256-CBC + HMAC-SHA256
- 📱 全平臺支持:兼容所有官方客戶端
- 🏠 自託管:數據完全掌控在自己手中
- 🔄 持續更新:活躍的社區維護
- 💾 低資源需求:可在樹莓派上運行
1.2 發展歷程
| 時間 | 事件 |
|---|---|
| 2018.06 | bitwarden_rs 項目啟動 |
| 2019.03 | 首個穩定版本發佈 |
| 2020.08 | 用戶突破 10,000 |
| 2021.05 | 重命名為 Vaultwarden |
| 2022.01 | GitHub Stars 突破 10,000 |
| 2023.06 | 支持 WebSocket 實時同步 |
| 2024.03 | 用戶突破 100,000 |
| 2025.01 | 全面支持 Bitwarden 3.0 API |
| 2026.01 | 持續活躍開發,社區壯大 |
1.3 Vaultwarden vs Bitwarden 官方
| 特性 | Vaultwarden | Bitwarden 官方 |
|---|---|---|
| 價格 | 🆓 完全免費 | 💰 部分功能付費 |
| 開源 | ✅ 完全開源 | ✅ 服務端閉源 |
| 資源佔用 | ⭐ 極低(~50MB RAM) | ⭐⭐⭐ 較高(~500MB) |
| 硬件要求 | 樹莓派即可 | 需要較強服務器 |
| 功能完整性 | ✅ 95%+ 功能 | ✅ 100% 功能 |
| 官方支持 | ❌ 社區支持 | ✅ 官方支持 |
| 企業功能 | ⚠️ 部分支持 | ✅ 完整支持 |
| 更新頻率 | 快速跟進 | 穩定發佈 |
| 自定義性 | ⭐⭐⭐⭐⭐ | ⭐⭐ |
| 適合場景 | 個人/小團隊 | 企業/大型組織 |
選擇建議:
- 🎯 個人用戶/家庭 → Vaultwarden
- 👥 小型團隊(<50人) → Vaultwarden
- 🏢 中大型企業 → Bitwarden 官方
- 🔧 喜歡折騰和技術控制 → Vaultwarden
- 💼 需要官方 SLA 支持 → Bitwarden 官方
1.4 與其他密碼管理器對比
| 特性 | Vaultwarden | 1Password | LastPass | KeePass | Bitwarden 雲 |
|---|---|---|---|---|---|
| 價格 | 🆓 免費 | $3-8/月 | $3-4/月 | 🆓 免費 | $0-10/月 |
| 自託管 | ✅ 支持 | ❌ 不支持 | ❌ 不支持 | ✅ 本地 | ❌ 雲端 |
| 開源 | ✅ 完全 | ❌ 閉源 | ❌ 閉源 | ✅ 完全 | ⚠️ 部分 |
| 跨平臺 | ✅ 完整 | ✅ 完整 | ✅ 完整 | ⚠️ 有限 | ✅ 完整 |
| 自動填充 | ✅ 支持 | ✅ 優秀 | ✅ 支持 | ⚠️ 插件 | ✅ 支持 |
| 2FA | ✅ 支持 | ✅ 支持 | ✅ 支持 | ⚠️ 插件 | ✅ 支持 |
| 密碼共享 | ✅ 支持 | ✅ 支持 | ✅ 支持 | ❌ 困難 | ✅ 支持 |
| 數據主權 | ⭐⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
| 易用性 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
2. 為什麼需要密碼管理器?
2.1 密碼安全現狀
嚴峻的現實:
📊 統計數據(2026):
- 平均每人擁有 150+ 在線賬戶
- 65% 的人在多個網站重複使用密碼
- 81% 的數據洩露由弱密碼導致
- 平均每 39 秒發生一次黑客攻擊
- 密碼破解成本:< $100(GPU 集群)常見密碼問題:
❌ 弱密碼:
123456
password
qwerty
admin123
生日/姓名❌ 密碼重用:
同一密碼用於:
- 郵箱
- 銀行
- 社交媒體
- 購物網站
風險:一處洩露,全部遭殃❌ 不安全存儲:
❌ 寫在紙上
❌ 存在文本文件
❌ 瀏覽器保存(未加密)
❌ Excel 表格
❌ 手機備忘錄2.2 密碼管理器的優勢
優勢一:生成強密碼
密碼強度對比:
弱密碼:
password123
破解時間:< 1 秒
中等密碼:
MyDog2024!
破解時間:約 1 小時
強密碼(密碼管理器生成):
xK9#mP2$vL5@nQ8&wR3!
破解時間:數百年密碼管理器生成:
✅ 隨機性強
✅ 長度可調(12-64 位)
✅ 包含大小寫、數字、符號
✅ 每個網站唯一
✅ 無需記憶優勢二:安全存儲
加密機制:
Vaultwarden 使用:
- AES-256-CBC 加密數據
- HMAC-SHA256 驗證完整性
- PBKDF2 密鑰派生(100,000 次迭代)
- 零知識架構(服務器無法解密)
即使服務器被黑:
❌ 黑客無法獲取明文密碼
❌ 只有加密後的數據
❌ 需要主密碼才能解密本地 vs 雲端:
雲端密碼管理器:
⚠️ 數據在第三方服務器
⚠️ 可能被政府調取
⚠️ 服務可能停止
⚠️ 隱私政策可能變更
自託管(Vaultwarden):
✅ 數據在自己服務器
✅ 完全控制
✅ 不受第三方影響
✅ 隱私有保障優勢三:便捷使用
自動填充:
瀏覽器擴展自動識別登錄表單
一鍵填充用戶名和密碼
無需手動輸入
節省時間多設備同步:
手機、電腦、平板
實時同步
離線可用
無縫切換密碼分享:
安全分享給家人/同事
可設置權限
隨時撤銷訪問
審計日誌追蹤優勢四:額外功能
兩步驗證(2FA):
存儲 TOTP 種子
自動生成驗證碼
比短信更安全
支持多種 2FA 類型安全審計:
檢測弱密碼
發現重複密碼
檢查已洩露密碼
安全評分和建議筆記和安全記錄:
存儲敏感信息:
- 信用卡號
- 護照信息
- 軟件許可證
- WiFi 密碼
- 保險箱組合2.3 實際案例
案例 1:LastPass 數據洩露(2022)
事件:
- LastPass 遭受攻擊
- 用戶 vault 數據被盜
- 雖然加密,但存在風險
後果:
- 用戶信任度下降
- 大量用戶遷移
- 品牌聲譽受損
教訓:
⚠️ 不要完全依賴第三方
⚠️ 自託管更可控案例 2:密碼重用導致的連鎖反應
場景:
用戶在論壇使用簡單密碼
論壇數據庫洩露
黑客嘗試相同密碼登錄:
- 郵箱 ✓ 成功
- 銀行 ✓ 成功
- 支付寶 ✓ 成功
損失:
💰 資金被盜
📧 郵箱被控
🔐 身份盜用如果使用密碼管理器:
✅ 每個網站不同密碼
✅ 強密碼難以破解
✅ 即使一處洩露,其他安全
✅ 快速檢測和響應3. 系統要求與準備
3.1 硬件要求
最低配置(適合個人使用)
CPU: ARM Cortex-A53 1GHz(樹莓派)或 x86 單核
RAM: 512MB
存儲: 2GB(系統)+ 數據庫空間
網絡: 穩定的互聯網連接
適用場景:
- 1-5 個用戶
- < 500 個密碼條目
- 輕度使用推薦設備:
✅ Raspberry Pi Zero 2 W
✅ Raspberry Pi 3/4
✅ 舊筆記本/臺式機
✅ VPS(1核 512MB)推薦配置(家庭/小團隊)
CPU: 雙核 2GHz+
RAM: 2GB
存儲: 10GB SSD
網絡: 穩定的寬帶連接
適用場景:
- 5-20 個用戶
- 500-5000 個密碼條目
- 正常使用推薦設備:
✅ Raspberry Pi 4 (4GB)
✅ Intel NUC
✅ 二手迷你主機
✅ VPS(2核 2GB)高性能配置(企業使用)
CPU: 四核+ 3GHz+
RAM: 4-8GB
存儲: NVMe SSD
網絡: Gigabit Ethernet
適用場景:
- 20+ 用戶
- 5000+ 密碼條目
- 高併發訪問3.2 存儲需求計算
數據庫大小估算:
每個密碼條目:~1-2 KB
每個用戶基礎數據:~10 KB
附件:按實際大小
示例:
10 用戶 × 100 密碼 = 10 MB
10 用戶 × 500 密碼 = 50 MB
50 用戶 × 1000 密碼 = 500 MB
建議:
預留 10× 空間用於增長
定期清理不需要的數據備份空間:
保留 3-5 個備份版本
每個備份 ≈ 數據庫大小
總備份空間 = 數據庫 × 53.3 軟件要求
必需軟件:
# Docker 和 Docker Compose
docker --version # 需要 20.10+
docker compose version # 需要 2.0+
# 文本編輯器
nano / vim / VS Code
# SSH 客戶端(遠程管理)
ssh / PuTTY
# 瀏覽器
Chrome / Firefox / Edge可選軟件:
# 反向代理
Nginx / Caddy
# SSL 證書
Certbot(Let's Encrypt)
# 監控
Prometheus + Grafana
# 備份工具
rclone(雲存儲同步)3.4 網絡規劃
域名準備
為什麼需要域名:
✅ 便於記憶和訪問
✅ SSL 證書必需
✅ 專業形象
✅ IP 變更不影響域名選擇:
推薦註冊商:
- Namecheap(便宜)
- Cloudflare Registrar(成本價)
- Porkbun(界面友好)
子域名示例:
vault.yourdomain.com
passwords.yourdomain.com
bitwarden.yourdomain.com成本:
.com 域名:$10-15/年
.xyz/.top 域名:$1-5/年
免費域名:duckdns.org(動態 DNS)端口需求
必需端口:
TCP 80 - HTTP(重定向到 HTTPS)
TCP 443 - HTTPS(主要訪問)
可選端口:
TCP 3012 - WebSocket(實時同步)
TCP 8080 - 管理界面(如啟用)防火牆設置:
# Ubuntu (UFW)
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
# CentOS (firewalld)
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload3.5 安全考慮
HTTPS 必要性
為什麼必須 HTTPS:
❌ HTTP 明文傳輸
- 密碼可被竊聽
- 中間人攻擊
- 數據篡改
✅ HTTPS 加密傳輸
- 端到端加密
- 防止竊聽
- 身份驗證
- 數據完整性SSL 證書選項:
🆓 Let's Encrypt(推薦)
- 完全免費
- 自動續期
- 廣泛信任
- 90 天有效期
💰 商業證書
- 1-5 年有效期
- 額外保障
- 適合企業
⚠️ 自簽名證書
- 免費
- 瀏覽器警告
- 僅測試使用訪問控制
基本安全措施:
# 1. 禁用公開註冊
SIGNUPS_ALLOWED=false
# 2. 啟用管理員令牌
ADMIN_TOKEN=<strong_random_token>
# 3. 限制 IP 訪問(可選)
# 通過 Nginx 配置白名單
# 4. 啟用失敗登錄鎖定
# Vaultwarden 內置保護備份策略:
3-2-1 原則:
- 3 份數據副本
- 2 種不同介質
- 1 份異地備份
示例:
1. 服務器本地
2. NAS 存儲
3. 雲存儲(加密後)4. Docker 部署方案
4.1 安裝 Docker
Ubuntu/Debian
# 卸載舊版本
sudo apt remove docker docker-engine docker.io containerd runc
# 更新包索引
sudo apt update
# 安裝依賴
sudo apt install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
# 添加 Docker GPG 密鑰
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 添加倉庫
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安裝 Docker
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 驗證安裝
docker --version
docker compose version
# 添加當前用戶到 docker 組(避免每次 sudo)
sudo usermod -aG docker $USER
newgrp dockerCentOS/RHEL
# 添加倉庫
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安裝
sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 啟動並開機自啟
sudo systemctl start docker
sudo systemctl enable docker
# 驗證
docker --versionmacOS
# 使用 Homebrew
brew install --cask docker
# 啟動 Docker Desktop
open /Applications/Docker.app
# 等待啟動完成(菜單欄出現鯨魚圖標)Windows
1. 下載 Docker Desktop for Windows
https://www.docker.com/products/docker-desktop
2. 安裝並啟動
3. 啟用 WSL 2(推薦)
wsl --install
4. 重啟電腦4.2 創建目錄結構
# 創建項目目錄
mkdir -p ~/vaultwarden/{data,backups}
cd ~/vaultwarden
# 目錄說明:
# data/ - 數據庫和配置文件
# backups/ - 備份文件
# docker-compose.yml - Docker 配置設置權限:
# 確保目錄所有權正確
sudo chown -R $USER:$USER ~/vaultwarden
# 設置適當權限
chmod 700 ~/vaultwarden/data
chmod 700 ~/vaultwarden/backups4.3 Docker Compose 配置
創建 docker-compose.yml:
version: '3.8'
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: unless-stopped
environment:
# 基本配置
- DOMAIN=https://vault.yourdomain.com
- SIGNUPS_ALLOWED=false
- INVITATIONS_ALLOWED=false
- ADMIN_TOKEN=${ADMIN_TOKEN}
# 郵件配置(可選)
- SMTP_HOST=smtp.gmail.com
- SMTP_PORT=587
- SMTP_SSL=true
- SMTP_USERNAME=your-email@gmail.com
- SMTP_PASSWORD=${SMTP_PASSWORD}
- SMTP_FROM=vaultwarden@yourdomain.com
# 其他配置
- WEBSOCKET_ENABLED=true
- LOG_LEVEL=info
- EXTENDED_LOGGING=true
volumes:
- ./data:/data
- ./backups:/backups
ports:
- "127.0.0.1:8080:80" # 只監聽本地,通過 Nginx 代理
- "127.0.0.1:3012:3012" # WebSocket
networks:
- vaultwarden-net
labels:
- "com.centurylinklabs.watchtower.enable=true"
networks:
vaultwarden-net:
driver: bridge環境變量文件 .env:
# 生成強隨機令牌
# 方法 1:使用 openssl
openssl rand -base64 48
# 方法 2:使用 Python
python3 -c "import secrets; print(secrets.token_urlsafe(48))"
# 方法 3:使用 /dev/urandom
head -c 48 /dev/urandom | base64
# 將生成的令牌填入 .env 文件
ADMIN_TOKEN=your_generated_admin_token_here
SMTP_PASSWORD=your_email_app_password重要說明:
⚠️ ADMIN_TOKEN:
這是訪問管理界面的密鑰
必須足夠強壯(至少 32 字符)
妥善保管,不要洩露
丟失後需要重置⚠️ 端口綁定:
127.0.0.1:8080:80
只監聽本地迴環地址
外部無法直接訪問
必須通過 Nginx 反向代理
提高安全性4.4 啟動服務
# 啟動 Vaultwarden
docker compose up -d
# 查看日誌
docker compose logs -f vaultwarden
# 查看運行狀態
docker ps
# 期望輸出:
# CONTAINER ID IMAGE STATUS
# xxx vaultwarden/server:latest Up 2 minutes驗證運行:
# 檢查容器健康
docker compose ps
# 測試本地訪問
curl http://localhost:8080
# 應該返回 HTML 內容4.5 初始配置
訪問 Web 界面
首次訪問:
瀏覽器打開:http://your-server-ip:8080
看到歡迎頁面:
"Welcome to Vaultwarden"創建管理員賬戶
注意:如果禁用了公開註冊,需要通過管理界面創建第一個賬戶。
訪問管理界面:
1. 訪問:http://your-server-ip:8080/admin
2. 輸入 ADMIN_TOKEN
3. 進入管理面板創建第一個用戶:
1. 點擊 "Users" 標籤
2. 點擊 "Add User"
3. 輸入郵箱
4. 設置名稱
5. 勾選 "Verified"
6. 點擊 "Save"
7. 用戶會收到邀請郵件(如配置了 SMTP)
8. 或通過管理界面設置密碼或者臨時啟用註冊:
# 修改 docker-compose.yml
SIGNUPS_ALLOWED=true
# 重啟
docker compose down
docker compose up -d
# 註冊第一個賬戶
# 然後再次禁用註冊
SIGNUPS_ALLOWED=false
docker compose restart4.6 測試基本功能
註冊用戶:
1. 訪問主頁
2. 點擊 "Create Account"
3. 輸入郵箱
4. 設置主密碼(強密碼!)
5. 確認密碼
6. 點擊 "Register"
7. 登錄測試添加第一個密碼:
1. 登錄後點擊 "Add Item"
2. 選擇 "Login"
3. 輸入網站名稱
4. 輸入網址
5. 輸入用戶名
6. 點擊密碼框旁的生成器
7. 保存
8. 測試自動填充5. Nginx 反向代理配置
5.1 為什麼需要反向代理?
優勢:
✅ HTTPS 加密
- 保護數據傳輸
- 瀏覽器信任
- SEO 友好
✅ 域名訪問
- 易於記憶
- 專業形象
- IP 變更無影響
✅ 安全防護
- 隱藏真實端口
- 速率限制
- DDoS 防護
✅ 負載均衡(未來擴展)
- 多實例部署
- 高可用性5.2 安裝 Nginx
方法一:Docker 方式(推薦)
創建 nginx/docker-compose.yml:
version: '3.8'
services:
nginx:
image: nginx:alpine
container_name: vaultwarden-nginx
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
- ./conf.d:/etc/nginx/conf.d:ro
- ./ssl:/etc/nginx/ssl:ro
- ./html:/usr/share/nginx/html:ro
networks:
- vaultwarden-net
networks:
vaultwarden-net:
external: true方法二:直接安裝
# Ubuntu/Debian
sudo apt install nginx certbot python3-certbot-nginx
# CentOS/RHEL
sudo yum install nginx certbot python3-certbot-nginx
# 啟動 Nginx
sudo systemctl start nginx
sudo systemctl enable nginx
# 驗證
sudo nginx -t
sudo systemctl status nginx5.3 獲取 SSL 證書
使用 Certbot(Let's Encrypt)
前提條件:
✅ 域名已解析到服務器 IP
✅ 80 和 443 端口開放
✅ Nginx 已安裝獲取證書:
# 停止 Nginx(如果使用 Docker)
docker compose down
# 獲取證書
sudo certbot certonly --standalone \
-d vault.yourdomain.com \
--email your-email@example.com \
--agree-tos \
--no-eff-email
# 證書位置:
# /etc/letsencrypt/live/vault.yourdomain.com/fullchain.pem
# /etc/letsencrypt/live/vault.yourdomain.com/privkey.pem自動續期:
# 測試續期
sudo certbot renew --dry-run
# 設置定時任務
sudo crontab -e
# 每天凌晨 3 點檢查續期
0 3 * * * certbot renew --quiet && systemctl reload nginx複製證書到 Docker 目錄:
# 創建目錄
mkdir -p ~/vaultwarden/nginx/ssl
# 複製證書
sudo cp /etc/letsencrypt/live/vault.yourdomain.com/fullchain.pem \
~/vaultwarden/nginx/ssl/
sudo cp /etc/letsencrypt/live/vault.yourdomain.com/privkey.pem \
~/vaultwarden/nginx/ssl/
# 設置權限
sudo chown $USER:$USER ~/vaultwarden/nginx/ssl/*
chmod 600 ~/vaultwarden/nginx/ssl/*5.4 Nginx 配置詳解
創建 nginx/conf.d/vaultwarden.conf:
# HTTP 重定向到 HTTPS
server {
listen 80;
server_name vault.yourdomain.com;
# Let's Encrypt 驗證
location /.well-known/acme-challenge/ {
root /usr/share/nginx/html;
}
# 所有其他請求重定向到 HTTPS
location / {
return 301 https://$host$request_uri;
}
}
# HTTPS 配置
server {
listen 443 ssl http2;
server_name vault.yourdomain.com;
# SSL 證書
ssl_certificate /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/privkey.pem;
# SSL 優化配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
# 安全頭
add_header Strict-Transport-Security "max-age=63072000" always;
add_header X-Frame-Options "DENY" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
# 日誌
access_log /var/log/nginx/vaultwarden-access.log;
error_log /var/log/nginx/vaultwarden-error.log;
# 客戶端最大上傳大小(附件)
client_max_body_size 500M;
# 代理到 Vaultwarden
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;
proxy_set_header X-Forwarded-Proto $scheme;
# WebSocket 支持
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# 超時設置
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
}
# 管理界面(可選,建議限制 IP)
location /admin {
# 限制特定 IP 訪問(取消註釋並修改 IP)
# allow 192.168.1.100;
# deny all;
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;
proxy_set_header X-Forwarded-Proto $scheme;
}
# WebSocket 通知
location /notifications/hub {
proxy_pass http://vaultwarden:3012;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header 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;
}
# WebSocket 通知(HTTP fallback)
location /notifications/hub/negotiate {
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;
proxy_set_header X-Forwarded-Proto $scheme;
}
}主配置文件 nginx/nginx.conf:
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# Gzip 壓縮
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css text/xml application/json
application/javascript application/xml+rss
application/atom+xml image/svg+xml;
include /etc/nginx/conf.d/*.conf;
}5.5 啟動 Nginx
# 進入 nginx 目錄
cd ~/vaultwarden/nginx
# 啟動 Nginx
docker compose up -d
# 查看日誌
docker compose logs -f nginx
# 驗證配置
docker exec vaultwarden-nginx nginx -t5.6 測試 HTTPS 訪問
瀏覽器訪問:
https://vault.yourdomain.com
應該看到:
✅ 綠色鎖圖標
✅ 證書有效
✅ Vaultwarden 登錄頁面SSL Labs 測試:
訪問:https://www.ssllabs.com/ssltest/
輸入您的域名
目標評分:A 或 A+命令行測試:
# 測試 HTTPS
curl -I https://vault.yourdomain.com
# 應該返回 200 OK
# 檢查安全頭5.7 Caddy 替代方案(更簡單)
如果您覺得 Nginx 配置複雜,可以使用 Caddy(自動 HTTPS):
docker-compose.yml:
version: '3.8'
services:
caddy:
image: caddy:alpine
container_name: vaultwarden-caddy
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- caddy_data:/data
- caddy_config:/config
networks:
- vaultwarden-net
volumes:
caddy_data:
caddy_config:
networks:
vaultwarden-net:
external: trueCaddyfile:
vault.yourdomain.com {
encode gzip
reverse_proxy vaultwarden:80
tls your-email@example.com
header {
Strict-Transport-Security "max-age=63072000"
X-Frame-Options "DENY"
X-Content-Type-Options "nosniff"
}
}優勢:
✅ 自動獲取和續期 SSL 證書
✅ 配置簡單
✅ 默認安全
✅ 無需 Certbot6. 高級配置與安全加固
6.1 環境變量詳解
完整的 .env 配置示例:
# ===== 基本配置 =====
DOMAIN=https://vault.yourdomain.com
ADMIN_TOKEN=your_strong_admin_token_here
# ===== 註冊控制 =====
SIGNUPS_ALLOWED=false
INVITATIONS_ALLOWED=false
SIGNUPS_VERIFY=true
SIGNUPS_DOMAINS_WHITELIST=yourdomain.com,company.com
# ===== 郵件配置 =====
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_SSL=true
SMTP_USERNAME=your-email@gmail.com
SMTP_PASSWORD=your_app_password
SMTP_FROM=Vaultwarden <vault@yourdomain.com>
SMTP_TIMEOUT=15
# ===== 安全配置 =====
PASSWORD_ITERATIONS=100000
LOG_LEVEL=info
EXTENDED_LOGGING=true
IP_HEADER=X-Real-IP
# ===== WebSocket =====
WEBSOCKET_ENABLED=true
WEBSOCKET_ADDRESS=0.0.0.0
WEBSOCKET_PORT=3012
# ===== 附件配置 =====
MAX_ATTACHMENT_SIZE=500000000 # 500MB
ATTACHMENT_FOLDER=/data/attachments
# ===== 備份配置 =====
BACKUP_FOLDER=/backups
BACKUP_KEEP_DAYS=30
# ===== 性能優化 =====
DATABASE_MAX_CONNS=10
ROCKET_WORKERS=10
CACHE_TTL=300
# ===== 高級功能 =====
ENABLE_DB_WAL=true
SHOW_PASSWORD_HINT=false
DISABLE_ICON_DOWNLOAD=false
ORG_CREATION_USERS=admin@yourdomain.com6.2 數據庫配置
SQLite(默認,適合小規模)
# 無需額外配置
# 數據庫文件:./data/db.sqlite3
# 自動備份和清理優點:
✅ 簡單無需配置
✅ 單文件易備份
✅ 性能足夠(< 100 用戶)
✅ 無外部依賴PostgreSQL(推薦生產環境)
添加 PostgreSQL 服務:
version: '3.8'
services:
vaultwarden:
image: vaultwarden/server:latest
environment:
- DATABASE_URL=postgresql://vaultwarden:${DB_PASSWORD}@postgres:5432/vaultwarden
depends_on:
- postgres
# ... 其他配置
postgres:
image: postgres:15-alpine
container_name: vaultwarden-postgres
restart: unless-stopped
environment:
POSTGRES_USER: vaultwarden
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_DB: vaultwarden
volumes:
- ./postgres-data:/var/lib/postgresql/data
networks:
- vaultwarden-net
networks:
vaultwarden-net:
driver: bridge優點:
✅ 更好的併發性能
✅ ACID 合規
✅ 成熟穩定
✅ 易於擴展
✅ 備份工具豐富遷移數據:
# 使用官方遷移工具
docker run --rm \
-v $(pwd)/data:/source \
vaultwarden/server:latest \
vaultwarden migrate \
--from sqlite:///source/db.sqlite3 \
--to postgresql://vaultwarden:password@postgres:5432/vaultwarden6.3 郵件配置詳解
Gmail SMTP
# 1. 啟用兩步驗證
# 訪問:myaccount.google.com/security
# 2. 生成應用專用密碼
# 訪問:myaccount.google.com/apppasswords
# 選擇 "Mail" 和設備
# 複製生成的 16 位密碼
# 3. 配置環境變量
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_SSL=true
SMTP_USERNAME=your-email@gmail.com
SMTP_PASSWORD=xxxx xxxx xxxx xxxx # 應用專用密碼
SMTP_FROM=Vaultwarden <your-email@gmail.com>SendGrid(推薦企業使用)
# 1. 註冊 SendGrid
# 訪問:sendgrid.com
# 免費套餐:100 封/天
# 2. 創建 API Key
# Settings → API Keys → Create API Key
# 3. 配置
SMTP_HOST=smtp.sendgrid.net
SMTP_PORT=587
SMTP_SSL=true
SMTP_USERNAME=apikey
SMTP_PASSWORD=SG.xxxxxxxxxxxx
SMTP_FROM=noreply@yourdomain.com測試郵件發送
# 通過管理界面測試
# 1. 訪問 /admin
# 2. 點擊 "Test SMTP"
# 3. 輸入測試郵箱
# 4. 檢查是否收到6.4 安全加固
禁用公開註冊
# 生產環境必須禁用
SIGNUPS_ALLOWED=false
# 如需邀請制
INVITATIONS_ALLOWED=trueIP 白名單(管理界面)
在 Nginx 配置中添加:
location /admin {
allow 192.168.1.0/24; # 內網
allow 203.0.113.100; # 特定公網 IP
deny all;
proxy_pass http://vaultwarden:80;
# ... 其他代理設置
}速率限制
# 在 http 塊中添加
limit_req_zone $binary_remote_addr zone=vaultwarden:10m rate=10r/s;
# 在 server 塊中使用
location / {
limit_req zone=vaultwarden burst=20 nodelay;
# ... 其他配置
}Fail2ban 防暴力破解
安裝 Fail2ban:
sudo apt install fail2ban創建過濾器 /etc/fail2ban/filter.d/vaultwarden.conf:
[Definition]
failregex = ^.*Invalid email or password\. IP: <ADDR>\..*$
^.*Failed login from <ADDR>\..*$
ignoreregex =創建監獄 /etc/fail2ban/jail.local:
[vaultwarden]
enabled = true
port = 80,443
filter = vaultwarden
logpath = /var/log/nginx/vaultwarden-access.log
maxretry = 5
bantime = 3600
findtime = 600重啟 Fail2ban:
sudo systemctl restart fail2ban
sudo fail2ban-client status vaultwarden6.5 性能優化
數據庫優化
# 定期清理
docker exec -it vaultwarden sqlite3 /data/db.sqlite3 <<EOF
VACUUM;
ANALYZE;
EOF緩存配置
# 增加緩存 TTL
CACHE_TTL=600
# 啟用數據庫 WAL 模式
ENABLE_DB_WAL=true工作線程調整
# 根據 CPU 核心數調整
ROCKET_WORKERS=10 # 默認為 CPU 核心數 × 2
# 數據庫連接池
DATABASE_MAX_CONNS=10靜態資源優化
在 Nginx 中啟用 Gzip 和緩存:
# 已在 Caddyfile 中配置
# Nginx 配置見上文(由於篇幅限制,後續章節將繼續展開...)
7-10. 更多內容...
完整文章包含:
- 客戶端配置與使用(瀏覽器、桌面、移動端)
- 數據遷移指南(從其他密碼管理器導入)
- 備份與恢復策略(自動備份腳本)
- 監控與維護(日誌、更新、故障排除)
- 常見問題解答(15+ FAQ)
總結
Vaultwarden 是自建密碼管理器的絕佳選擇,它結合了 Bitwarden 的功能完整性和自託管的隱私保護。
🎯 核心價值
- 完全免費:無任何隱藏費用
- 數據主權:密碼存儲在自家服務器
- 功能完整:兼容所有官方客戶端
- 資源節約:可在低功耗設備運行
- 社區活躍:持續更新和支持
💡 實施建議
- 安全第一:啟用 HTTPS、強密碼、2FA
- 定期備份:遵循 3-2-1 原則
- 保持更新:及時升級到最新版本
- 監控日誌:及時發現異常
- 測試恢復:定期驗證備份有效性
📚 延伸閱讀
💬 獲取幫助
- 📖 官方文檔:github.com/dani-garcia/vaultwarden/wiki
- 💬 社區論壇:community.bitwarden.com
- 💬 Reddit:r/Vaultwarden
- 🐛 問題反饋:GitHub Issues
- 💡 本站交流:歡迎在評論區分享經驗
🔐 立即開始保護您的數字生活,使用 Vaultwarden 構建安全的密碼管理體系!
💡 提示:收藏本頁面以備將來參考。如果您覺得本指南有幫助,歡迎分享給更多朋友!