---
tags: [note vps infrastructure synthese opencode, Infra]
type: "note"
nature: documentation # portrait, lieu, info, concept, script, process, tuto, none
ressource: true
univers: PERSO
projects:
  - "[[03_PROJETS/VPS-IA]]"
date: "[[01_JOURNAL/2026/2026-11-03]]"
priority: 20
description: "Carte interne du serveur : matériel, pile IA, services YunoHost, sécurité, sauvegardes ; diffusion restreinte."
---
# VPS-IA — Le serveur et son fonctionnement (synthèse 2026-11-03)

> **abstract** Abstract
> Vue d'ensemble du serveur principal `datagrandest.net` : plateforme, pile IA (OpenCode + SilverBullet), services YunoHost, automatisation, sécurité et sauvegardes.

> **warning** 🔒 **Audience restreinte**
> Carte d'infrastructure réelle (domaines, services, ports, sécurité). **Ne pas diffuser** en externe (ami / IA publique) sans la version « public » épurée.
> → Version diffusable : [[04_NOTES/VPS-IA_Note-Synthese-Serveur_2026-11-03_PUBLIC]]

## 1. Plateforme & matériel

| Élément | Valeur |
|---|---|
| Nom | `datagrandest.net` |
| Hébergeur | OVH — VM KVM (OpenStack, kernel cloud) |
| OS | Debian 12 (bookworm), kernel 6.1.0-51-cloud-amd64 |
| Distribution | Yunohost (portail, SSO) |
| CPU | 6 vCPU Intel (Haswell) |
| RAM | 11.4 GiB (54 % utilisé typiquement) + swap 4 GiB |
| Disque | 99 Go, 64 % occupé (≈35 Go libres) |
| Uptime | ~15 semaines |
| Fuseau | **UTC** (conversion parisienne nécessaire pour la planification) |
| 2e VPS | `shogun.ovh` (Debian 12 / YunoHost) — supervisé via le skill `shogun-admin` |

## 2. Pile IA — le cœur

### OpenCode (service système)
- Utilisateur dédié **`opencode`**, HOME `/var/lib/opencode`.
- Démarré par `opencode.service` (systemd) via `bin/opencode-serve.sh` : injection des secrets depuis le coffre **pass** à l'exécution, serveur sur `127.0.0.1:49374`.
- **Ne jamais** faire `opencode service start/restart` → toujours `systemctl restart opencode`.
- Config : `/var/lib/opencode/opencode.json` (MCP, compaction `buffer:30%`/`keep.tokens:20000`, policies + permissions).
- Agents : `vps-admin` (défaut), `pkm-manager` — définis dans SilverBullet (`80_CONFIG/IA_AGENTS/`).

### Accès aux LLM — OpenRouter
- **OpenRouter** = fournisseur LLM principal (gestion unifiée des modèles, sans API native).
- Modèle courant : `openrouter/deepseek/deepseek-v4-flash-0731` (agents + sessions).
- Clé : `opencode/openrouter-key` dans pass → `OPENROUTER_API_KEY`, injectée à l'exécution.
- Suivi des coûts/tokens : script local `bin/cron-quotidien-opencode-cout.sh` + skill `opencode-costs` (par défaut **sans API**, lecture `opencode.db` ; **alternative API** : `opencode api get /api/experimental/session/stats`) ; commandes `/costs-oc`, `/costs-oc-day`, `/costs-or*` ; note `[[04_NOTES/VPS-IA_OpenRouter-Consommation]]`.

### Serveurs MCP configurés
| Serveur | Type | Usage |
|---|---|---|
| `silverbullet-ai` | npx `silverbullet-ai-mcp` | lecture/écriture espace SB (`127.0.0.1:3000/shizendo`) |
| `grist` | venv `mcp-server-grist` | base de données `grist.datagrandest.net/api` |
| `excalidraw` | `excalidraw-mcp-sentinel` | canvas live (port 3001) |
| `excalidraw-maaker` | venv `excalidraw-mcp` | génération diagrammes |
| `drawio` | `drawio-mcp` + CLI | schémas `.drawio`, exports PNG/SVG (base `draw.datagrandest.net`) |

### SilverBullet — source de vérité & PKM
- Espace **`shizendo`** : local `127.0.0.1:3000/shizendo`, public `sb.datagrandest.net`.
- **Métier = PKM (Personal Knowledge Management)** : second cerveau (notes, journal,
  templates, requêtes SLIQ, pages projets), base de toute la gestion de connaissance du VPS-IA.
