パスワードマネージャーを使っているけど「クラウドに預けるのが少し不安」「月額がもったいない」と思ったことはないだろうか。自分はそのタイプで、ずっと気になっていたのが Vaultwarden だ。
Bitwarden互換のサーバーを自分で立てて、スマホやブラウザからいつも通り使えるというもの。今回、自宅のUbuntuサーバー(ミニPC)に構築してみたので、詰まったポイントも含めて全部書く。
なぜセルフホストしたかったのか #
- クラウドサービスへのパスワード丸投げに漠然とした不安があった
- 月額数百〜千数百円のランニングコストを削りたかった
- どうせ自宅サーバーがあるなら使わないともったいない
という3つが重なったのがきっかけ。難しそうなイメージがあったけど、実際やってみたら半日もかからなかった。
全体の構成 #

ポイントは Cloudflare Tunnel を間に挟むこと。自宅ルーターのポート開放が不要で、Cloudflareが仲介してくれるのでセキュリティ的にも安心感がある。
[スマホ / ブラウザ]
↓ HTTPS
[Cloudflare Tunnel] ← ルーター設定不要
↓
[自宅ミニPC: Vaultwarden(Docker)]
↓
[vw-data/ ← SQLiteで永続化]必要なもの #
- 自宅で常時起動しているLinuxサーバー(Docker動けばなんでも可)
- Cloudflareアカウント(無料枠でOK)
- 独自ドメイン(Cloudflareで管理しているもの)
構築手順 #

1. ディレクトリ構成を作る #
~/vaultwarden/
├── docker-compose.yml
├── .env ← トークンとドメインを記入
├── vw-data/ ← データ永続化
├── backups/ ← 自動バックアップ先
└── scripts/
└── backup.sh2. docker-compose.yml #
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: unless-stopped
volumes:
- ./vw-data:/data
environment:
DOMAIN: "https://${VW_DOMAIN}"
SIGNUPS_ALLOWED: "true"
WEBSOCKET_ENABLED: "true"
networks:
- vw_internal
cloudflared:
image: cloudflare/cloudflared:latest
container_name: cloudflared
restart: unless-stopped
command: tunnel --no-autoupdate run
environment:
TUNNEL_TOKEN: "${CLOUDFLARE_TUNNEL_TOKEN}"
depends_on:
- vaultwarden
networks:
- vw_internal
networks:
vw_internal:
driver: bridge3. Cloudflare Tunnelのトークンを取得 #
- Cloudflare Zero Trust → Networks → Tunnels → Create a tunnel
- Connector type: Cloudflared → 名前をつけて作成
- Docker を選択 → 表示されるコマンドからトークン(
eyJhA...)をコピー
4. .envを作成して起動 #
cp .env.example .env
nano .env
# CLOUDFLARE_TUNNEL_TOKEN と VW_DOMAIN を記入
docker compose up -d5. Cloudflareでルートを登録 #
ダッシュボード → Tunnels → Edit → ルート → ルートを作成 → 公開アプリケーション
| 項目 | 値 |
|---|---|
| サブドメイン | vw |
| ドメイン | 所有ドメイン |
| サービスType | HTTP |
| URL | http://vaultwarden:80 |
http:// を付けないとエラーになるので注意。
セキュリティ設定 #
アカウント作成後は即座にサインアップを閉じる。これをやらないと、URLを知っている人なら誰でもアカウントを作れてしまう。
# .env
SIGNUPS_ALLOWED=falsedocker compose up -d自動バックアップ #

毎日午前3時にtar.gz圧縮・30日保持するスクリプトをcronで登録する。
crontab -e
# 追記
0 3 * * * /home/max268/vaultwarden/scripts/backup.shパスワードデータが消えたら洒落にならないので、これだけは最初にやっておくことをおすすめする。
使ってみた感想 #
ブラウザ拡張(Bitwarden公式)をそのまま使える。サーバーURLを自分のドメインに変えるだけで操作感は変わらない。スマホアプリも同様で、設定画面のサーバーURLを変えるだけでデータが移行できた。
自分のサーバーにデータがあるという安心感は思ったより大きかった。クラウドサービスの障害やサービス終了を気にせずに使えるのも地味にいい。
まとめ #
| 項目 | 結果 |
|---|---|
| 構築時間 | 約2〜3時間 |
| 月額コスト | ゼロ(ドメイン代のみ) |
| 外部アクセス | Cloudflare Tunnel経由 |
| ルーター設定 | 不要 |
| バックアップ | 毎日自動(30日保持) |
自宅サーバーがすでにある人には特におすすめ。Cloudflare Tunnelはポート開放なしで外部公開できるので、Vaultwarden以外のサービスにも応用できる。覚えておいて損はない構成だと思う。