Aurora Nexus — Assistant d'installation
(depuis `INSTALL_WIZARD.md`)
Ce guide décrit l'usage du wizard CLI (ops/install_wizard.py) qui industrialise la mise en service d'Aurora Nexus sur une machine Ubuntu 22+ équipée de Docker 24+.
Démarrage sur un serveur (ordre recommandé)
Sur un serveur neuf, commencez par cloner le repo, puis lancez le wizard depuis ce dossier :
mkdir -p ~/Apps
cd ~/Apps
git clone https://github.com/syl2042/Aurora-Nexus.git Nexus
cd ~/Apps/Nexus
pip install -r ops/requirements.txt
python3 ops/install_wizard.py run1. Prérequis
Voir docs/02_Installation/02-PreRequis.md pour la liste complète (logiciels, ports, domaine, clés API).
Le wizard vérifie automatiquement les ports et vous propose des valeurs par défaut si besoin.
Installer les dépendances wizard :
pip install -r ops/requirements.txtSi vous lancez le wizard sans dépendances, il proposera de les installer automatiquement.
2. Lancer le wizard
python3 ops/install_wizard.py runMode rapide (garde ports & Docling par défaut) :
python3 ops/install_wizard.py run --fastÉtapes effectuées :
- Préflight (version Python,
docker/docker compose, ports libres). - Prompts interactifs (domaine, email admin, ports, secrets Postgres/MinIO, clés API…).
- Nom de domaine : hostname brut (
nexus.votredomaine.tld) utilisé côté infra. - URL publique : version complète avec protocole (
https://nexus.votredomaine.tld) utilisée dans les liens et callbacks. - URLs dérivées : le wizard propose automatiquement
console-minio.<domaine>,PUBLIC_UPLOAD_BASE_URL(ex:https://<domaine>/minio) et, si souhaité,qdrant.<domaine>. - Pour chaque URL avec un sous‑domaine distinct, il demande de confirmer la création de l’entrée DNS A correspondante.
- Aurora Scraper (optionnel) : le wizard demande si Scraper est installé. Si oui, il demande son URL (stockée dans
NEXT_PUBLIC_AURORA_SCRAPER_URL) pour afficher un bouton “Ouvrir Scraper” dans l’UI Nexus. - JWT dans le body : option “extensions/bots non-web” (si
RETURN_JWT_IN_BODY=true). - OpenRouter runtime obligatoire.
- OpenAI embeddings obligatoire.
- OpenRouter Usage : optionnel (laisser vide si non utilisé).
- FreeCurrency obligatoire pour la conversion $/€.
- Qdrant hybride : recommandé (par défaut). Si désactivé,
QDRANT_DENSE_VECTOR_NAMEest vidé. Changer ce choix après ingestion impose une recréation Qdrant + ré‑ingestion. - Mot de passe admin (seed) : si laissé vide, le wizard génère un mot de passe et l’écrit dans
nexus.env.full. - Mode
--from-file: pensez à fourniradmin_default_passwordsi vous voulez un mot de passe spécifique (sinon il est généré). - Les questions ports et Docling peuvent rester sur les valeurs par défaut (modifiables ensuite via l’UI d’admin).
- Si
dockerrenvoie “permission denied”, le wizard propose de relancer les commandes docker ensudo. Alternative : ajouter l’utilisateur au groupe docker puis relancer (sudo usermod -aG docker $USER+ logout/login).
- Nom de domaine : hostname brut (
- Génération d’un fichier
.envdans un dossier de run (par défautops/wizard_runs/_runs/<timestamp>/.env), sans toucher au.envracine.- Le wizard écrit toutes les variables listées dans
.env.example(logs, rétention, GC Qdrant, auth, etc.). - Si tu laisses un champ vide, il injecte la valeur par défaut (ou un secret généré aléatoirement pour JWT/DB/MinIO/Gateway/Fernet).
- Pour écrire explicitement à la racine, fournir
--env-path .env(⚠️ à éviter sur un environnement déjà en service). - Production : conserver le
.envhors repo (ex./etc/aurora/prod.env,chmod 600) et démarrer avecdocker compose --env-file /etc/aurora/prod.env up -d(le fichier doit contenirAURORA_ENV_FILE=/etc/aurora/prod.env). - Le wizard génère aussi un fichier complet avec secrets visibles à la racine (
nexus.env.full) et demande de le copier dans un endroit sûr.- Si
nexus.env.fullcontient encorechange-me-now, c’est que la valeur n’a pas été fournie/générée au moment du wizard : la source de vérité est alors/etc/aurora/nexus.env. - Vérification rapide (sur le serveur) :
sudo rg '^(ADMIN_EMAIL|ADMIN_DEFAULT_PASSWORD|POSTGRES_USER|POSTGRES_PASSWORD)=' /etc/aurora/nexus.env
- Si
- Le wizard peut écrire une copie de production (par défaut
/etc/aurora/nexus.env) avec le bonAURORA_ENV_FILE.
- Le wizard écrit toutes les variables listées dans
- Création du réseau Docker
sylio_defaultsi absent (utile si un reverse-proxy/stack adjacente est jointe à ce réseau). docker compose up -d --build+ attente des services (barre de progression Rich).- Le wizard lance
docker composeavec--env-file <env_path>et injecte aussiAURORA_ENV_FILE=<env_path>pour que les services lisent le bon env.
- Le wizard lance
- Bootstrap DB uniquement si Postgres est local (
POSTGRES_HOST=postgres) :- exécution de
ops/init_db.sh - si
ops/seed/current.sqlest présent et non vide, il est appliqué (seed des prompts/services/workspaces/paramètres actuels). - vérification automatique : toutes migrations + présence de
ASSISTANT_CORE(sinon le wizard échoue). - si Postgres est externe (OVH), aucun bootstrap/migration automatique.
- guide DB externe :
docs/02_Installation/06-Postgres-Externe.md.
- exécution de
- Init MinIO : buckets créés via le service one-shot
minio-init(idempotent). - Healthcheck HTTP (
/api/health). - Rapport final (URLs, ports, identifiants masqués) + log JSON lines dans
ops/logs/install_wizard_<timestamp>.jsonl. - Génération d’un snippet Caddyfile (
caddy.snippetdans le dossier de run) + proposition d’écriture automatique de/etc/caddy/Caddyfile(avec confirmation).
⚠️ Le wizard peut écrire /etc/caddy/Caddyfile si vous confirmez. Sinon, utilisez le fichier caddy.snippet (cf. docs/02_Installation/04-Checklist-Client.md).
4. Après installation (premiers pas)
- Ouvrir le domaine public dans un navigateur (HTTPS) et se connecter avec l’admin.
- Vérifier les paramètres essentiels (admin → paramètres) :
- Provider LLM + clés (OpenRouter/OpenAI).
- Embeddings, chunking, limites d’upload.
- Créer un premier service puis ses workspaces (obligatoire pour l’ingestion et les requêtes).
- Tester
/api/healthet l’UI. - Assistant RAG (optionnel) : aller sur
/{locale}/admin/assistant-raget cliquer Rafraîchir la base (peuple la KB interne__rag_assistant).
4bis. Seed “config actuelle” (optionnel)
Objectif : injecter vos prompts/services/workspaces/paramètres dans les prochaines installations.
Le wizard applique automatiquement ops/seed/current.sql s’il est présent et non vide.
Tables recommandées :
prompt_template,prompt_version,prompt_bindingservice_profilescaller_apps_configsource_apps_config,workspaces_configcache_settingsoptimizer_settingsllm_providers,tenant_allowed_providers(si vous voulez figer l’onglet “Providers”)system_settings
Export minimal (à lancer sur l’instance source) :
sudo bash -lc 'set -a; source /etc/aurora/nexus.env; set +a; \
POSTGRES_CONTAINER=$(docker compose ps -q postgres); \
docker exec -i "$POSTGRES_CONTAINER" env PGPASSWORD="$POSTGRES_PASSWORD" \
pg_dump -U "$POSTGRES_USER" -d "$POSTGRES_DB" \
--data-only --inserts \
-t prompt_template -t prompt_version -t prompt_binding \
-t service_profiles \
-t caller_apps_config \
-t source_apps_config -t workspaces_config \
-t cache_settings -t optimizer_settings \
-t llm_providers -t tenant_allowed_providers \
-t system_settings \
> ops/seed/current.sql'⚠️ Rendez le seed idempotent (ON CONFLICT / UPDATE) si vous comptez relancer le wizard.
3. Options CLI principales
| Option | Description |
|---|---|
--from-file config.yaml | Charge les réponses depuis un fichier YAML/JSON (non-interactif). |
--yes / -y | Skip de la confirmation finale (batch/CI). |
--dry-run | Écrit des artefacts dry-run (plan + env.preview.env redacted) sans lancer Docker. |
--skip-pull | Évite docker compose pull (utile hors réseau). |
--env-path | Fichier .env à écrire (par défaut: dans le dossier de run, sans toucher au .env racine). |
--output-dir | Dossier de run (défaut: ops/wizard_runs/_runs/<timestamp>/). |
--compose-file | Compose alternatif (monostack, tests). |
--wait-timeout | Temps max (s) pour l'attente des containers (défaut: 300). |
--project-name | Force COMPOSE_PROJECT_NAME pour lancer une stack parallèle. |
Exemple de stack parallèle (garde l'infra historique intacte) :
COMPOSE_PROJECT_NAME=aurorarag_wizard python3 ops/install_wizard.py run --project-name aurorarag_wizard3bis. Alternative : page web “Installation” (dry-run)
Si vous avez déjà une instance Nexus en cours (même partielle), la page /<locale>/installation permet de générer :
- un
env.preview.env(secrets masqués), - un
plan.json(liste des services et étapes).
Techniquement, la page appelle POST /api/public/installation/dry-run et peut être protégée par INSTALLATION_WIZARD_TOKEN (header X-Installation-Token).
Mode rapport uniquement
python3 ops/install_wizard.py reportRelit un .env (par défaut: .env si présent, sinon le dernier run dans ops/wizard_runs/_runs/), teste HOST_API_PORT + HOST_UI_PORT et affiche l'état (succès/erreur) sans toucher aux containers.
4. V1 (post‑MVP) : améliorations prévues
Ces éléments ne sont pas implémentés dans la version actuelle, mais cadrent la V1 “installation/ops” :
- Manifeste de release (
public/update-manifest.json) avec version + changelog + hash images. - Endpoint
GET /api/updates/latestqui retourne ce manifeste. - UI : bannière “Nouvelle version disponible” (Admin → Paramètres) + lien changelog + doc d’upgrade.
- Wizard : option
--check-updatespour comparer la version locale au manifeste et proposer un upgrade guidé. - Packs métiers (option wizard) : sélectionner les packs/services à activer (sources, workspaces, prompts et réglages RAG) lors de l’installation.
- Reset & maintenance : renforcer et tester
ops/reset_environment.py(dry-run, garde‑fous, scénarios support) et documenter un runbook d’intervention.
5. Fichier de configuration (--from-file)
Exemple YAML minimal :
app_hostname: nexus.votredomaine.tld
public_domain: https://nexus.votredomaine.tld
admin_email: admin@mondomaine.com
host_ports:
api: 8000
ui: 3000
gateway: 8100
qdrant: 6333
minio_api: 9000
minio_console: 9001
postgres: 5432
redis: 16379
postgres_user: aurora
postgres_password: super-secret
postgres_db: auroranexus
minio_root_user: aurora-s3
minio_root_password: autre-secret
jwt_secret: change-me
allow_insecure_jwt_secret: false
oauth_login_code_ttl_seconds: 180
llm_credentials_enc_key: change-me
allow_legacy_plaintext_credentials: false
enable_ingest_url: false
aurora_diagnostic_log: false
return_jwt_in_body: false
openai_api_key: sk-proj-xxx
openrouter_api_key: sk-or-yyy
freecurrency_api_url: https://api.freecurrencyapi.com/v1/latest?apikey=XXXX¤cies=EURChamps non fournis → valeurs par défaut (cf. ops/install_wizard/models.py).
6. Logs & troubleshooting
- Tous les événements sont tracés dans
ops/logs/install_wizard_<timestamp>.jsonl(JSON lines). Idéal pour le support. - En cas d'échec Docker ou healthcheck, le wizard affiche la commande fautive et l'erreur (
dockerstderr). Relancer avec--verbosepour les détails. - Ports occupés → message
Ports déjà utilisés: .... Relancer en ajustant les valeurs proposées. - Secrets jamais ré-affichés en clair (masquage
****abcd).
Mode “reprise par LLM” (en cas d’échec)
Si le wizard échoue (préflight, validation, docker, healthcheck), il affiche un bloc “PROMPT LLM (RECOVERY)” à coller dans un LLM.
Ce prompt contient :
- le dossier de run (ex.
ops/wizard_runs/_runs/<timestamp>/) - le log JSONL associé (ex.
ops/logs/install_wizard_<timestamp>.jsonl) - les artefacts utiles (
caddy.snippet,.env, etc.)
Ne collez jamais de secrets dans le chat : le LLM doit lire les fichiers locaux depuis le serveur.
7. Scripts appelés
ops/init_db.sh: attend Postgres (aurorarag_postgres), crée la tableaurora_schema_migrations, appliqueaurora_schema.sql+ toutes les migrationsNN_*.sql(priorité au dossiermigrations/, fallback sur la racine si absent). Idempotent, garde une trace par fichier.- Init MinIO : le wizard repose sur le service
minio-init(scriptops/init_minio.sh) pour créer les bucketsuploads/artifacts/backups. Idempotent.
8. Vérifications post-installation
- Source de vérité : cette section sert de checklist unique (à lier depuis le README).
- UI :
http://127.0.0.1:<HOST_UI_PORT>(login admin à créer lors du premier accès). - API :
http://127.0.0.1:<HOST_API_PORT>/api/health→{"status": "ok"}. - Qdrant :
curl http://127.0.0.1:<HOST_QDRANT_PORT>/collections(attendaurora_documents). - MinIO console :
http://127.0.0.1:<HOST_MINIO_CONSOLE_PORT>(credentials choisis).
9. Procédure express pour un nouveau serveur (rappel)
- Cloner le dépôt public :
git clone https://github.com/syl2042/Aurora-Nexus.git && cd Aurora-Nexus - Lancer le wizard :
python3 ops/install_wizard.py run- renseigne tes clés; si tu laisses vide, les secrets internes sont générés aléatoirement.
.envcomplet est produit (toutes les variables de.env.example).
- Démarrer :
docker compose --env-file <chemin/.env> up -d
(si le.envest hors repo, vérifier que le fichier contient bienAURORA_ENV_FILE=<chemin/.env>). - Vérifier
/api/healthet l’accès UI.
Pour documenter des retours beta, créer une issue Wizard install feedback avec : OS/Docker, options, extrait du log JSON, captures docker compose ps.