Démarrer sur un nœud unique (binaire + systemd)
Ceci est la première installation de forme production : un hôte Linux, un binaire statique, systemd, le store SQLite embarqué — et le vrai chemin de premier lancement (un jeton de configuration à usage unique, TLS activé par défaut, aucun identifiant par défaut, aucune donnée de démonstration). À la fin, vous aurez Olivares AI fonctionnant comme un service durci avec une source réelle câblée et un graphe d’accès peuplé.
C’est le même moteur que le quickstart démontre en cinq minutes ; la différence est la posture. Si vous voulez d’abord le coup d’œil instantané, faites le quickstart, puis revenez ici pour la vraie installation.
Prérequis
Section intitulée « Prérequis »- Un hôte Linux avec systemd et
curl. - Go 1.26+. Build this tutorial from source; Olivares
0.4is the next release, not yet published.
1. Compiler et installer le binaire
Section intitulée « 1. Compiler et installer le binaire »-
Compilez l’artefact statique unique (moteur + UI web embarquée + connecteurs first-party) :
Fenêtre de terminal task build # produces ./bin/olivares./bin/olivares version -
Installez-le et créez l’utilisateur du service :
Fenêtre de terminal sudo install -m 0755 bin/olivares /usr/local/bin/olivaressudo useradd --system --home /var/lib/olivares --shell /usr/sbin/nologin olivares
2. L’exécuter comme un service systemd durci
Section intitulée « 2. L’exécuter comme un service systemd durci »Créez /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 olivaresLe moteur se lie à toutes les interfaces par défaut (:8443) : c’est un serveur.
La commande ci-dessus passe --listen 127.0.0.1:8443 pour restreindre l’installation de
ce tutoriel à l’hôte sur lequel vous êtes, ce qui est une décision explicite — retirez ces
deux drapeaux pour que la console réponde depuis le réseau, et placez alors devant votre
propre ingress et votre TLS (voir durcissement).
3. Réclamer le jeton de configuration à usage unique
Section intitulée « 3. Réclamer le jeton de configuration à usage unique »Une installation neuve n’a aucun identifiant par défaut. Au premier démarrage le moteur frappe
un jeton de configuration à usage unique (olst_…) et l’imprime sur stdout uniquement — sous
systemd, c’est le 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.
Passkeys will not work at that address:a browser will not run a passkey ceremony at an IP address. Reach theconsole by a host name.On this machine the same console also answers at https://localhost:8443and at that address the relying party is derived from the name, which theverifier accepts.
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.========================Créez le premier administrateur et connectez-vous :
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. Utiliser votre première organisation
Section intitulée « 4. Utiliser votre première organisation »La configuration initiale a déjà créé votre organisation. Tout dans le produit est à portée tenant ; récupérez son identifiant pour connecter vos sources :
TENANT="$(curl -ksf https://127.0.0.1:8443/v1/auth/whoami \ -H "Authorization: Bearer $TOKEN" \ | python3 -c 'import sys,json;print(json.load(sys.stdin)["grants"][0]["tenant"])')"echo "tenant: $TENANT"5. Câbler votre première source réelle
Section intitulée « 5. Câbler votre première source réelle »Les sources sont déclarées dans un seul fichier JSON détenu par l’opérateur, nommé par
OLIVARES_SOURCES_CONFIG, lu avant le démarrage du moteur. Voici la
source pgAudit PostgreSQL (le signal R/RW de palier propre — voir le
guide pgAudit pour la configuration côté Postgres) :
sudo mkdir -p /etc/olivaressudo 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.jsonPointez le service dessus avec un drop-in, et redémarrez :
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=pgauditSi rien n’est câblé, le moteur le dit honnêtement plutôt que de paraître sain sur une map vide — voir dépannage pour les avertissements exacts et ce que chacun signifie.
6. Atteindre le graphe
Section intitulée « 6. Atteindre le graphe »Sur une nouvelle installation, accessmap est désactivé. En tant
qu’administrateur, activez accessmap dans Settings > Edition & modules,
en conservant les autres modules sélectionnés. Pour la CLI, connectez-vous
d’abord à ce moteur en tant qu’administrateur avec olivares login, puis
exécutez olivares modules on accessmap. Attendez chaque redémarrage du moteur avant de continuer ;
les sessions en cours s’arrêtent et peuvent être reprises. Sinon, ces appels
API renvoient 404 module_not_enabled.
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.toolLe même graphe se rend dans l’UI web embarquée à https://127.0.0.1:8443
(depuis un poste de travail, tunnelisez-le : ssh -L 8443:127.0.0.1:8443 <host>).
7. Avant de considérer que c’est terminé
Section intitulée « 7. Avant de considérer que c’est terminé »Deux artefacts du répertoire de données décident si vos preuves survivent à un incident — traitez-les maintenant, pas après :
| Artefact | Pourquoi c’est important | Action |
|---|---|---|
audit-signing.key |
Signe le ledger d’audit en ajout seul. S’il est perdu, le ledger ne peut plus être revérifié. Le moteur ne fait qu’avertir au premier démarrage — il n’y a pas de séquestre imposé. | Sauvegardez-le hors de la machine, avec des permissions 0600, aujourd’hui. |
| La clé publique du ledger | Une copie hors machine de la clé publique est ce qui rend la vérification résistante aux attaquants après une compromission de l’hôte. | curl -ksf https://127.0.0.1:8443/v1/audit/pubkey et stockez le résultat hors de la machine. |
Puis planifiez de vraies sauvegardes — olivares dr backup produit un bundle chiffré,
sûr pour la continuité du ledger ; le guide de sauvegarde et restauration
est la procédure complète, y compris l’exercice de restauration.
Santé et surveillance
Section intitulée « Santé et surveillance »Le moteur expose /livez (processus actif), /readyz (store joignable — c’est
le SLI de disponibilité) et /metrics (Prometheus) sur le listener HTTP :
curl -ks https://127.0.0.1:8443/readyz# {"leader":true,"setup_required":false,"status":"ok","store":"up"}Voir surveiller avec Prometheus pour l’ensemble de métriques, les cibles SLO et les règles d’alerte fournies.
Étapes suivantes
Section intitulée « Étapes suivantes »- Connectez plus de signaux : les guides de connecteurs — pgAudit, CloudTrail, Claude Code, eBPF, et le reste du catalogue.
- Durcissez le déploiement : durcissement de la sécurité — exposition, mTLS pour les collecteurs, approbations.
- Gouvernez : gouverner et approuver — RBAC, politiques, et la garantie de décisions enregistrées.