# Veille Versions Stack NAS & Référentiel Baserow Ce document décrit le fonctionnement du dispositif de suivi et de veille automatisée des versions des conteneurs du NAS Synology. > **Doctrine stricte** : Ce workflow ne fait **que détecter et notifier**. Aucune mise à jour n'est exécutée automatiquement. Toute opération de mise à jour fait l'objet d'un brief de cadrage, d'une exécution contrôlée avec sauvegardes et d'une validation par commandes réelles. --- ## 1. Architecture du Dispositif ```mermaid graph TD Trigger["Schedule Trigger (Lundi 08h00 Africa/Tunis)"] --> ReadBR["Lire Table Baserow (Table 1097 / Infra Stack)"] ReadBR --> SSHCheck["SSH Restreint NAS (n8n-versions-ro)"] SSHCheck --> MapItems["Préparer Mapping & Éléments"] MapItems --> DHub["API Docker Hub (Tags stables)"] DHub --> Analyze["Analyser Écarts & Versions"] Analyze --> UpdateBR["Mettre à jour Baserow (PATCH Table 1097)"] UpdateBR --> Filter["Filtrer Alertes (Si nouvel écart détecté)"] Filter -->|Nouvel écart| Telegram["Notification Telegram (ND_Telegram)"] Filter -->|À jour ou En pause| Silent["Silence (0 spam)"] ``` --- ## 2. Composants Techniques ### A. Référentiel Baserow (`infra_versions`) - **Workspace** : `148 (Hors-RLA)` - **Database** : `Infra Stack` (ID `317`) - **Table** : `infra_versions` (ID `1097`) - **URL** : `https://baserow.bolbol.tn/database/317/table/1097` - **Champs suivis** : - `conteneur` (Texte, clé primaire) : Nom du conteneur - `image_repo` (Texte) : Repository Docker Hub (ex: `n8nio/n8n`, `maximhq/bifrost`) - `methode_verif` (Single select) : `image_tag` ou `exec_version` - `version_installee` (Texte) : Version réelle active sur le NAS - `derniere_version_disponible` (Texte) : Dernière version stable publiée - `ecart` (Texte) : Statut de l'écart (`0`, `Installée: ... ➔ Dispo: ...`) - `criticite` (Single select) : `Critique`, `Important`, `Mineur` - `date_derniere_verification` (Date) : Date du dernier passage de veille - `date_derniere_maj_effective` (Date) : Date de la dernière MAJ appliquée - `statut` (Single select) : `À jour`, `Retard mineur`, `Retard à traiter`, `En pause` - `lien_runbook` (URL) : Lien vers le guide d'exploitation / runbook - `notes` (Texte long) : Particularités techniques (ex: image custom, base de données, pins) --- ### B. Accès SSH Restreint NAS (`n8n-versions-ro`) Pour respecter le principe de moindre privilège et interdire tout shell interactif ou injection de commande : - **Compte DSM** : `n8n-versions-ro` (UID `1041`, membre du groupe `docker` `65538`). - **Clé SSH** : Clé Ed25519 dédiée (`/volume1/docker/scripts/id_ed25519_n8n_versions`). - **Restriction `authorized_keys`** : ```text command="/volume1/docker/scripts/versions-check.sh",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIn3e1VvE3Z/q1W5o6Q+30w7U57u3aK8JqC8Z57Z8z/c n8n-versions-ro ``` - **Script exécutable** : `/volume1/docker/scripts/versions-check.sh` - Filtre `$SSH_ORIGINAL_COMMAND` contre une whitelist stricte des 9 conteneurs. - Toute commande arbitraire (`rm -rf /`, `sh`, etc.) est rejetée avec un code d'erreur `1`. --- ### C. Workflow n8n (`veille-versions-stack`) - **ID Workflow** : `zUWN5K4Q1A2JKFIS` - **Déclenchement** : Hebdomadaire (Lundi à 08h00 Africa/Tunis) + Webhook de test manuel `/webhook/test-veille-versions`. - **Canal Telegram** : Credential `ND_Telegram` (`OyOHh6jAzCDsiBux`), Chat ID `2084513684`. - **Export JSON** : [`veille-versions-stack.n8n.json`](file:///tmp/nas-runbooks/common/workflows/veille-versions-stack.n8n.json) --- ## 3. Table des 9 Conteneurs Suivis | Conteneur | Image Repo | Méthode | Criticité | Particularités | |---|---|---|---|---| | `n8n` | `n8nio/n8n` | `exec_version` | Important | Image custom (docx, exceljs) | | `bifrost` | `maximhq/bifrost` | `image_tag` | Critique | Pin image, backup config.db/config.json | | `gitea` | `gitea/gitea` | `image_tag` | Important | Pin rootless, backup natif `gitea dump` | | `portainer` | `portainer/portainer-ce` | `image_tag` | Mineur | Pilote stacks, MAJ en priorité | | `vaultwarden` | `vaultwarden/server` | `image_tag` | Mineur | Pin alpine, backup db.sqlite3 | | `baserow` | `baserow/baserow` | `exec_version` | Important | Mode minimal, DNS dynamique Nginx | | `crowdsec` | `crowdsecurity/crowdsec` | `exec_version` | Important | Sécurité IDS/IPS DSM | | `tailscale-nyora-bridge` | `tailscale/tailscale` | `image_tag` | Mineur | Bridge HTTP/SOCKS5 | | `trilium` | `triliumnext/trilium` | `image_tag` | Mineur | `En pause` (exclu des alertes actives) | --- ## 4. Procédure de Test et Validation 1. **Test d'exécution manuelle sans alerte (tout à jour)** : ```bash curl -s http://192.168.100.33:5678/webhook/test-veille-versions # Réponse attendue : {"no_alert": true, "message": "Aucun nouvel ecart"} ``` 2. **Test d'interrogation SSH unitaire** : ```bash ssh -p 22222 -i /volume1/docker/scripts/id_ed25519_n8n_versions -o BatchMode=yes n8n-versions-ro@127.0.0.1 "n8n" # Réponse attendue : version exacte (ex: 2.36.5) ```