番外編1:【初心者向け】VPSとDockerで自分だけのパスワードマネージャー「Vaultwarden」を構築しよう!


正直難易度高いです。そこそこLinuxを操作した経験がないと厳しい環境構築ではあります。

が、構築作業をそれぞれしっかり覚え、理解すると、サーバーへの知識が一気に深まると思いますし、かなり後に出てくるバックエンド備忘録中級編も結構楽にできてしまうと思います。


ほんへ

「たくさんのWebサービスのパスワード、どう管理していますか?」

パスワードの使い回しは危険だと分かっていても、すべてを覚えておくのは不可能に近いですよね。そんな悩みを解決してくれるのが「パスワードマネージャー」です。

この記事では、人気のパスワードマネージャー「Bitwarden」と互換性がありながら、個人のVPS(仮想プライベートサーバー)でもサクサク動く軽量な「Vaultwarden」を、初心者の方でも分かりやすく構築する手順を解説します。

自分でサーバーを建てることで、サービス提供者にデータを預けることなく、完全に自分の管理下にパスワードを置くことができます。セキュリティを重視するあなたにぴったりの方法です。

なぜVaultwardenがおすすめなの?

数あるパスワードマネージャーの中でも、今回Vaultwardenを選ぶ理由は3つあります。

  1. 超軽量: 公式のBitwardenサーバーに比べてメモリ使用量が非常に少なく、月額数百円〜の低スペックなVPSでも快適に動作します。
  2. 導入が簡単: 「Docker」という技術を使うことで、複雑な設定をすることなく、コマンド数行でサーバーを立ち上げられます。
  3. 公式アプリが使える: サーバーは自前で動かしながら、PCやスマホのアプリは使いやすい公式のBitwardenクライアントをそのまま利用できます。

構築のゴール