- **Source de vérité** des skills (`80_CONFIG/IA_SKILLS/`), agents (`80_CONFIG/IA_AGENTS/`) et notes.
- Toujours modifier skills/agents **dans SilverBullet**, puis resynchroniser : `bin/sync-silverbullet.sh` (il s'agit des copies locales, écrasées sinon).
- Accès fichiers : API `/.fs/<espace>/` (token `sbt_`, ext `.` encodé `%2E`).
- QMD : recherche sémantique locale (BM25 + vecteurs, 100 % local, 0 token).

## 3. Mémoire multi-niveaux (S / M / L)
- **S (vive)** : `~/.config/opencode/memory/memory-common.md` + `memory-<agent>.md`, budget 2 500 car. chacun.
- **M (rappels)** : `opencode.db` (SQLite) — historique des sessions.
- **L (long terme)** : page SB `80_CONFIG/IA_MEMOIRE_LONGTERME`, remplie par
  `cron-memory-consolidation.sh` (script déterministe, 0 token), consultation ciblée par domaine.

## 4. Services YunoHost installés
- **Données/perso** : Nextcloud, Syncthing, Vaultwarden, Wallabag, Bludit, Forgejo (git), TuWunel.
- **Collaboratif/dock** : OnlyOffice, Grist, Guacamole, code-server, FluffyChat (Matrix), Node-RED.
- **Messagerie** : Dovecot, Postfix, Spamassassin, OpenDKIM, postsrsd, Snappymail.
- **Média/suivi** : Ollama (LLM local), ntfy (notifications), fail2ban, Syncthing, rclone.
- **IA custom** : `kamio-api` (FastAPI, port 8000), `opencode-matrix` (bridge Matrix).

## 5. Automatisation (crontab — fuseau UTC)
| Horaire (UTC) | Script | Rôle |
|---|---|---|
| 02:30 j | `cron-qmd-update.sh` | indexation QMD |
| 03:20 j | `cron-quotidien-opencode-doctor.sh` | contrôle santé OpenCode |
| 03:25 j | `cron-quotidien-opencode-cout.sh` | coûts/tokens |
| 03:30 j | `cron-quotidien-opencode-db-backup.sh` | backup `opencode.db` |
| 04:00 dim | `cron-hebdo-purge-worktrees.sh` | purge worktrees sessions fermées |
| 18:00 ven | `cron-memory-consolidation.sh` | consolidation mémoire S→L |
| @reboot | `start-excalidraw-canvas.sh` | relance canvas Excalidraw |
| 04:35 j / dim 05:10 | sauvegardes pCloud (YNH) | snapshots |

> **note** Note
> > Piège sécurité : **`at` recopie toutes les variables d'env en clair** dans sa file.
> Planifier via `crontab` (env minimal) ou script lisant `pass` à l'exécution.

## 6. Sécurité & secrets
- **Secrets** : coffre `pass` (source de vérité) — `opencode/sb-token`, `grist-api-key`, `server-password`, `openrouter-key`, `openrouter-mgmt-key`. Récupération : `bin/sb-token.sh`, `pass show <nom>`.
- **Jamais** afficher un secret en clair ; injection via substitution shell `$(pass show ...)`.
- **Policies OpenCode** (deny) : `dd`, `mkfs`, `wipefs`, `reboot/shutdown/poweroff`, `swapoff`, `git push --force`.
- **Permissions** `ask` : `rm -rf /{etc,usr,var,boot,root,home}`, édition `~/.ssh` et `~/.password-store`.
- NNP/seccomp cassait sudo/crontab → `ProtectSystem=full` + désactivation ProtectControlGroups sur le service.
- **ntfy** : notifications pub/sub (local `127.0.0.1:8080`, topic `vps-admin`, token via pass) — alertes SSH/PAM, anomalies, infos OpenCode ; déclenché via skill `ntfy`.
- **Worktrees OpenCode** : sous `~/.local/share/opencode/worktree/<hash>/`, dans `opencode.db` (table `worktree`). Restent sur disque après session → purge hebdo (sessions **fermées seulement**).

## 7. État actuel & recommandations
- Disque à 64 % (audit 81→63 % le 02/11) : sous contrôle, surveiller.
- Swap 57 % utilisé — surveillance RAM à garder.
- Worktrees OpenCode à purger régulièrement (accumulation).
- Connexion SSH : clé (Windows) configurée.

## 8. Agents OpenCode pour l'usage
Deux **agents primaires** dialoguent avec l'utilisateur ; leurs rôles sont définis dans
SilverBullet (`80_CONFIG/IA_AGENTS/`), synchronisés vers `~/.opencode/agents/`.

| Agent | Rôle | Accès / garde-fous |
|---|---|---|
| **`vps-admin`** (défaut) | Administration VPS & OpenCode : supervision serveur, logs, statut services, installation MCP/Skills, dépannage, monitoring | Exécute des commandes système ; **deny** `grist*`, `excalidraw*` |
| **`pkm-manager`** | Second cerveau : gestion des données personnelles via SilverBullet, Grist, Excalidraw ; automatisation des flux (scripts, cron) | **deny** `sudo *` |

Tous deux modélisés sur `openrouter/deepseek/deepseek-v4-flash-0731`. Chaque agent a
son fichier de mémoire vive (`memory-<agent>.md`) et charge ses skills au besoin.

## 9. Brique d'authentification — SSO YunoHost
- **SSO YunoHost** protège l'accès web aux applications (authentification centralisée).
- SilverBullet est derrière le SSO : toute requête non authentifiée sur une page est
  redirigée (`302 → .auth`), l'accès API `.fs` se fait via le token `sbt_` (Bearer).
- Applications exposées (`*.datagrandest.net`) authentifiées via ce SSO.

## 10. Alertes & sauvegardes
- **ntfy** (notifications pub/sub, local `127.0.0.1:8080`, topic `vps-admin`) : alertes
  SSH/PAM, anomalies, notifications OpenCode — déclenchées via skill `ntfy`.
- **pCloud** (cloud externe) : **sauvegardes** quotidiennes (04:35) et hebdomadaires
  (dim. 05:10 UTC) via YunoHost (intouchées), en complément des backups locaux de la base OpenCode.

## Liens
- [[03_PROJETS/VPS-IA]]
- [[80_CONFIG/IA_MEMOIRE_LONGTERME]]
- [[04_NOTES/VPS-IA_Installation-OpenCode]]
- [[04_NOTES/VPS-IA_Audit-Securite-VPS-2026-10-16]]
- [[04_NOTES/VPS-IA_Audit-Disque-2026-11-02]]