コンテンツにスキップ

Docker Compose で始める

リポジトリは deploy/compose/ 配下に Compose スタックを同梱しています:堅牢化された シングルノードデプロイ(組み込み SQLite、外部依存ゼロ)に加え、2つのオーバーレイ — Postgres マルチテナントのオーバーライドと、ディザスタリカバリ バックアップの プロファイルです。このチュートリアルは、up -d からバックアップを備えた設定済みの control plane までを案内します。

コンテナは、他のすべてのインストールと同じ単一バイナリをラップします。異なるのは パッケージングだけです。以下のコマンドはスタック自身のドキュメント化されたエントリ ポイント(deploy/compose/*.yml)であり、それらが駆動する初回起動フローは、 シングルノードチュートリアルでバイナリに 対してエンドツーエンドで検証されたものと同じです。

1. シングルノードスタックを立ち上げる(SQLite)

Section titled “1. シングルノードスタックを立ち上げる(SQLite)”
  1. 起動します:

    AppArmor がユーザー名前空間の作成を制御するホストでは、スタックを起動する前に Docker デーモンのホストで deploy/compose/README.md の「Session confinement on AppArmor hosts」の手順を実行してください。

    ターミナルウィンドウ
    docker compose -f deploy/compose/docker-compose.yml up --wait --wait-timeout 120

    設計上、得られるもの:

    プロパティ 値
    ポート 8443(HTTPS:REST + web UI)、8444(gRPC) — すべてのホストインターフェースに公開。これはサーバーだからです。.env に OLIVARES_BIND=127.0.0.1 を設定するとホストだけに制限できます
    データ 名前付きボリューム olivares-data → /var/lib/olivares(SQLite ストア、audit 署名鍵、TLS 素材)
    堅牢化 65532:65532 として実行、read-only root、全 capability をドロップ、no-new-privileges、tmpfs /tmp
    ヘルスチェック 組み込みの olivares readyz を直接実行(shell、curl、wget は不要)。ローカル /readyz の HTTP 200 だけを正常とする
  2. エンジンに現在地を尋ね、ログからワンタイムのセットアップトークンを読み取ります:

    ターミナルウィンドウ
    # where the console answers, and whether setup is still pending. It runs the binary
    # directly and needs no shell.
    docker compose -f deploy/compose/docker-compose.yml exec olivares olivares first-boot
    # the one-time setup token, printed once at first boot
    docker compose -f deploy/compose/docker-compose.yml logs olivares \
    | sed -n '/FIRST-BOOT SETUP/,/========================/p'
  3. 最初の管理者を作成し、ログインし、組織を作成します — シングルノードチュートリアル とまったく同じです(API は同じ。TLS 証明書は初回起動時に自己署名されるため、 ブートストラップには curl -k を使います):

    ターミナルウィンドウ
    curl -ksf -X POST https://localhost:8443/v1/setup \
    -H 'Content-Type: application/json' \
    -d '{"token":"<olst_ token>","email":"you@example.com","password":"<strong-password>"}'

ソースは OLIVARES_SOURCES_CONFIG で名指しされる1つのオペレーターファイルで宣言します (ソースを接続する)。コンテナの場合、そのファイルをマウントし、 小さなオーバーライドで変数を設定します:

# deploy/compose/docker-compose.sources.yml (yours — not shipped)
services:
olivares:
environment:
OLIVARES_SOURCES_CONFIG: /etc/olivares/sources.json
volumes:
- ./sources.json:/etc/olivares/sources.json:ro
ターミナルウィンドウ
docker compose -f deploy/compose/docker-compose.yml \
-f deploy/compose/docker-compose.sources.yml up -d
docker compose -f deploy/compose/docker-compose.yml logs olivares | grep "ingest: wired source"

sources.json 内のパスはコンテナのパスであることを忘れないでください — 例えば pgAudit のログ末尾には、Postgres のログディレクトリもコンテナ内に read-only でマウント する必要があります。

3. 暗号化された DR バックアップ(backup プロファイル)

Section titled “3. 暗号化された DR バックアップ(backup プロファイル)”

スタックは、暗号化され、ledger の連続性を損なわないバンドル(olivares dr backup)を 生成するワンショットのバックアップサービスを同梱します:

パスフレーズはチェックアウトとイメージの外にある非公開ファイルに保管し、 このホストとは別の安全な場所にもコピーを保管してください。パスフレーズがなければ、 どのバンドルも復元できません。バックアップコンテナにはそのファイルへの読み取り専用アクセスを 与えてください(イメージは UID 65532 で実行されます):

ターミナルウィンドウ
sudo install -d -o 65532 -g 65532 -m 0700 /srv/olivares-dr
sudo install -o 65532 -g 65532 -m 0400 /path/to/private-passphrase /srv/olivares-dr/dr-pass
BACKUP_TS="$(date -u +%Y%m%dT%H%M%SZ)" \
docker compose -f deploy/compose/docker-compose.yml \
-f deploy/compose/docker-compose.backup.yml \
-f - --profile backup run --rm backup <<'YAML'
services:
backup:
volumes:
- /srv/olivares-dr/dr-pass:/run/secrets/dr-pass:ro
YAML

スケジュールされた RPO のために、そのコマンドをホストの cron でラップし、olivares-backups ボリュームをオフサイトにミラーしてください — 同一ホスト上のバックアップはディザスタ リカバリではなく、パスフレーズはバンドルとは別に運ばれなければなりません(3-2-1)。リストア ドリル(olivares dr verify)を含む完全な手順は、 バックアップとリストアにあります。

4. オプション:Postgres マルチテナントのオーバーライド

Section titled “4. オプション:Postgres マルチテナントのオーバーライド”

マルチテナントのトポロジーには、Postgres オーバーライドを重ねます。これは Postgres 16 を 立ち上げ、最小権限の olivares_app ロール(superuser なし、BYPASSRLS なし — row-level security がテナントのバックストップであるため、エンジンは特権ロールに対しては起動を 拒否します)をプロビジョニングし、エンジンをそれに向けます:

オーバーライドは olivares_admin もプロビジョニングします。この独立した NOSUPERUSER BYPASSRLS ロールは、エンジンのテーブルへの読み取り専用アクセスを持ちます。 エンジンは --admin-dsn を通じて、初回セットアップを含むテナント横断の読み取りに使用します。

まず3つの異なるパスワードを設定します。この Compose デモでは A-Z a-z 0-9 . _ ~ - のみを使用し、次にスタックを立ち上げます:

ターミナルウィンドウ
cp deploy/compose/.env.example deploy/compose/.env
# set three distinct passwords in deploy/compose/.env:
# POSTGRES_SUPERUSER_PASSWORD, OLIVARES_DB_PASSWORD, OLIVARES_ADMIN_PASSWORD
docker compose -f deploy/compose/docker-compose.yml \
-f deploy/compose/docker-compose.postgres.yml up -d
ターミナルウィンドウ
curl -ks https://localhost:8443/readyz
# {"leader":true,"setup_required":false,"status":"ok","store":"up"}
curl -ks https://localhost:8443/metrics | grep olivares_store_up