Featured image of post Vaultwarden:セルフホスト型パスワードマネージャー導入ガイド Featured image of post Vaultwarden:セルフホスト型パスワードマネージャー導入ガイド

Vaultwarden:セルフホスト型パスワードマネージャー導入ガイド

Vaultwardenは軽量なBitwarden互換サーバーです。Dockerを使ったセットアップ、SSL設定、バックアップ戦略、日常的な使い方までを完全解説します。

Vaultwardenとは

Vaultwardenは、BitwardenサーバーAPIをRustで再実装したオープンソースのセルフホスト型パスワードマネージャーです。公式のBitwardenサーバーがMicrosoft SQL Serverと大量のリソースを必要とするのに対し、Vaultwardenは非常に軽量で、低スペックなVPSやRaspberry Piでも快適に動作します。すべての公式Bitwardenクライアント(デスクトップアプリ、ブラウザ拡張、モバイルアプリ、CLI)と互換性があります。

セルフホストにより、パスワードデータの完全な管理権限を手に入れられます。暗号化されたボールトはあなたのサーバーから一切外部に出ません。プロジェクトは活発にメンテナンスされており、個人利用から小規模チームまで幅広く利用されています。

Docker Composeによるデプロイ

Vaultwardenの実行にはDockerが推奨されます。以下はPostgreSQLと管理画面用トークンを同梱した本番向けの構成です。

version: "3.8"

services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: unless-stopped
    environment:
      DOMAIN: "https://vault.yourdomain.com"
      ADMIN_TOKEN: "${VAULTWARDEN_ADMIN_TOKEN}"
      DATABASE_URL: "postgresql://vaultwarden:${DB_PASSWORD}@db:5432/vaultwarden"
      SIGNUPS_ALLOWED: "false"
      INVITATIONS_ALLOWED: "true"
    volumes:
      - ./vw-data:/data
    ports:
      - "127.0.0.1:8080:80"
    depends_on:
      - db

  db:
    image: postgres:16-alpine
    container_name: vaultwarden-db
    restart: unless-stopped
    environment:
      POSTGRES_DB: vaultwarden
      POSTGRES_USER: vaultwarden
      POSTGRES_PASSWORD: "${DB_PASSWORD}"
    volumes:
      - ./pg-data:/var/lib/postgresql/data

.envファイルにシークレットを記述します。

VAULTWARDEN_ADMIN_TOKEN=your-random-admin-token-here
DB_PASSWORD=your-strong-db-password-here

起動は一行です。

docker compose up -d

SQLite vs PostgreSQL

VaultwardenはデフォルトでSQLiteを使用します。個人利用であればSQLiteで十分です。複数ユーザーでの利用や運用の堅牢性を重視する場合はPostgreSQLを選択します。DATABASE_URLを指定しない場合、自動的にSQLiteが使われます。

管理トークン

ADMIN_TOKENを設定すると/adminで管理パネルにアクセスできます。トークンは以下のコマンドで生成してください。

openssl rand -base64 48

初回アカウント作成後はSIGNUPS_ALLOWEDfalseに戻して新規登録を無効化しましょう。

CaddyによるSSL証明書の自動取得

Caddyを使うとLet’s Encryptの証明書を自動で取得・更新できます。Caddyfileを作成します。

vault.yourdomain.com {
    reverse_proxy 127.0.0.1:8080
}

Dockerで起動します。

docker run -d \
  --name caddy \
  -p 80:80 -p 443:443 \
  -v $PWD/Caddyfile:/etc/caddy/Caddyfile \
  -v caddy-data:/data \
  caddy:latest

Nginxを使う場合はCertbotで証明書を取得し、以下のようにリバースプロキシを設定します。

server {
    listen 443 ssl;
    server_name vault.yourdomain.com;

    ssl_certificate /etc/letsencrypt/live/vault.yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/vault.yourdomain.com/privkey.pem;

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

初回セットアップ手順

  1. https://vault.yourdomain.com にアクセスし、初回アカウントを作成します(SIGNUPS_ALLOWEDtrueの場合)。
  2. https://vault.yourdomain.com/admin で管理パネルにログインします。認証にはADMIN_TOKENを使用します。
  3. 管理画面からユーザー管理、新規登録の無効化、SMTP設定、診断情報の確認が行えます。
  4. Bitwardenブラウザ拡張またはモバイルアプリをインストールし、サーバーURLに自身のドメインを設定します。

バックアップ戦略

SQLiteを使用している場合、以下のスクリプトで一貫性のあるバックアップを取得できます。

#!/bin/bash
BACKUP_DIR="/path/to/backups"
TIMESTAMP=$(date +%Y%m%d-%H%M%S)

docker exec vaultwarden sqlite3 /data/db.sqlite3 ".backup '/tmp/backup.db'"
docker cp vaultwarden:/tmp/backup.db "$BACKUP_DIR/vaultwarden-$TIMESTAMP.db"
docker cp vaultwarden:/data/attachments "$BACKUP_DIR/attachments-$TIMESTAMP"

PostgreSQLの場合はpg_dumpを使用します。

docker exec vaultwarden-db pg_dump -U vaultwarden vaultwarden > "$BACKUP_DIR/vw-pg-$TIMESTAMP.sql"

cronで日次バックアップをスケジュールし、オフサイトにコピーしてください。バックアップは定期的に復元テストを行うことが重要です。

他サービスからの移行

VaultwardenはBitwardenのデータインポート形式をサポートしています。ほとんどのパスワードマネージャーはCSVまたはJSON形式でエクスポートできます。

  1. 元のマネージャー(LastPass、Dashlane、1Password、KeePassなど)からデータをエクスポートします。
  2. VaultwardenのWebボールトで Tools → Import Data を開きます。
  3. ソース形式を選択してファイルをアップロードします。

対応形式はBitwarden JSON/CSV、1Password CSV、Dashlane CSV、KeePass XMLなど多岐にわたります。インポート後は平文データを含むエクスポートファイルを必ず削除してください。

VaultwardenとBitwardenの比較

項目Vaultwarden公式Bitwarden
データベースSQLite / PostgreSQLMicrosoft SQL Server
メモリ使用量約10–30 MB約2–4 GB
セットアップDockerコンテナ1つ複数サービスの構成が必要
公式クライアントすべてのBitwardenクライアント対応すべてのBitwardenクライアント対応
セルフホスト設計段階から最適化可能だが重い
管理パネル内蔵Webボールトのみ
チーム機能基本対応(招待、組織、コレクション)フルエンタープライズ機能

個人利用や小規模チームにはVaultwardenが最適です。エンタープライズレベルのコンプライアンスやAD/LDAP統合が必要な場合は公式Bitwardenサーバーを検討してください。

日常的な使い方

デプロイ後は通常のBitwardenとまったく同じように使えます。すべての公式クライアントでサーバーURLを自身のドメインに設定するだけです。暗号化はすべてクライアント側で行われ、マスターパスワードやボールトの中身がサーバーに送られることはありません。

TOTP認証コード、セキュアノート、クレジットカード情報、IDプロファイルなど、すべての機能がそのまま動作します。組織とコレクションによる共有ボールトもサポートされています。モバイルアクセスにはBitwardenアプリをそのまま利用できます。