注: この記事は Simple 5-minute MySQL Vaultwarden setup using docker-compose のバリアントで、ポートを直接公開する代わりに Traefik をリバースプロキシ(自動 TLS 証明書)として使う構成に適応させたもの。
Vaultwarden を Traefik 背後の docker-compose & MySQL(MariaDB)ベース構成でセットアップするには、まずディレクトリを作成する。/opt/vaultwarden を推奨。
以下のコマンドはすべて /opt/vaultwarden ディレクトリ内で実行し、ファイルもそこに置くこと!
まず、ランダムパスワードを持つ .env ファイルを作成する(pwgen 30 の使用を推奨)。ここで一意のランダムパスワードを使わないのは重大なセキュリティリスク——Vaultwarden への完全な admin アクセスを許すことになる!
ADMIN_TOKEN=iqueingufo3LohshoohoG3tha2zou6
MARIADB_PASSWORD=ahhoogie7eequ0Ierooth5xeenoo
MARIADB_ROOT_PASSWORD=eih2ahSahthahhohdeefeix5eeph次に docker-compose.yml を置く:
services:
mariadb:
image: mariadb:latest
environment:
- MYSQL_DATABASE=vaultwarden
- MYSQL_USER=vaultwarden
- MYSQL_PASSWORD=${MARIADB_PASSWORD}
- MYSQL_ROOT_PASSWORD=${MARIADB_ROOT_PASSWORD}
- MARIADB_AUTO_UPGRADE=1
volumes:
- ./mariadb_data:/var/lib/mysql
command: --default-storage-engine innodb
restart: unless-stopped
healthcheck:
test: ["CMD", "mariadb", "-u", "root", "--password=${MARIADB_ROOT_PASSWORD}", "-e", "SELECT 1;"]
interval: 1s
timeout: 5s
retries: 300
start_period: 5s
vaultwarden:
image: vaultwarden/server:latest
depends_on:
mariadb:
condition: service_healthy
restart: unless-stopped
environment:
- ADMIN_TOKEN=${ADMIN_TOKEN}
- DATABASE_URL=mysql://vaultwarden:${MARIADB_PASSWORD}@mariadb/vaultwarden
- WEBSOCKET_ENABLED=true
volumes:
- ./vw_data:/data
labels:
- "traefik.enable=true"
- "traefik.http.routers.vaultwarden.rule=Host(`vaultwarden.mydomain.com`)"
- "traefik.http.routers.vaultwarden.entrypoints=websecure"
- "traefik.http.routers.vaultwarden.tls.certresolver=myresolver"
- "traefik.http.routers.vaultwarden.tls.domains[0].main=mydomain.com"
- "traefik.http.routers.vaultwarden.tls.domains[0].sans=*.mydomain.com"ラベル内の vaultwarden.mydomain.com、mydomain.com、myresolver、およびルータ名 vaultwarden を自分のドメイン、証明書リゾルバ、ルータ名に置き換える。
vaultwarden サービスはポートを公開しない点に注意——Traefik が Host() ルールに基づいてトラフィックをルーティングする。これには Traefik と Vaultwarden の両方が共通の docker ネットワークに接続されている必要がある。Traefik が別の docker-compose プロジェクトで動く場合、vaultwarden サービスに外部ネットワークを追加、例:
vaultwarden:
networks:
- traefik
networks:
traefik:
external: true次に、docker-compose を自動起動する systemd サービスを作成する:
curl -fsSL https://techoverflow.net/scripts/create-docker-compose-service.sh | sudo bash /dev/stdinこれで vaultwarden が自動的に起動する。
Traefik が TLS 終端を処理するため、Vaultwarden はすぐに https://vaultwarden.mydomain.com で利用可能——別途リバースプロキシ設定は不要。https を使う必要がある(ブラウザの制限により http では動作しない)。
次に admin インターフェースで vaultwarden を設定する。
https://vaultwarden.mydomain.com/admin にアクセスし、.env の ADMIN_TOKEN を入力。
ここで設定が必要なものは2つ:
- General settings 内の Domain Name
- SMTP email settings 内のメールサーバ設定
これらの設定が完了すれば、Vaultwarden は起動して https://vaultwarden.mydomain.com でアクセスできるはず。
最初のユーザをセットアップしてテストした後、admin インターフェースの General settings で Allow new signups のチェックを外せる。ドメイン名を推測できる人なら誰でも Vaultwarden アカウントを作成できてしまうため、これを推奨する。