Démarrer avec Docker Compose
Le dépôt livre une stack Compose sous deploy/compose/ : un déploiement nœud unique durci
(SQLite embarqué, zéro dépendance externe) plus deux overlays — un override Postgres
multi-tenant et un profil de sauvegarde de reprise après sinistre. Ce tutoriel vous
mène de up -d à un control plane configuré avec des sauvegardes.
Le conteneur enveloppe le même binaire unique que toute autre installation ; seul
l’emballage diffère. Les commandes ci-dessous sont les points d’entrée documentés de la
stack elle-même (deploy/compose/*.yml), et le flux de premier démarrage qu’elles pilotent
est le même que celui vérifié de bout en bout contre le binaire dans le
tutoriel nœud unique.
1. Démarrer la stack nœud unique (SQLite)
Section intitulée « 1. Démarrer la stack nœud unique (SQLite) »-
Démarrez-la :
Si AppArmor contrôle la création des espaces de noms utilisateur, suis « Session confinement on AppArmor hosts » dans
deploy/compose/README.mdsur l’hôte du daemon Docker avant de démarrer la pile.Fenêtre de terminal docker compose -f deploy/compose/docker-compose.yml up --wait --wait-timeout 120Ce que vous obtenez, par conception :
Propriété Valeur Ports 8443(HTTPS : REST + interface web),8444(gRPC) — publiés sur toutes les interfaces de l’hôte, car c’est un serveur. MettezOLIVARES_BIND=127.0.0.1dans.envpour les restreindre à l’hôteDonnées volume nommé olivares-data→/var/lib/olivares(store SQLite, clé de signature d’audit, matériel TLS)Durcissement tourne en 65532:65532, racine en lecture seule, toutes les capabilities supprimées,no-new-privileges, tmpfs/tmpHealthcheck exécution directe de la commande intégrée olivares readyz— sans shell, curl ni wget. Seul un HTTP 200 de/readyzlocal est sain -
Demandez au moteur où il est, et lisez le jeton de configuration à usage unique depuis les journaux :
Fenêtre de terminal # 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' -
Créez le premier administrateur, connectez-vous, et créez votre organisation — exactement comme dans le tutoriel nœud unique (l’API est la même ; le certificat TLS est auto-signé au premier démarrage, donc
curl -kpour le bootstrap) :Fenêtre de terminal 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. Câbler les sources
Section intitulée « 2. Câbler les sources »Les sources sont déclarées dans un seul fichier opérateur nommé par
OLIVARES_SOURCES_CONFIG (connecter une source). Pour le
conteneur, montez le fichier et définissez la variable avec un petit override :
# 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"Rappelez-vous que les chemins à l’intérieur de sources.json sont des chemins
conteneur — une traînée de journal pgAudit, par exemple, nécessite que le répertoire de
journaux Postgres soit monté en lecture seule dans le conteneur également.
3. Sauvegardes DR chiffrées (le profil backup)
Section intitulée « 3. Sauvegardes DR chiffrées (le profil backup) »La stack livre un service de sauvegarde one-shot qui produit un bundle chiffré et sûr pour
la continuité du ledger (olivares dr backup) :
Conservez la phrase secrète dans un fichier privé hors du dépôt et de l’image,
et gardez une copie en lieu sûr hors de cet hôte : sans elle, aucun bundle ne
peut être restauré. Donnez au conteneur de sauvegarde un accès en lecture seule
à ce fichier (l’image s’exécute avec l’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:roYAMLEnveloppez cette commande dans un cron de l’hôte pour un RPO planifié, et mettez en miroir
le volume olivares-backups hors site — une sauvegarde sur le même hôte n’est pas une
reprise après sinistre, et la passphrase doit voyager séparément des bundles (3-2-1). La
procédure complète, y compris l’exercice de restauration (olivares dr verify), est dans
sauvegarde & restauration.
4. Optionnel : l’override Postgres multi-tenant
Section intitulée « 4. Optionnel : l’override Postgres multi-tenant »Pour la topologie multi-tenant, superposez l’override Postgres. Il démarre un Postgres 16,
provisionne le rôle olivares_app à moindre privilège (pas de superuser, pas de
BYPASSRLS — le moteur refuse de démarrer contre un rôle privilégié, car la sécurité au
niveau ligne est le filet de sécurité du tenant), et y pointe le moteur :
L’override provisionne aussi olivares_admin, un rôle distinct
NOSUPERUSER BYPASSRLS avec un accès en lecture seule aux tables du moteur.
Le moteur l’utilise via --admin-dsn pour les lectures entre locataires,
y compris lors de la configuration initiale.
Définissez d’abord trois mots de passe distincts, en utilisant uniquement
A-Z a-z 0-9 . _ ~ - pour cette démo Compose, puis montez la stack :
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Étapes suivantes
Section intitulée « Étapes suivantes »- Câbler de vrais signaux : les guides de connecteurs.
- Planifier et exercer les sauvegardes : sauvegarde & restauration.
- Le superviser : métriques Prometheus, SLO et alertes.
- Passer en multi-nœuds ? Kubernetes avec Helm, y compris la HA et le DaemonSet des collecteurs.