smart_ide/docs/features/remote-deployed-data-ssh.md

87 lines
7.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Données sur environnements déployés — SSH, docv, AnythingLLM, services
## Règle de périmètre
- La **vérité opérationnelle des données métier** (fichiers documentaires, volumes applicatifs, dumps ou extractions de bases utilisées pour lIA / docv / recherche) réside sur les **machines déployées** **test**, **pprod** et **prod**, pas dans lhistorique Git des dépôts applicatifs.
- Les dépôts sources (clone local ou CI) contiennent le **code** et la **doc versionnée** ; les répertoires du type **`data/`**, caches dindex, exports SQL destinés au RAG, etc. doivent être **ignorés par Git** (`.gitignore` dans chaque dépôt applicatif concerné). Smart_ide ne remplace pas le `.gitignore` des projets externes : la convention est **documentée ici** pour alignement équipe.
## Objectifs par consommateur
| Consommateur | Besoin | Moyen prévu |
|--------------|--------|-------------|
| **docv** | Lire / actualiser la vue documentaire et les données projet alignées sur létat **déployé** | Connexion **SSH** (ou rebond **ProxyJump**) vers les hôtes ou bastions par environnement ; copie contrôlée (**rsync**, **scp**, **sftp**) ou **commandes distantes** (ex. `pg_dump` sur le serveur) vers une **zone de travail locale ou de service** autorisée, puis ingestion AnythingLLM / API docv selon les pipelines du dépôt docv. |
| **AnythingLLM** | Workspace par projet alimenté avec un corpus **proche de la prod** (ou de test) | Après **récupération SSH** depuis lenvironnement cible (fichiers + éventuels dumps transformés en documents), exécution des scripts de synchro existants ([anythingllm-workspaces.md](../anythingllm-workspaces.md), [anythingllm-pull-sync-after-pull.md](./anythingllm-pull-sync-after-pull.md)) en pointant vers ce **miroir local ou volume monté**, pas vers un `data/` versionné dans Git. |
| **Services smart_ide** (éditeur, IA, extraction, recherche dans les données) | Opérer sur des fichiers ou flux qui **ne sont pas** dans le clone Git | Même principe : les services qui doivent lire des **données déployées** obtiennent un **chemin résolu après fetch SSH** (répertoire cache par projet / environnement) ou exécutent des **commandes distantes** via SSH ; les contrats HTTP existants ([API/README.md](../API/README.md)) peuvent être étendus côté implémentation pour accepter une **racine de lecture** (`*_ROOT`, `*_CACHE_DIR`) alimentée par ce flux. |
Les **secrets** (clés SSH, mots de passe BDD) restent **hors dépôt** : fichiers sous `~/.ssh/config`, agents SSH, coffres locaux — jamais dans `projects/*/conf.json`.
## Schéma logique
```mermaid
flowchart TB
subgraph deployed [Environnements déployés]
T[test]
P[pprod]
R[prod]
end
subgraph git [Dépôts Git]
APP[clone applicatif]
end
subgraph bridge [Pont SSH]
SSH[ssh_rsync_ou_commande_distante]
end
subgraph consumers [Consommateurs]
DV[docv]
ALLM[AnythingLLM]
SVC[services_smart_ide]
end
T --> SSH
P --> SSH
R --> SSH
SSH --> DV
SSH --> ALLM
SSH --> SVC
APP --> git
APP -.-x|pas de data versionnée| git
```
## Déclaration dans `projects/<id>/conf.json`
Les chemins **locaux** vers clones (`project_path`, `deploy.repository_root`, etc.) sont **relatifs à la racine du monorepo smart_ide** (ou absolus). Les **`path_on_server`** sous `smart_ide.remote_data_access` restent des chemins **absolus sur la machine déployée**.
Bloc optionnel **`smart_ide`** (ignoré par les outils qui ne le lisent pas, ex. parties d**ia_dev** qui ne sélectionnent que leurs champs) :
- **`remote_data_access.environments.<test|pprod|prod>`** : pour chaque environnement,
- **`ssh_host_alias`** : nom d**hôte SSH** tel que défini dans **`~/.ssh/config`** (`Host …`). Pour **enso**, le déploiement lit **`ENSO_SSH_HOST`** dans le fichier **`enso-deploy.env`** de lenvironnement (exemples dans **`enso/deploy/enso-deploy.env.example`** : `test`, `pprod`, `prod`). Si votre `Host` local diffère (ex. `enso-test-app`), renseigner **ce** libellé ici pour que les outils SSH du poste ciblent la bonne entrée.
- **`remote_app_root` (optionnel)** : chemin **absolu sur le serveur** de la racine du clone applicatif lorsquil est fixé par les scripts de déploiement. Pour **enso**, même sémantique que **`ENSO_REMOTE_ROOT`** (ex. `/home/ncantu/enso` dans lexemple du dépôt enso ; sous **`$HOME`** sur la cible pour les unités systemd utilisateur, voir commentaire dans **`enso-deploy.env.example`**).
- **`remote_data_directories`** : liste dobjets `{ "role": "…", "path_on_server": "…" }` avec **`path_on_server` en chemin absolu sur la machine déployée**. Pour **enso**, les rôles **`enso_monorepo_clone`** et **`docv_dp_git_data`** reflètent **`ENSO_REMOTE_ROOT`** et le sous-chemin par défaut **`data/dossiers-permanents`** décrit dans **`enso/deploy/enso-deploy.env.example`** et **`enso/docs/features/DOSSIERS_PERMANENTS_DATA_GIT.md`**. Ajuster si **`DOCV_DP_GIT_REPO_ROOT`** / **`DOCV_DP_GIT_DATA_SUBPATH`** sur la cible divergent.
- **`database` (optionnel)** : description **non secrète** du besoin (moteur, stratégie dump) ; pas dURL ni mot de passe dans le JSON versionné.
- **`anythingllm_workspace_slug` (optionnel)** : objet ou chaînes par env — slugs de workspace alignés sur [anythingllm-workspaces.md](../anythingllm-workspaces.md).
Un exemple structuré est donné sous **`projects/enso/conf.json`** ; copier / adapter pour dautres ids.
## Configuration projet dans lIDE
Objectif : indiquer **quel** `projects/<id>/` est actif pour léditeur et les agents, sans mélanger avec `IA_PROJECT_ID` ia_dev quand ils divergent.
1. **Fichier local (recommandé)**
- Copier [`projects/active-project.json.example`](../projects/active-project.json.example) vers **`projects/active-project.json`**.
- Ce fichier est **ignoré par Git** (voir racine `.gitignore`).
- Champs : **`id`** (obligatoire, ex. `enso`), **`default_env`** (optionnel : `test` | `pprod` | `prod`). Lexemple versionné peut contenir dautres clés purement documentaires (ex. **`notes`**) ignorées par les automatisations.
2. **Paramètres multi-dossiers VS Code / Cursor**
- La conf versionnée par projet est **`projects/<id>/conf.json`** : sous **`smart_ide.workspace.settings`**, renseigner **`smartIde.activeProjectId`** (même sémantique quun fichier `.code-workspace`). Les **`folders`** du même bloc décrivent les racines du workspace.
- Pour ouvrir léditeur : copier ce bloc dans un **fichier local `.code-workspace`** (non versionné) si besoin, ou aligner **`.vscode/settings.json`** sur ces valeurs pour un dossier unique.
- Ces clés ne sont **pas** des clés natives VS Code : elles servent de **convention** lue par scripts, extensions maison ou règles Cursor (voir [`.smartIde/rules/smart-ide-ia-dev-bridge.mdc`](../../.smartIde/rules/smart-ide-ia-dev-bridge.mdc)).
Ordre de priorité suggéré pour les automatisations : **`projects/active-project.json`** → variable denvironnement **`SMART_IDE_PROJECT_ID`** si défini au lancement → **`smartIde.activeProjectId`** dans **`smart_ide.workspace.settings`** du `conf.json` du projet concerné, ou dans les settings du workspace ouvert, ou **`.vscode/settings.json`** → demande explicite à lutilisateur.
## Liens
- Intégration docv et chemins historiques locaux : [docv-service-integration.md](./docv-service-integration.md)
- IA docv : [docv-ai-integration.md](./docv-ai-integration.md)
- AnythingLLM : [anythingllm-workspaces.md](../anythingllm-workspaces.md)
- Écosystème Git / synchro : [ecosystem-architecture-and-sync.md](../ecosystem-architecture-and-sync.md)
- Index `projects/` : [repo/projects-directory.md](../repo/projects-directory.md)