コンテンツにスキップ

Docker Compose で始める

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

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

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

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

    Terminal window
    docker compose -f deploy/compose/docker-compose.yml up -d

    設計上、得られるもの:

    | プロパティ | 値 | |---|---| | ポート | 127.0.0.1:8443(HTTPS:REST + web UI)、127.0.0.1:8444(gRPC) — ホスト上の localhost にバインド。公開は意図的に | | データ | 名前付きボリューム olivares-data/var/lib/olivares(SQLite ストア、audit 署名鍵、TLS 素材) | | 堅牢化 | 65532:65532 として実行、read-only root、全 capability をドロップ、no-new-privileges、tmpfs /tmp | | ヘルスチェック | コンテナ内にはなし(イメージは distroless — シェルなし)。ホストから /livez/readyz をプローブする |

  2. ログからワンタイムのセットアップトークンを読み取ります:

    Terminal window
    docker compose -f deploy/compose/docker-compose.yml logs olivares \
    | sed -n '/FIRST-BOOT SETUP/,/========================/p'
  3. 最初の管理者を作成し、ログインし、組織を作成します — シングルノードチュートリアル とまったく同じです(API は同じ。TLS 証明書は初回起動時に自己署名されるため、 ブートストラップには curl -k を使います):

    Terminal window
    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
Terminal window
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)を 生成し、14日より古いバンドルをプルーニングするワンショットのバックアップサービスを同梱します:

Terminal window
# Write your KEK passphrase once (keep it OUT of the repo / image):
printf 'a strong DR passphrase' > deploy/compose/dr-pass
docker compose -f deploy/compose/docker-compose.yml \
-f deploy/compose/docker-compose.backup.yml \
--profile backup run --rm backup

スケジュールされた 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 がテナントのバックストップであるため、エンジンは特権ロールに対しては起動を 拒否します)をプロビジョニングし、エンジンをそれに向けます:

Terminal window
cp deploy/compose/.env.example deploy/compose/.env
# set POSTGRES_SUPERUSER_PASSWORD and OLIVARES_DB_PASSWORD in .env
docker compose -f deploy/compose/docker-compose.yml \
-f deploy/compose/docker-compose.postgres.yml up -d
Terminal window
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