この記事を読み終える頃には、あなたは以下の状態になっています。

  • 自分専用のドメイン(https://vault.your-domain.comなど)でアクセスできるパスワードマネージャーが動いている。
  • 通信はSSL/TLS(HTTPS)で暗号化され、安全に利用できる。
  • PCのブラウザ拡張機能やスマホアプリから、自分のサーバーにパスワードを保存・同期できる。

Step 0: 準備するもの

構築を始める前に、以下の3つをご用意ください。

  1. VPSサーバー: OSはUbuntu 22.04 LTSがインストールされているものとします。メモリは1GBもあれば十分です。
  2. 独自ドメイン: example.comのような、あなた自身のドメイン。Vaultwardenにアクセスするために使います。
  3. DNS設定: 取得したドメインのDNS設定で、サブドメイン(例: vault.example.com)のAレコードに、お使いのVPSのIPアドレスを登録しておいてください。

準備はできましたか?それでは、あなたのサーバーにSSHでログインして、構築を始めましょう!


Step 1: DockerとDocker Composeをインストールする

まずは、Vaultwardenを動かすための土台となる「Docker」と「Docker Compose」をサーバーにインストールします。これらは、アプリケーションを簡単・きれいに管理するための仕組みだと思ってください。

以下のコマンドを上から順に実行していくだけでOKです。

# 1. システムを最新の状態に更新
sudo apt update && sudo apt upgrade -y

# 2. Dockerのインストールに必要なパッケージを導入
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common

# 3. Docker公式のGPGキーを追加
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# 4. Dockerのリポジトリを追加
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

# 5. 再びパッケージリストを更新
sudo apt update

# 6. Docker EngineとDocker Composeをインストール
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

インストールが完了したか、バージョンを確認してみましょう。

docker --version
docker compose version

バージョン番号が表示されれば、このステップは成功です!

Step 2: Vaultwardenの設定ファイルを作成する

次に、Vaultwardenをどう動かすかの設計図となる設定ファイルを作っていきます。

1. 作業ディレクトリの作成

まず、設定ファイルをまとめておくためのディレクトリ(フォルダ)を作り、そこに移動します。

# vaultwardenというディレクトリを作成
mkdir vaultwarden

# 作成したディレクトリに移動
cd vaultwarden

2. docker-compose.ymlの作成

docker-compose.ymlは、Dockerに「どのソフトウェア(Vaultwarden)を、どんな設定で動かすか」を指示するためのファイルです。

以下のコマンドでファイルを作成し、編集します。

nano docker-compose.yml

開いたエディタに、以下の内容をそのままコピー&ペーストしてください。

version: '3'

services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: always
    environment:
      - WEBSOCKET_ENABLED=true # WebSocketを有効にする
      - SIGNUPS_ALLOWED=true   # 新規アカウント登録を許可(初回起動時)
    volumes:
      - ./vw-data:/data

  caddy:
    image: caddy:latest
    container_name: caddy
    restart: always
    ports:
      - "80:80"    # HTTP
      - "443:443"  # HTTPS
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - caddy_data:/data
      - caddy_config:/config

volumes:
  caddy_data:
  caddy_config:

貼り付けたら、Ctrl + Xを押し、次にY、最後にEnterを押して保存します。

解説: このファイルでは、「vaultwarden」というサービスと、通信を暗号化(HTTPS化)してくれる「caddy」というWebサーバーを一緒に動かすように設定しています。

3. Caddyfileの作成

次に、Webサーバーcaddyの設定ファイルを作ります。Caddyは、SSL証明書を自動で取得・更新してくれる優れものです。

nano Caddyfile

以下の内容を貼り付けます。vault.example.comの部分は、あなたが準備した自分のドメインに書き換えてください。

vault.example.com {
  # ヘッダー設定
  header {
    # X-Frame-OptionsヘッダーをSAMEORIGINに設定し、クリックジャッキングを防止
    X-Frame-Options "SAMEORIGIN"
    # Content-Security-Policyヘッダーを設定し、クロスサイトスクリプティングを防止
    Content-Security-Policy "frame-ancestors 'self'"
  }

  # Vaultwardenコンテナにリバースプロキシ
  reverse_proxy vaultwarden:80 {
    # WebSocket通信用のヘッダー
    header_up X-Real-IP {remote_host}
  }
}

書き換えたら、先ほどと同じようにCtrl + X -> Y -> Enterで保存します。

Step 3: Vaultwardenを起動する!

設定ファイルの準備が整いました。いよいよ起動です!

以下のコマンド一発で、VaultwardenとCaddyが起動します。

sudo docker compose up -d

doneと表示されれば成功です。念のため、コンテナが正常に動いているか確認しましょう。

sudo docker compose ps

vaultwardencaddySTATUSrunningになっていればOKです。

Step 4: ブラウザでアクセスしてアカウントを作成

いよいよ、あなたのパスワードマネージャーにアクセスしてみましょう。 Webブラウザを開き、Caddyfileで設定したあなたのドメイン(例: https://vault.example.com)にアクセスしてください。

(画像はBitwardenのイメージです)

このような画面が表示されれば、サーバーは正常に動いています!

  1. 右上の**「アカウントを作成」**をクリックします。
  2. メールアドレス、マスターパスワードなどを設定してアカウントを作成します。

    警告: マスターパスワードは絶対に忘れないでください。これを忘れると、あなた自身もデータにアクセスできなくなります。

  3. 作成したアカウントでログインできることを確認してください。

【重要】新規ユーザー登録を無効にする

あなた自身のアカウントが作成できたら、セキュリティのために第三者が勝手にアカウントを作れないように設定を変更しましょう。

  1. サーバーに戻り、docker-compose.ymlを再度開きます。
    nano docker-compose.yml
  2. SIGNUPS_ALLOWED=trueの部分をfalseに書き換えます。
    # 変更前
    - SIGNUPS_ALLOWED=true
    
    # 変更後
    - SIGNUPS_ALLOWED=false
  3. 保存して閉じ、設定を反映させるために以下のコマンドを実行します。
    sudo docker compose up -d

これで、あなたのサーバーに新規登録できるのはあなただけになりました。

Step 5: Bitwardenクライアントから接続する

サーバーの準備は完了です。最後に、普段使うPCやスマホから接続する設定を行いましょう。

  1. お使いのデバイスに公式のBitwardenアプリをインストールします。(ブラウザ拡張機能、デスクトップアプリ、スマホアプリなど)
  2. アプリを開き、ログイン画面左上にある歯車アイコン⚙をクリックします。
  3. **「セルフホスト環境」という項目が表示されるので、「サーバーURL」**に、あなたが設定したドメイン(https://vault.example.com)を入力して保存します。
  4. 元のログイン画面に戻り、先ほど作成したメールアドレスとマスターパスワードでログインします。

これで完了です!これからは、あなたのすべてのデバイスでパスワードが安全に同期されるようになります。

今後の運用について

アップデート方法

Vaultwardenは定期的にアップデートされます。アップデートは非常に簡単です。 サーバーにログインし、vaultwardenディレクトリに移動して以下のコマンドを実行するだけです。

# 最新のイメージを取得
sudo docker compose pull

# 新しいイメージでコンテナを再起動
sudo docker compose up -d

バックアップ

これが最も重要です。 万が一サーバーに問題が起きてもデータを復旧できるよう、必ずバックアップを取りましょう。 バックアップが必要なのは、vaultwardenディレクトリの中にあるvw-dataというフォルダです。このフォルダにすべてのデータが保存されています。

定期的にこのvw-dataフォルダを別の安全な場所(あなたのPCや他のクラウドストレージなど)にコピーしておくことを強くお勧めします。

まとめ

お疲れ様でした! これであなたは、誰にも依存しない、自分だけの安全なパスワード管理環境を手に入れました。 セルフホストは少し難しく感じるかもしれませんが、一度構築してしまえば、その安心感と自由度は何物にも代えがたいものです。

今日から始まる、安全で快適なパスワード管理ライフを楽しんでください!