Docker Compose で始める
リポジトリは deploy/compose/ 配下に Compose スタックを同梱しています:堅牢化された
シングルノードデプロイ(組み込み SQLite、外部依存ゼロ)に加え、2つのオーバーレイ —
Postgres マルチテナントのオーバーライドと、ディザスタリカバリ バックアップの
プロファイルです。このチュートリアルは、up -d からバックアップを備えた設定済みの
control plane までを案内します。
コンテナは、他のすべてのインストールと同じ単一バイナリをラップします。異なるのは
パッケージングだけです。以下のコマンドはスタック自身のドキュメント化されたエントリ
ポイント(deploy/compose/*.yml)であり、それらが駆動する初回起動フローは、
シングルノードチュートリアルでバイナリに
対してエンドツーエンドで検証されたものと同じです。
1. シングルノードスタックを立ち上げる(SQLite)
Section titled “1. シングルノードスタックを立ち上げる(SQLite)”-
起動します:
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 だけを正常とする -
エンジンに現在地を尋ね、ログからワンタイムのセットアップトークンを読み取ります:
ターミナルウィンドウ # 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 bootdocker compose -f deploy/compose/docker-compose.yml logs olivares \| sed -n '/FIRST-BOOT SETUP/,/========================/p' -
最初の管理者を作成し、ログインし、組織を作成します — シングルノードチュートリアル とまったく同じです(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>"}'
2. ソースを配線する
Section titled “2. ソースを配線する”ソースは 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:rodocker compose -f deploy/compose/docker-compose.yml \ -f deploy/compose/docker-compose.sources.yml up -ddocker 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-drsudo 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:roYAMLスケジュールされた 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 -dcurl -ks https://localhost:8443/readyz# {"leader":true,"setup_required":false,"status":"ok","store":"up"}curl -ks https://localhost:8443/metrics | grep olivares_store_up次のステップ
Section titled “次のステップ”- 実物のシグナルを配線する: コネクターガイド。
- バックアップをスケジュールしドリルする: バックアップとリストア。
- モニタリングする: Prometheus メトリクス、SLO、アラート。
- マルチノードへ? Helm での Kubernetes、 HA とコレクター DaemonSet を含む。