docker-compose を使った Traefik & MySQL による簡単5分 Vaultwarden セットアップ

注: この記事は 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 アクセスを許すことになる!

.env
ADMIN_TOKEN=iqueingufo3LohshoohoG3tha2zou6
MARIADB_PASSWORD=ahhoogie7eequ0Ierooth5xeenoo
MARIADB_ROOT_PASSWORD=eih2ahSahthahhohdeefeix5eeph

次に docker-compose.yml を置く:

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 サービスに外部ネットワークを追加、例:

docker-compose.yml
  vaultwarden:
    networks:
      - traefik

networks:
  traefik:
    external: true

次に、docker-compose を自動起動する systemd サービスを作成する:

create_vaultwarden_service.sh
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 アカウントを作成できてしまうため、これを推奨する。


同じカテゴリの類似記事をチェック: コンテナ Docker