diff --git a/common/cin-search-tt-migration-docker.md b/common/cin-search-tt-migration-docker.md new file mode 100644 index 0000000..fe1be0e --- /dev/null +++ b/common/cin-search-tt-migration-docker.md @@ -0,0 +1,41 @@ +# Migration cin-search-tt : hors-Docker vers Docker + SMTP OVH -> Infomaniak + +## Contexte +Le 10/07/2026, Nabil signale que la migration SMTP globale vers Infomaniak (faite la veille) +n'a pas couvert cin-search-tt car cette app tournait en dehors de la stack Docker, dans +/volume1/web/cin-search-tt (Node.js standalone, jamais containerise). + +Audit etendu a tout /volume1/web/ : 4 apps Node y etaient hebergees hors-Docker. + +## Etat trouve +| App | Etat | Action | +|---|---|---| +| cin-search-tt | SMTP sur ssl0.ovh.net, Baserow sur ancien alias nd.i234.me, jamais dockerise | Migre vers Docker | +| rla | Copie **obsolete** — la vraie version tourne deja proprement dans /volume1/docker/rla-api (Gotenberg/pptx-tt-api deja purges le 04/07) | Archivee (doublon perime) | +| club-ia | Projet termine (jamais deploye en prod) | Archivee | +| weblinks | Page HTML statique simple, aucune dependance | Conservee en l'etat dans /volume1/web | + +## Actions effectuees — cin-search-tt +1. Copie du code (hors node_modules/zip) vers /volume1/docker/cin-search-tt +2. `.env` corrige : + - SMTP_HOST ssl0.ovh.net -> mail.infomaniak.com (port 587, STARTTLS, meme compte nabil.derouiche@ik.me que Baserow/Vaultwarden) + - BASEROW_API_URL https://baserow.nd.i234.me -> https://baserow.bolbol.tn (alias reseau Docker, regle absolue) +3. Dockerfile ecrit (node:20-alpine, npm install --omit=dev) +4. Image buildee via API Docker de Portainer (`POST /api/endpoints/2/docker/build` avec tar de contexte) car `docker` CLI absent du container mcp-nas (hardening 08/07) +5. Stack deploye via API Portainer (`POST /api/stacks/create/standalone/string`) — **pas de `env_file:`** dans le compose (Portainer ne voit pas les chemins hote arbitraires), variables passees en `environment:` inline a la place +6. Container `cin-search-tt` : port 3094->3000, reseau `n8n`, volume `/volume1/docker/cin-search-tt/data:/app/data` (persistance database.json) +7. `ports-registry.md` mis a jour (edite via un container alpine ephemere + bind mount, car le fichier appartient a uid 1026 et mcp-nas n'a plus CAP_DAC_OVERRIDE) +8. Reverse-proxy DSM `cin.bolbol.tn` -> `localhost:3094` **NON fait** (hors scope API/Docker, a faire manuellement dans DSM Control Panel) +9. Anciens dossiers archives dans `/volume1/web/.archive/` : `cin-search-tt.archived-20260710-migrated-to-docker`, `rla.archived-20260710-obsolete-superseded-by-docker-rla-api`, `club-ia.archived-20260710` + +## Pieges decouverts (a capitaliser) +- **mcp-nas ne peut pas lancer `docker`/`docker compose` directement** (binaire absent, SSH host indisponible depuis le hardening). Solution : API REST Portainer (`/api/endpoints/{id}/docker/build` pour build, `/api/stacks/create/standalone/string` pour deploy). +- **Portainer ne resout pas `env_file:` avec un chemin hote** dans un stack deploye par API string — le moteur compose de Portainer tourne dans son propre filesystem (`/data/compose//`), pas celui de l'hote. Toujours utiliser `environment:` inline pour les stacks deployes ainsi. +- **Volume bind mounts en chemin absolu hote fonctionnent normalement** (resolus par le daemon Docker, pas par Portainer) — contrairement a `env_file:`. +- **Ecriture de fichiers appartenant a uid 1026 depuis mcp-nas (root) : impossible**, meme en root, a cause de `cap_drop: [ALL]` (pas de CAP_DAC_OVERRIDE). Contournement : creer un container ephemere (alpine) avec bind mount du dossier concerne via l'API Portainer, executer la commande d'ecriture dedans en root reel (container non-hardened), puis le supprimer. +- **Token Gitea `GITEA_DEPLOY_TOKEN` n'a pas le scope `write:organization` ni `read:user`** — peut lire/ecrire du contenu de repos existants, mais pas creer de nouveaux repos ni lister les users/orgs. Creation de nouveaux repos = a faire manuellement dans l'UI Gitea. +- **`/volume1/docker/ports-registry.md` n'est pas versionne dans Gitea** (pas de `.git` a la racine de `/volume1/docker`) — mise a jour uniquement in-place sur le NAS. + +## Reste a faire (hors scope automatisable) +- Creer la regle reverse-proxy DSM `cin.bolbol.tn` -> `localhost:3094` +- Creer le repo Gitea `bolbol/cin-search-tt` manuellement (token actuel insuffisant) et y pousser le code