前言#
Bitwarden は自由でオープンソースのパスワード管理サービスで、ユーザーは暗号化された保管庫に敏感な情報(例えば、ウェブサイトのログイン資格情報)を保存できます。Bitwarden プラットフォームは、ウェブユーザーインターフェース、デスクトップアプリ、ブラウザ拡張、モバイルアプリ、コマンドラインインターフェースなど、さまざまなクライアントアプリケーションを提供しています。Bitwarden は商業的な自由ソフトウェアとして、開発会社がクラウドホスティングサービス (bitwarden.com) を提供し、広範なオープンソースコミュニティに自己ホスティングのソリューションを提供しています。
Vaultwarden は元々 Bitwarden_rs と呼ばれており、v2.21.0 から Vaultwarden に改名されました。Bitwarden の元のサーバーは C# で書かれており、デプロイが困難で、MSSQL などの商用ソフトウェアを要求し、実行には 2GB 以上のメモリが必要です。一方、Vaultwarden は Rust で書かれた非公式の Bitwarden サーバー実装で、公式の Bitwarden クライアントと互換性があり、Vaultwarden を実行する際にはわずか 10M のメモリしか必要なく、ハードウェアに対する要求はほとんどありません。公式のリソースを大量に消費する自己ホスティングデプロイを希望しない場合には、理想的な選択肢です。
Vaultwarden は公式のエンタープライズ版の一部機能(イベントログ、ディレクトリ同期、SSO ログインなど)をサポートしていない以外は、その他のほとんどの機能を無料でサポートしています。また、公式バージョンに合わせてタイムリーに更新されます。
Vaultwarden は Bitwarden API に必要なほとんどの機能を実装しているため、デスクトップ、モバイル、ブラウザ拡張などのクライアントは公式の Bitwarden クライアントアプリケーションを直接使用できます。
Vaultwarden リポジトリで推奨されるインストール方法は、Docker を使用して直接デプロイすることですが、この記事では非 Docker の方法で、システム上に Vaultwarden を直接デプロイする方法を紹介します。約 16MB のメモリ使用量で、MySQL をデフォルトの SQLite の代わりにデータストレージ形式として使用することで、「消費電力」を最小限に抑えることができます。
一、準備作業#
1.1 サーバーとシステムの選択#
Vaultwarden は実行時にほとんどシステムリソースを消費しないため、任意のモデルの軽量アプリケーションサーバーを選択できます。サーバーシステムは、Ubuntu 18.04 以降のバージョンや Debian 10 以降のバージョンの Linux ディストリビューションを選択することをお勧めします。CentOS を使用すると、依存ソフトウェアパッケージのバージョンの問題により、未知のエラーが発生する可能性があります。
また、Vaultwarden のデプロイは既存のシステム環境に破壊的な影響を与えないため、すでにウェブサイトビジネスがあるサーバーに Vaultwarden をデプロイするのも良い選択です。
1.2 環境設定#
1.2.1 ソフトウェアパッケージと依存関係の設定#
次のコマンドを順に実行して、ソフトウェアパッケージ情報を更新し、必要なソフトウェアパッケージと開発ツールパッケージをインストールします:
apt update -y
apt install git nano curl wget htop pkg-config openssl libssl1.1 libssl-dev -y
apt install build-essential -y
1.2.2 Rust 環境設定#
curl https://sh.rustup.rs -sSf | sh
を実行して Rust 環境を設定します。(国内では遅くなる可能性があります)
Rust is installed now. Great! と表示されれば、インストールが完了したことを示します。
次のコマンドを順に実行して cargo
コマンドの環境変数を設定します:
echo 'export PATH=~/.cargo/bin:$PATH' >> ~/.bashrc
export PATH=~/.cargo/bin:$PATH
which rustc
/root/.cargo/bin/rustc
と返されれば、Rust 環境の設定が完了したことを示します。
二、Vaultwarden のコンパイル#
git clone https://github.com/dani-garcia/vaultwarden && cd vaultwarden
を実行して Vaultwarden リポジトリを取得します(国内では遅くなる可能性があります):
cargo clean && cargo build --features mysql --release
を実行して Vaultwarden のコンパイルを開始します。
ここで、mysql
は sqlite
と postgresql
のいずれかの組み合わせであり、mysql
または postgresql
をコンパイルする場合、システムに MySQL または PostgreSQL がインストールされている必要があります。そうでない場合は、次のようなエラーメッセージが表示されます:
linking with `cc` failed: exit status: 1
...
= note: /usr/bin/ld: cannot find -lmysqlclient
collect2: error: ld returned 1 exit status
MySQL をインストールしたくない場合は、Rust 言語用の Client ライブラリ(Ubuntu または Debian 限定)をインストールすることができます:
apt install librust-mysqlclient-sys-dev -y
コンパイルには約 3GB のメモリが必要で、メモリが不足している場合は仮想メモリを調整することをお勧めします。仮想メモリは約 2GB の空きがあることが推奨されます。コンパイルには時間がかかり、LemonBench のスコアが 800 前後のシングルコアサーバーでのコンパイル時間は 28 分 54 秒です。
三、Vaultwarden のインストール#
3.1 Vaultwarden バイナリファイルの移動#
次のコマンドを順に実行します:
cp target/release/vaultwarden /usr/bin/vaultwarden
chmod +x /usr/bin/vaultwarden
これにより、Vaultwarden バイナリファイルがシステムの実行可能ディレクトリに配置され、実行権限が付与されます。
3.2 Vaultwarden 専用ユーザーの設定#
次のコマンドを順に実行します:
useradd -s /sbin/nologin -M vaultwarden
mkdir -p /var/lib/vaultwarden/data
chown -R vaultwarden:vaultwarden /var/lib/vaultwarden/
3.3 Vaultwarden Web UI のデプロイ#
次のコマンドを順に実行します:
wget https://github.com/dani-garcia/bw_web_builds/releases/download/v2.28.0/bw_web_v2.28.0.tar.gz
tar -xf bw_web_v2.28.0.tar.gz -C /var/lib/vaultwarden/
ここで v2.28.0
は執筆時のバージョン番号で、取得先は https://github.com/dani-garcia/bw_web_builds/releases/latest ですので、最新のものを保持してください。
3.4 Vaultwarden 設定ファイルの作成#
touch /etc/vaultwarden.env
を実行し、以下の内容を書き込みます:
DATA_FOLDER=/var/lib/vaultwarden/data/
DATABASE_URL=mysql://[データベースユーザー名]:[データベースパスワード]@127.0.0.1:3306/[データベース名]
IP_HEADER=X-Real-IP
WEB_VAULT_FOLDER=/var/lib/vaultwarden/web-vault/
WEB_VAULT_ENABLED=true
ADMIN_TOKEN=[base64コード]
DOMAIN=https://vaultwarden.iks.moe
ここで、[データベースユーザー名]
は MySQL データベースのユーザー名、[データベースパスワード]
は MySQL データベースユーザーのパスワード、[データベース名]
は MySQL データベース名で、これらは事前に作成しておく必要があります。127.0.0.1
は localhost
としては記入しないでください。[base64コード]
は openssl rand -base64 48
を実行して得られ、https://vaultwarden.iks.moe
はあなたのドメインで、プロトコルヘッダーは必ず https://
である必要があります。
3.5 Vaultwarden SystemD ファイルの作成#
touch /etc/systemd/system/vaultwarden.service
を実行し、以下の内容を書き込みます:
[Unit]
Description=Vaultwarden Server
Documentation=https://github.com/dani-garcia/vaultwarden
# SQLite を使用する場合は、次の行のコメントを解除してください
# After=network.target
# MariaDB を使用する場合は、次の 2 行のコメントを解除してください
# After=network.target mariadb.service
# Requires=mariadb.service
# MySQL を使用する場合は、次の 2 行のコメントを解除してください
# After=network.target mysqld.service
# Requires=mysqld.service
# PostgreSQL を使用する場合は、次の 2 行のコメントを解除してください
# After=network.target postgresql.service
# Requires=postgresql.service
[Service]
User=vaultwarden
Group=vaultwarden
EnvironmentFile=/etc/vaultwarden.env
ExecStart=/usr/bin/vaultwarden
LimitNOFILE=1048576
LimitNPROC=64
PrivateTmp=true
PrivateDevices=true
ProtectHome=true
ProtectSystem=strict
WorkingDirectory=/var/lib/vaultwarden
ReadWriteDirectories=/var/lib/vaultwarden
AmbientCapabilities=CAP_NET_BIND_SERVICE
[Install]
WantedBy=multi-user.target
コメントアウトされた行を削除し、最終的な設定を行います。
3.6 Vaultwarden の起動#
次のコマンドを順に実行します:
systemctl enable --now vaultwarden.service
systemctl start vaultwarden.service
systemctl status vaultwarden.service
正常に起動すれば、次のようなメッセージが表示されます:
四、Nginx で Vaultwarden をリバースプロキシする#
この記事では宝塔パネルを例にしますが、他の環境でも同様の操作が可能です。
4.1 新しいサイトの作成#
新しいサイトを作成し、ドメインにはステップ 3.4 でのドメインを記入し、SSL 証明書を設定します。
4.2 リバースプロキシの設定#
名前は任意で、ターゲット URL は http://127.0.0.1:8000
、他はデフォルトのままにします。
宝塔ユーザー以外の nginx リバースプロキシ設定:
location /
{
proxy_pass http://127.0.0.1:8000;
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 REMOTE-HOST $remote_addr;
add_header Cache-Control no-cache;
}
五、使用方法#
ドメインにアクセスし、Create Account をクリックしてパスワード管理の第一歩を開始します。
六、Vaultwarden の今後の更新#
ステップ二、ステップ 3.1、3.3 を再実行し、systemctl restart vaultwarden.service
を実行すれば完了です。
参考文献#
https://nickhuber.ca/blog/bitwarden-rs-without-docker
https://gist.github.com/tavinus/59c314f4ccd70879db7f11074eacb6cc****