跳轉到內容

Docker 搭建 Vaultwarden:自建 Bitwarden 密碼管理器完整教程(2026版)

Docker 搭建 Vaultwarden

在數字時代,我們擁有越來越多的賬號:郵箱、社交賬號、銀行賬戶、各種服務的登錄憑證……密碼管理已經成為每個人必須面對的問題。使用相同密碼不安全,記不同密碼又很痛苦。

Bitwarden 是一個開源的密碼管理解決方案,功能全面且價格透明。而 Vaultwarden(原 bitwarden_rs)是 Bitwarden 官方服務器的社區開源實現版本,用 Rust 重寫,資源佔用極低,部署簡單,非常適合個人或小團隊自建使用。

本文將帶你從零開始,用 Docker 部署屬於你自己的 Vaultwarden 密碼管理器,實現:

  • 🔐 完全掌控:密碼數據庫存放在你的服務器上
  • 🔄 多端同步:Web、桌面、移動端全平臺支持
  • 🌐 瀏覽器擴展:一鍵填充登錄憑證
  • 📱 手機端支持:iOS、Android 原生 App 同步
  • 💾 數據備份:定期備份,永不丟失
  • 🛡️ 安全加固:反向代理 + HTTPS + 雙因素認證

目錄

  1. Vaultwarden 與 Bitwarden 官方版對比
  2. 部署前準備工作
  3. Docker 與 Docker Compose 安裝
  4. Vaultwarden Docker Compose 部署
  5. Nginx 反向代理與 HTTPS 配置
  6. Caddy 反向代理(推薦方案)
  7. 初始化配置與管理員賬號
  8. 瀏覽器擴展安裝與使用
  9. 桌面客戶端與手機 App 配置
  10. 數據備份與恢復方案
  11. 安全加固最佳實踐
  12. 常見問題排查

1. Vaultwarden 與 Bitwarden 官方版對比

1.1 Vaultwarden 是什麼?

Vaultwarden(原 bitwarden_rs)是 Bitwarden 官方服務器的 Rust 語言重寫版本,完全兼容 Bitwarden 客戶端生態。它的核心優勢在於:

特性VaultwardenBitwarden 官方版
開源協議AGPL-3.0源碼可查看但不可商用
部署方式Docker 一鍵部署需要官方訂閱或複雜部署
資源佔用極低(內存 ~20MB)較重(需要多個組件)
功能完整度核心功能 100%完整功能
高級功能大部分支持全部功能(企業版)
數據掌控完全掌控在自己服務器存儲在 Bitwarden 雲端
成本免費(僅需服務器費用)個人版 $10/年
多用戶支持✅(企業版)
組織(Organizations)
雙因素認證 2FA

1.2 Vaultwarden 支持的功能

✅ 賬戶註冊與管理
✅ 密碼保存與分類(收藏夾)
✅ 瀏覽器擴展自動填充
✅ iOS / Android 移動客戶端
✅ 桌面客戶端(Windows / macOS / Linux)
✅ 雙因素認證(2FA)- TOTP、電子郵件、YubiKey
✅ 密碼生成器
✅ 密碼健康檢查
✅ 附件上傳
✅ 組織(Organizations)與團隊共享
✅ 緊急聯繫人
✅ Web Vault 網頁界面
✅ API 支持

1.3 為什麼選擇自建 Vaultwarden?

🎯 **隱私與安全**:密碼數據完全掌握在自己手中
🎯 **零廣告 / 零追蹤**:沒有數據收集,沒有第三方分析
🎯 **成本可控**:一臺廉價 VPS 即可運行,終身免費使用
🎯 **學習機會**:瞭解 Docker、反向代理、HTTPS 等運維知識
🎯 **自定義功能**:可以按需修改配置,啟用/禁用功能
🎯 **多端同步**:完全兼容 Bitwarden 客戶端生態

2. 部署前準備工作

2.1 硬件要求

Vaultwarden 對硬件要求非常低:

配置最低要求推薦配置
CPU1 核1 核 或更高
內存256 MB512 MB 或更高
磁盤1 GB5 GB SSD
網絡穩定網絡連接1 Mbps 上行帶寬即可
操作系統Linux(推薦)/ macOS / WindowsUbuntu 22.04 LTS

