シングルノードで始める (バイナリ + systemd)
これは本番に近い形での最初のインストールです。1 台の Linux ホスト、1 つの静的 バイナリ、systemd、組み込みの SQLite ストア — そして実際の初回実行経路 (ワンタイムセットアップトークン、デフォルトで TLS 有効、デフォルト認証情報なし、 デモデータなし)です。これを終えると、実際のソースを接続し、アクセスグラフが 投入された状態で、Olivares AI がハードニングされたサービスとして稼働します。
これはクイックスタートが 5 分でデモするのと同じエンジンです。 違いは姿勢です。まず即座に見て回りたい場合は、クイックスタートを実行してから、 実際のインストールのためにここに戻ってきてください。
このページ上のすべてのコマンドは、記載どおりに現在のバイナリに対して実行されました
(初回起動バナー、トークン回復経路、pgAudit の接続、以下のグラフは
scripts/quickstart-smoke.sh によって実行され、このガイドのために再検証されています)。
- systemd と
curlを備えた Linux ホスト。 - バイナリをビルドするための Go 1.26+(ストアは純粋 Go の SQLite なので、 C ツールチェーンは不要)。署名済みのビルド済みアーティファクトを伴うリリースは 最初の一般公開リリースで提供されます — それまではチェックアウトからビルドし、 リリースの検証が、それらが存在するようになったら 使うチェーンを記載しています。
1. バイナリをビルドしてインストールする
Section titled “1. バイナリをビルドしてインストールする”-
1 つの静的アーティファクト(エンジン + 組み込み web UI + ファーストパーティ コネクタ)をビルドします:
Terminal window task build # produces ./bin/olivares./bin/olivares version -
それをインストールし、サービスユーザーを作成します:
Terminal window sudo install -m 0755 bin/olivares /usr/local/bin/olivaressudo useradd --system --home /var/lib/olivares --shell /usr/sbin/nologin olivares
2. ハードニングされた systemd サービスとして実行する
Section titled “2. ハードニングされた systemd サービスとして実行する”/etc/systemd/system/olivares.service を作成します:
[Unit]Description=Olivares AI — self-hosted engine for enterprise AIDocumentation=https://olivares.ai/docsAfter=network-online.targetWants=network-online.target
[Service]Type=simpleUser=olivaresGroup=olivaresExecStart=/usr/local/bin/olivares serve \ --listen 127.0.0.1:8443 \ --grpc-listen 127.0.0.1:8444 \ --data-dir /var/lib/olivaresRestart=on-failureRestartSec=5
# The data directory holds the SQLite store, the audit signing key and the TLS# material. StateDirectory creates /var/lib/olivares owned by the service user.StateDirectory=olivaresStateDirectoryMode=0700UMask=0077
# Hardening (mirrors the container posture: non-root, read-only, no escalation)NoNewPrivileges=trueProtectSystem=strictProtectHome=truePrivateTmp=truePrivateDevices=trueProtectKernelTunables=trueProtectKernelModules=trueProtectControlGroups=trueRestrictSUIDSGID=trueRestrictRealtime=trueLockPersonality=trueMemoryDenyWriteExecute=trueSystemCallArchitectures=nativeCapabilityBoundingSet=AmbientCapabilities=ReadWritePaths=/var/lib/olivares
[Install]WantedBy=multi-user.targetsudo systemctl daemon-reloadsudo systemctl enable --now olivaresエンジンはデフォルトで ループバック にバインドします — 127.0.0.1:8443 は
意図的なものです。後で、独自のイングレスと TLS の背後に、明示的な決定として公開して
ください(ハードニングを参照)。
3. ワンタイムセットアップトークンを取得する
Section titled “3. ワンタイムセットアップトークンを取得する”新規インストールには デフォルト認証情報がありません。初回起動時、エンジンは
使い捨てのセットアップトークン(olst_…)を生成し、それを stdout のみ に
出力します — systemd の下では、それは journal です:
journalctl -u olivares -o cat | sed -n '/FIRST-BOOT SETUP/,/========================/p'=== FIRST-BOOT SETUP ===No accounts exist yet. Open the console and create the first administratorwith this one-time token — setup also creates your first organization andmakes that administrator its owner:
Console: https://127.0.0.1:8443 Token: olst_…
The console serves HTTPS with a self-signed certificate on first boot — yourbrowser will warn once; that is expected. The token is shown ONCE and issingle-use. Prefer the API? POST /v1/setup {"token":"…","email":"…","password":"…"} — add "organization":"…" to name it (default: "DefaultOrganization"). The reply carries the new organization's tenant_id.========================最初の管理者を作成してログインします:
SETUP="olst_…" # from the banner above
curl -ksf -X POST https://127.0.0.1:8443/v1/setup \ -H 'Content-Type: application/json' \ -d "{\"token\":\"$SETUP\",\"email\":\"you@example.com\",\"password\":\"<strong-password>\"}"
TOKEN="$(curl -ksf -X POST https://127.0.0.1:8443/v1/auth/login \ -H 'Content-Type: application/json' \ -d '{"email":"you@example.com","password":"<strong-password>"}' \ | python3 -c 'import sys,json;print(json.load(sys.stdin)["token"])')"4. 最初の組織を作成する
Section titled “4. 最初の組織を作成する”製品内のすべてはテナントスコープなので、ソースが報告先とする組織を作成します:
TENANT="$(curl -ksf -X POST https://127.0.0.1:8443/v1/system/orgs \ -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \ -d '{"name":"Production","slug":"prod"}' \ | python3 -c 'import sys,json;print(json.load(sys.stdin)["tenant_id"])')"echo "tenant: $TENANT"5. 最初の実際のソースを接続する
Section titled “5. 最初の実際のソースを接続する”ソースは OLIVARES_SOURCES_CONFIG で名前を指定された、オペレーター所有の 1 つの
JSON ファイルで宣言され、エンジンが起動する前に読み込まれます。以下は PostgreSQL の
pgAudit ソース(クリーンティアの R/RW シグナル — Postgres 側のセットアップは
pgAudit ガイドを参照)です:
sudo tee /etc/olivares/sources.json >/dev/null <<JSON{"sources":[{ "name": "salesdb-pgaudit", "kind": "pgaudit", "tenant": "$TENANT", "config": { "log_path": "/var/log/postgresql/postgresql.csv", "format": "csvlog" }}]}JSONsudo chmod 0600 /etc/olivares/sources.json && sudo chown olivares: /etc/olivares/sources.jsondrop-in でサービスをそこに向け、再起動します:
sudo systemctl edit olivares[Service]Environment=OLIVARES_SOURCES_CONFIG=/etc/olivares/sources.jsonReadOnlyPaths=/etc/olivaressudo systemctl restart olivaresjournalctl -u olivares -o cat | grep "ingest: wired source"ingest: wired source (in-process fast-path) name=salesdb-pgaudit kind=pgaudit何も接続されていない場合、エンジンは空のマップ上で健全に見せかけるのではなく、 正直にそう述べます — 正確な警告とそれぞれの意味については トラブルシューティングを参照してください。
6. グラフに到達する
Section titled “6. グラフに到達する”curl -ksf "https://127.0.0.1:8443/v1/m/accessmap/graph?limit=200" \ -H "Authorization: Bearer $TOKEN" -H "X-Olivares-Tenant: $TENANT" | python3 -m json.tool
curl -ksf "https://127.0.0.1:8443/v1/m/accessmap/drift" \ -H "Authorization: Bearer $TOKEN" -H "X-Olivares-Tenant: $TENANT" | python3 -m json.tool同じグラフは https://127.0.0.1:8443 の組み込み web UI でレンダリングされます
(ワークステーションからはトンネルします: ssh -L 8443:127.0.0.1:8443 <host>)。
7. 完了とみなす前に
Section titled “7. 完了とみなす前に”データディレクトリ内の 2 つのアーティファクトが、インシデントを越えて証拠が 生き残るかどうかを決定します — それらに 今すぐ 対処してください、後でではなく:
| アーティファクト | なぜ重要か | アクション |
|---|---|---|
| audit-signing.key | 追記専用の監査台帳に署名する。失われると、台帳は再検証できなくなる。エンジンは初回起動時に 警告 するのみ — 強制されたエスクローはない。 | 今日、0600 権限でボックス外にバックアップする。 |
| 台帳の公開鍵 | 公開鍵の ボックス外 のコピーこそが、ホスト侵害後に検証を攻撃者耐性のあるものにする。 | curl -ksf https://127.0.0.1:8443/v1/audit/pubkey を実行し、結果をボックス外に保管する。 |
その後、実際のバックアップをスケジュールします — olivares dr backup は暗号化され、
台帳の連続性が保たれるバンドルを生成します。
バックアップとリストアガイドが、リストア訓練を含む
完全な手順です。
ヘルスとモニタリング
Section titled “ヘルスとモニタリング”エンジンは HTTP リスナー上に /livez(プロセス稼働)、/readyz(ストア到達可能 —
これが可用性 SLI)、/metrics(Prometheus)を公開します:
curl -ks https://127.0.0.1:8443/readyz# {"leader":true,"setup_required":false,"status":"ok","store":"up"}メトリックセット、SLO ターゲット、同梱のアラートルールについては Prometheus でモニタリングを参照してください。
次のステップ
Section titled “次のステップ”- さらにシグナルを接続する: コネクタガイド — pgAudit、CloudTrail、Claude Code、eBPF、そしてカタログの残り。
- デプロイをハードニングする: セキュリティハードニング — 公開、collectors の mTLS、承認。
- ガバナンス: ガバナンスと承認 — RBAC、 ポリシー、そして記録された意思決定の保証。