💡 實際上:一臺最低配置的 VPS(1核256MB內存)就能完美運行 Vaultwarden。我自己的 Vaultwarden 實例運行在一臺 1核512MB 的 VPS 上,內存佔用不到 30MB。

2.2 服務器選擇

推薦方案:
• 國內 VPS:騰訊雲輕量、阿里雲輕量(¥30-50/月)
• 國外 VPS:Vultr、DigitalOcean、Linode($3-5/月)
• 家裡服務器:樹莓派、小主機(完全免費)

注意事項:
• 國外服務器 + 國內訪問需要科學上網
• 建議選擇國外服務器部署,避免備案等問題
• 選擇穩定的服務商,數據安全第一

2.3 域名與證書

必需:
• 一個域名(如 bitwarden.example.com 或 vault.example.com)
• HTTPS 證書(Let's Encrypt 免費證書即可)

推薦:
• 使用二級域名部署(如 bw.yourdomain.com)
• 避免使用主域名(方便後續擴展其他服務)

2.4 環境準備清單

✅ 一臺 Linux VPS(推薦 Ubuntu 22.04 LTS)
✅ 一個指向該服務器的域名(A 記錄或 CNAME)
✅ SSH 登錄權限(root 或 sudo 用戶)
✅ 基本的 Linux 命令操作技能

3. Docker 與 Docker Compose 安裝

3.1 更新系統

bash
# 更新軟件包索引
sudo apt update

# 升級已安裝的軟件包
sudo apt upgrade -y

# 安裝必要依賴
sudo apt install -y curl wget git gnupg2 lsb-release ca-certificates

3.2 安裝 Docker

bash
# 安裝 Docker(使用官方一鍵腳本,最省事)
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

# 將當前用戶加入 docker 組(免 sudo 執行 docker 命令)
sudo usermod -aG docker $USER

# 重新登錄或執行以下命令使組生效
newgrp docker

# 驗證安裝
docker --version
# 輸出類似:Docker version 27.0.0, build xxxxxx

# 啟動並設置開機自啟
sudo systemctl enable docker
sudo systemctl start docker

# 驗證 Docker 運行狀態
sudo systemctl status docker

3.3 安裝 Docker Compose

Docker Compose 是一個用於定義和運行多容器應用的工具。

bash
# 檢查是否已包含 docker compose(新版 Docker 已內置)
docker compose version

# 如果輸出錯誤,手動安裝 Docker Compose 插件
sudo apt install -y docker-compose-plugin

# 或安裝獨立版本
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

# 驗證
docker-compose --version

4. Vaultwarden Docker Compose 部署

4.1 創建數據目錄

bash
# 創建項目目錄
mkdir -p ~/vaultwarden/{data,nginx,caddy}

# 進入目錄
cd ~/vaultwarden

4.2 創建 docker-compose.yml

yaml
# ~/vaultwarden/docker-compose.yml

version: '3.8'

services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: unless-stopped
    ports:
      - "127.0.0.1:8080:80"   # HTTP(僅本地訪問,通過反向代理暴露)
      - "127.0.0.1:3012:3012" # WebSocket 通知端口
    volumes:
      - ./data:/data           # 數據持久化目錄
    environment:
      # ====== 基本配置 ======
      - DOMAIN=https://bw.yourdomain.com      # 你的域名,必須是 https
      - SIGNUPS_ALLOWED=true                  # 是否允許新用戶註冊(首次部署開啟)
      - SIGNUPS_DOMAINS_WHITELIST=yourdomain.com  # 限制註冊郵箱域名(可選)
      - INVITATIONS_ALLOWED=true              # 是否允許邀請其他用戶

      # ====== Web 界面配置 ======
      - WEB_VAULT_ENABLED=true                # 啟用 Web 界面
      - SHOW_PASSWORD_HINT=false              # 是否顯示密碼提示

      # ====== 通知 / WebSocket ======
      - WEBSOCKET_ENABLED=true                # 啟用 WebSocket 實時通知

      # ====== SMTP 郵件發送(重要!用於驗證郵箱和 2FA) ======
      - SMTP_HOST=smtp.gmail.com              # SMTP 服務器地址
      - SMTP_FROM=noreply@yourdomain.com      # 發件人郵箱
      - SMTP_FROM_NAME=Vaultwarden            # 發件人名稱
      - SMTP_SECURITY=starttls                # 加密方式:starttls 或 force_tls
      - SMTP_PORT=587                         # SMTP 端口
      - SMTP_USERNAME=your-smtp-username      # SMTP 用戶名
      - SMTP_PASSWORD=your-smtp-password      # SMTP 密碼
      - SMTP_AUTH_MECHANISM=plain             # 認證方式

      # ====== 安全配置 ======
      - ADMIN_TOKEN=your-admin-token-here     # 管理面板令牌(設置後可訪問 /admin)
      - DISABLE_ICON_DOWNLOAD=false           # 是否禁用網站圖標下載
      - IP_HEADER=X-Forwarded-For             # 反向代理獲取真實 IP

      # ====== 密碼嘗試限制 ======
      - LOGIN_RATELIMIT_MAX_BURST=10          # 最大嘗試次數
      - LOGIN_RATELIMIT_SECONDS=60            # 時間窗口(秒)

    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:80"]
      interval: 30s
      timeout: 10s
      retries: 3

🎯 ADMIN_TOKEN 生成

bash
# 生成一個安全的管理員令牌(保存好,用於訪問 /admin 管理面板)
openssl rand -base64 48

# 或使用以下命令
python -c "import secrets; print(secrets.token_urlsafe(64))"

4.3 啟動 Vaultwarden

bash
# 在 docker-compose.yml 所在目錄執行
cd ~/vaultwarden

# 啟動容器(首次會拉取鏡像)
docker compose up -d

# 查看容器狀態
docker compose ps

# 查看容器日誌
docker compose logs -f vaultwarden

4.4 驗證本地訪問

bash
# 測試本地 8080 端口是否正常響應
curl -I http://127.0.0.1:8080

# 正常輸出類似:
# HTTP/1.1 200 OK
# content-type: text/html; charset=utf-8

5. Nginx 反向代理與 HTTPS 配置

5.1 安裝 Nginx 和 Certbot

bash
sudo apt install -y nginx certbot python3-certbot-nginx

5.2 申請 Let's Encrypt 證書

bash
# 確保 Nginx 已啟動
sudo systemctl start nginx
sudo systemctl enable nginx

# 申請證書(替換為你的郵箱和域名)
sudo certbot --nginx \
  --email your@email.com \
  --agree-tos \
  --no-redirect \
  -d bw.yourdomain.com

# 測試自動續期
sudo certbot renew --dry-run

5.3 創建 Nginx 配置文件

nginx
# /etc/nginx/sites-available/vaultwarden

server {
    # HTTP 跳轉到 HTTPS
    listen 80;
    listen [::]:80;
    server_name bw.yourdomain.com;
    return 301 https://$host$request_uri;
}

server {
    # HTTPS 配置
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name bw.yourdomain.com;

    # SSL 證書路徑(Certbot 會自動填充)
    ssl_certificate /etc/letsencrypt/live/bw.yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/bw.yourdomain.com/privkey.pem;

    # SSL 安全配置
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;

    # 日誌
    access_log /var/log/nginx/vaultwarden_access.log;
    error_log /var/log/nginx/vaultwarden_error.log;

    # 反向代理到 Vaultwarden
    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_http_version 1.1;
        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;

        # 超時設置
        proxy_connect_timeout 60;
        proxy_send_timeout 60;
        proxy_read_timeout 300;
        proxy_buffering off;
    }

    # WebSocket 通知
    location /notifications/hub {
        proxy_pass http://127.0.0.1:3012;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }

    location /notifications/hub/negotiate {
        proxy_pass http://127.0.0.1:8080;
    }

    # 管理面板訪問限制(可選,建議限制 IP)
    location /admin {
        # allow 192.168.1.0/24;   # 允許的 IP 段
        # deny all;                 # 拒絕其他所有 IP

        proxy_pass http://127.0.0.1:8080;
        proxy_http_version 1.1;
        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;
    }

    # 安全頭
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    add_header X-Content-Type-Options nosniff;
    add_header X-Frame-Options SAMEORIGIN;
    add_header X-XSS-Protection "1; mode=block";
}

5.4 啟用配置並重啟

bash
# 啟用站點配置
sudo ln -s /etc/nginx/sites-available/vaultwarden /etc/nginx/sites-enabled/

# 測試 Nginx 配置是否正確
sudo nginx -t

# 重啟 Nginx
sudo systemctl restart nginx

6. Caddy 反向代理(推薦方案)

如果你覺得 Nginx 配置太複雜,Caddy 是更簡單的選擇——它會自動申請和續期 HTTPS 證書。

6.1 使用 Docker Compose + Caddy 一鍵部署

yaml
# ~/vaultwarden/docker-compose.yml

version: '3.8'

services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: unless-stopped
    volumes:
      - ./data:/data
    environment:
      - DOMAIN=https://bw.yourdomain.com
      - SIGNUPS_ALLOWED=true
      - WEBSOCKET_ENABLED=true
      - ADMIN_TOKEN=your-admin-token-here
      - IP_HEADER=X-Forwarded-For
      - SMTP_HOST=smtp.gmail.com
      - SMTP_FROM=noreply@yourdomain.com
      - SMTP_PORT=587
      - SMTP_SECURITY=starttls
      - SMTP_USERNAME=your-smtp-username
      - SMTP_PASSWORD=your-smtp-password

  caddy:
    image: caddy:latest
    container_name: vaultwarden-caddy
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./caddy/Caddyfile:/etc/caddy/Caddyfile
      - ./caddy/site:/srv
      - ./caddy/caddy_data:/data
      - ./caddy/caddy_config:/config
    depends_on:
      - vaultwarden

6.2 創建 Caddyfile

caddyfile
# ~/vaultwarden/caddy/Caddyfile

bw.yourdomain.com {
    # 主應用反代
    reverse_proxy vaultwarden:80

    # WebSocket 通知
    reverse_proxy /notifications/hub vaultwarden:3012

    # 安全頭
    header Strict-Transport-Security "max-age=31536000; includeSubDomains"
    header X-Content-Type-Options nosniff
    header X-Frame-Options SAMEORIGIN

    # 管理面板簡單保護(可選)
    basicauth /admin/* {
        admin JDJhJDEwJHBhc3N3b3JkaGFzaGVyZSByZXBsYWNlIG1l  # echo -n 'password' | caddy hash-password
    }
}

6.3 啟動服務

bash
cd ~/vaultwarden
docker compose up -d

# 查看日誌
docker compose logs -f

💡 Caddy 的優勢

  • 自動申請和續期 Let's Encrypt 證書
  • 自動啟用 HTTPS,無需手動配置 SSL
  • 配置文件簡潔易懂
  • 性能優秀,適合大多數場景

7. 初始化配置與管理員賬號

7.1 訪問 Web Vault

部署完成後,在瀏覽器中訪問你的域名:

https://bw.yourdomain.com

你應該能看到 Bitwarden 的登錄界面。

7.2 創建管理員賬號

1. 點擊「創建賬戶」
2. 填寫郵箱地址(建議使用你自己的域名郵箱)
3. 設置主密碼(Master Password)——務必牢記!
4. 再次確認密碼
5. 填寫密碼提示(可選,建議留空或使用不相關的提示)
6. 點擊「創建賬戶」

⚠️ 重要提示

  • 主密碼是解鎖所有密碼的唯一憑證,必須使用高強度密碼
  • 建議使用至少 16 位,包含大小寫字母、數字和特殊字符
  • 務必將主密碼保存在安全的地方(或記住它)
  • 如果忘記主密碼,將無法恢復任何數據(這是設計特性,保護你的隱私)

7.3 訪問管理面板

訪問:https://bw.yourdomain.com/admin

輸入之前在 docker-compose.yml 中設置的 ADMIN_TOKEN

在管理面板中可以:
• 查看已註冊用戶列表
• 禁用/啟用用戶
• 刪除用戶
• 查看組織信息
• 修改系統配置
• 查看系統日誌

7.4 關閉公開註冊(首次部署後推薦)

當你自己註冊完畢後,建議關閉公開註冊功能,防止陌生人註冊:

bash
# 方法一:修改 docker-compose.yml 中的 SIGNUPS_ALLOWED
- SIGNUPS_ALLOWED=false

# 方法二:通過 /admin 管理面板設置
# 訪問 https://bw.yourdomain.com → General settings → Allow new signups
# 取消勾選後 Save

# 重啟容器使配置生效
docker compose restart

8. 瀏覽器擴展安裝與使用

8.1 安裝瀏覽器擴展

Chrome / Edge:
  Chrome 網上應用店 → 搜索 "Bitwarden" → 添加擴展

Firefox:
  Firefox 附加組件商店 → 搜索 "Bitwarden" → 安裝

Safari:
  Mac App Store → 搜索 "Bitwarden" → 安裝

8.2 配置擴展連接自建服務器

1. 點擊瀏覽器工具欄中的 Bitwarden 圖標
2. 點擊「設置」或齒輪圖標
3. 在「服務器 URL」中輸入你的自建服務器地址:
   https://bw.yourdomain.com
4. 點擊「保存」
5. 輸入你的郵箱和主密碼登錄
6. 完成!瀏覽器擴展即可自動填充密碼

9. 桌面客戶端與手機 App 配置

9.1 桌面客戶端(Windows / macOS / Linux)

下載地址:https://bitwarden.com/download/

安裝後首次配置:
1. 打開 Bitwarden 桌面應用
2. 點擊「設置」
3. 服務器 URL → 輸入 https://bw.yourdomain.com
4. 保存後用郵箱和主密碼登錄

9.2 iOS / Android 移動端

App Store(iOS)或 Google Play(Android)→ 搜索 "Bitwarden"

安裝後首次配置:
1. 打開 Bitwarden App
2. 點擊「設置」
3. 服務器 URL → 輸入 https://bw.yourdomain.com
4. 保存後用郵箱和主密碼登錄
5. 配置 Face ID / Touch ID / 指紋解鎖
6. 啟用自動填充功能

9.3 多端同步演示

在一個設備上添加密碼 → 其他設備自動同步

工作原理:
1. 客戶端將加密後的密碼數據發送到服務器
2. 服務器存儲加密數據(服務器端無法解密,加密在客戶端完成)
3. 其他設備從服務器拉取最新數據
4. 客戶端用主密碼解密後顯示

💡 重要:加密在本地進行,服務器只存儲密文
   即使服務器被入侵,黑客也無法獲取明文密碼

10. 數據備份與恢復方案

10.1 數據目錄結構

~/vaultwarden/data/
├── db.sqlite3          # 主數據庫(最重要!)
├── db.sqlite3-shm      # SQLite 共享內存文件(臨時)
├── db.sqlite3-wal      # SQLite WAL 日誌(臨時)
├── attachments/        # 附件目錄(用戶上傳的文件)
├── sends/              # Send 功能數據
├── icon_cache/         # 網站圖標緩存
├── rsa_key.der         # RSA 私鑰(簽名用)
├── rsa_key.pub.der     # RSA 公鑰
└── config.json         # 配置文件

10.2 手動備份

bash
# 停止容器(避免數據庫寫入衝突)
cd ~/vaultwarden
docker compose stop

# 創建備份目錄
mkdir -p ~/backups

# 備份數據目錄(帶時間戳)
BACKUP_DATE=$(date +%Y%m%d_%H%M%S)
sudo tar -czf ~/backups/vaultwarden_$BACKUP_DATE.tar.gz ./data/

# 重新啟動容器
docker compose up -d

# 查看備份文件
ls -lh ~/backups/

10.3 自動備份腳本

創建自動備份腳本:

bash
# ~/vaultwarden/backup.sh

#!/bin/bash
# Vaultwarden 自動備份腳本

BACKUP_DIR="/home/yourusername/backups"
VAULTWARDEN_DIR="/home/yourusername/vaultwarden"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="vaultwarden_$DATE.tar.gz"
RETENTION_DAYS=30

# 創建備份目錄(如不存在)
mkdir -p $BACKUP_DIR

# 停止容器
cd $VAULTWARDEN_DIR
docker compose stop

# 壓縮備份
tar -czf $BACKUP_DIR/$BACKUP_FILE ./data/

# 重啟容器
docker compose up -d

# 刪除 30 天前的舊備份
find $BACKUP_DIR -name "vaultwarden_*.tar.gz" -mtime +$RETENTION_DAYS -delete

# 輸出日誌
echo "[$DATE] 備份完成: $BACKUP_FILE" >> $BACKUP_DIR/backup.log
bash
# 設置腳本可執行權限
chmod +x ~/vaultwarden/backup.sh

# 測試備份腳本
cd ~/vaultwarden
./backup.sh

10.4 設置定時任務

bash
# 編輯 crontab
crontab -e

# 添加以下行(每天凌晨 3 點自動備份)
0 3 * * * /home/yourusername/vaultwarden/backup.sh

# 保存並退出
# 查看當前 crontab
crontab -l

10.5 異地備份(推薦)

bash
# 方案一:使用 rsync 同步到另一臺服務器
rsync -avz ~/backups/ user@backup-server:/path/to/backups/

# 方案二:使用 rclone 同步到雲存儲(如 Google Drive、OneDrive)
# 安裝 rclone
curl https://rclone.org/install.sh | sudo bash

# 配置雲存儲(按提示操作)
rclone config

# 同步備份文件
rclone sync ~/backups/ gdrive:vaultwarden-backups

# 添加到 crontab
30 3 * * * rclone sync ~/backups/ gdrive:vaultwarden-backups

10.6 數據恢復

bash
# 停止當前容器
cd ~/vaultwarden
docker compose down

# 備份當前數據(以防恢復失敗)
mv ./data ./data_backup_$(date +%Y%m%d)

# 從備份恢復數據
BACKUP_FILE="/path/to/backups/vaultwarden_20260612_030000.tar.gz"
tar -xzf $BACKUP_FILE

# 重啟容器
docker compose up -d

# 驗證數據
# 訪問 https://bw.yourdomain.com 登錄,檢查密碼是否恢復

11. 安全加固最佳實踐

11.1 啟用雙因素認證(2FA)

強烈建議為你的賬號啟用雙因素認證:
1. 登錄 Web Vault: https://bw.yourdomain.com
2. 右上角個人資料 → 點擊「設置」
3. 「安全」→「兩步驗證」
4. 選擇「認證器應用」(推薦)
5. 用手機上的 Google Authenticator / Microsoft Authenticator 掃碼
6. 輸入驗證碼完成綁定
7. 保存恢復碼(打印或保存在安全位置)

11.2 防火牆設置(UFW)

bash
# 安裝 UFW
sudo apt install -y ufw

# 設置默認策略
sudo ufw default deny incoming
sudo ufw default allow outgoing

# 開放 SSH(務必先開啟,否則會被鎖定)
sudo ufw allow 22/tcp

# 開放 HTTP 和 HTTPS
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# 啟用防火牆
sudo ufw enable

# 查看狀態
sudo ufw status verbose

11.3 限制管理面板訪問

bash
# 方法一:通過 Nginx 配置限制 IP(見第 5.3 節)
# 方法二:修改 docker-compose,不暴露管理面板端口(建議)

# 修改 docker-compose.yml:確保不直接暴露管理面板
# 所有訪問必須通過反向代理

11.4 定期更新容器

bash
# 檢查更新並一鍵更新
cd ~/vaultwarden

# 拉取最新鏡像
docker compose pull

# 重啟容器(使用新鏡像)
docker compose up -d

# 清理舊鏡像
docker image prune -f

# 建議每月執行一次,或設置為定時任務

11.5 定期備份驗證

每月至少驗證一次備份的有效性:
1. 將備份恢復到測試環境
2. 檢查能否正常登錄
3. 驗證數據完整性(抽查幾個密碼條目)
4. 確認 2FA 工作正常

11.6 防止暴力破解

Vaultwarden 內置的保護:
• LOGIN_RATELIMIT_MAX_BURST=10(10 次嘗試)
• LOGIN_RATELIMIT_SECONDS=60(每 60 秒重置)

額外建議:
• 使用 Fail2ban 監控 Nginx 日誌,自動封禁失敗嘗試
• 使用 Cloudflare 等 CDN 提供額外的 DDoS 保護
• 定期檢查登錄日誌(/admin 管理面板)

12. 常見問題排查

12.1 無法訪問網站

排查步驟:
1. 檢查容器是否運行:docker compose ps
2. 檢查容器日誌:docker compose logs -f
3. 檢查 Nginx/Caddy 狀態:sudo systemctl status nginx
4. 檢查域名 DNS 解析是否正常:nslookup bw.yourdomain.com
5. 檢查防火牆是否開放端口:sudo ufw status
6. 測試本地訪問:curl -I http://127.0.0.1:8080

12.2 瀏覽器擴展無法登錄

排查步驟:
1. 確認服務器 URL 設置正確:https://bw.yourdomain.com
2. 檢查瀏覽器是否能正常訪問該網址
3. 清除瀏覽器緩存和 Cookie
4. 檢查是否有瀏覽器擴展(如廣告攔截)阻止連接
5. 檢查容器日誌查看登錄請求

12.3 無法註冊 / 郵箱驗證失敗

排查步驟:
1. 檢查 SMTP 配置是否正確
2. 檢查郵箱賬號是否開啟了第三方登錄(如 Gmail 需要「應用專用密碼」)
3. 檢查 SMTP 端口是否被 VPS 服務商封禁(25 端口常被封)
4. 檢查容器日誌中的郵件發送錯誤
5. 嘗試使用其他郵箱服務商(如 SendGrid、Mailgun、騰訊企業郵箱)

12.4 HTTPS 證書問題

排查步驟:
1. 檢查域名是否正確解析到服務器
2. 檢查 443 端口是否開放
3. 檢查證書是否過期:sudo certbot certificates
4. 手動續期:sudo certbot renew
5. 測試證書:https://www.ssllabs.com/ssltest/

12.5 數據同步失敗

排查步驟:
1. 檢查 Vaultwarden 容器是否正常運行
2. 檢查容器日誌中的錯誤
3. 檢查 WebSocket 配置(通知功能)
4. 在客戶端手動觸發同步(下拉刷新)
5. 檢查客戶端是否使用了正確的服務器 URL

12.6 忘記主密碼

⚠️ 無法恢復!這是 Bitwarden/ Vaultwarden 的設計特性。

建議:
1. 使用密碼提示(但不要讓提示過於明顯)
2. 將主密碼寫在安全的地方(物理保管)
3. 設置緊急聯繫人(家人/朋友)
4. 定期導出密碼庫作為備份

導出密碼庫:
Web Vault → 工具 → 導出保險庫 → 選擇格式(.json 或 .csv)→ 輸入主密碼
→ 保存文件到安全位置(建議加密後存儲)

12.7 忘記管理員令牌

bash
# 重新生成並更新 docker-compose.yml
openssl rand -base64 48

# 編輯 docker-compose.yml,替換 ADMIN_TOKEN
cd ~/vaultwarden
nano docker-compose.yml

# 重啟容器
docker compose up -d

# 現在可以用新令牌訪問 /admin

總結

恭喜!你現在擁有了一個完全由自己掌控的密碼管理器。讓我們回顧一下整個部署流程:

1. 準備 VPS 服務器
2. 安裝 Docker + Docker Compose
3. 創建 docker-compose.yml 配置文件
4. 配置 Nginx/Caddy 反向代理 + HTTPS
5. 部署並啟動 Vaultwarden
6. 創建管理員賬號,啟用 2FA
7. 配置瀏覽器擴展和手機 App
8. 設置定期數據備份
9. 進行安全加固

自建 Vaultwarden 的核心價值:

  • 🔒 數據主權:你的密碼只存在於你的服務器
  • 💰 零運營成本:除了 VPS 費用,完全免費
  • 🚀 高性能低佔用:Rust 重寫,資源佔用極低
  • 🔄 全平臺同步:兼容所有 Bitwarden 客戶端
  • 🛡️ 端到端加密:服務器存儲的是密文,即使服務器被入侵也無法解密

📖 延伸閱讀



延伸阅读

免责声明

本文仅供技术交流和学习参考。涉及第三方服务的链接可能包含 sponsored 标记,请自行核实服务条款、价格和可用性,并遵守当地法律法规。

最後更新於: