LORVA utilise deux gestionnaires de secrets complémentaires :
| Vaultwarden | Infisical | |
|---|---|---|
| Pour | Humains (mots de passe, comptes) | Machines (apps, CI/CD, builds) |
| URL | vault.lorva.dev (public) |
infisical.lorva.dev (interne uniquement) |
| Accès | navigateur / extension | API + identités machine + syncs |
| Rôle | source de vérité humaine | source de vérité des secrets applicatifs/CI |
⚠️ Cette page documente l'organisation et l'architecture, jamais les valeurs en clair.
Voir aussi : Adresses Email · GitLab · Runbook release taskori-sync
Infisical (infisical.lorva.dev, accessible uniquement depuis le réseau interne LORVA — résout en IP privée, invisible en public) est la source de vérité de tous les secrets consommés par les applications et les pipelines. On y définit les secrets une seule fois ; Infisical les pousse automatiquement vers les variables CI GitLab et les secrets GitHub Actions.
Avant : chaque repo dupliquait ~30-40 variables CI (SMTP, DB, tokens inter-services…) → dérive garantie.
Après : Infisical détient la valeur ; les destinations (GitLab/GitHub) sont synchronisées depuis Infisical (overwrite-destination).
claude-ci (Universal Auth, rôle org Admin) pour l'automatisation/API. Login : POST /api/v1/auth/universal-auth/login {clientId, clientSecret}.taskori, environnement prod./_common (secrets partagés : SMTP, Chatwoot, DB_HOST, JWT_SECRET, URLs/tokens inter-services, déploiement…) + un dossier par app (/auth, /ts, /manage, /project, /portal, /admin, /cron, /share)./_common (import même-projet — l'import inter-projet n'existe pas dans cette version).taskori/<app> → variables CI du projet GitLab correspondant. Vérifié fidèle (set résolu == ancien set CI, au secret près) ; les 8 pipelines de déploiement passent.Les apps desktop se buildent sur GitHub Actions (GitLab = miroir source), donc leurs secrets vivent dans les secrets Actions GitHub, pilotés par Infisical :
taskori dossier /sync (TAURI signing key, DL_WEBHOOK_SECRET, secrets Apple) → sync vers Ops-Lorva/taskori-sync-release.lanprobe (secrets Apple + cert installer) → sync vers Ops-Lorva/lanprobe.🔑 Règle : Infisical n'utilise jamais un token large/root. Chaque connexion a un token dédié et scopé.
| Connexion | Token dédié | Portée |
|---|---|---|
GitLab (gitlab-lorva) |
Group Access Token infisical-sync du groupe taskori (scope api, Owner) |
groupe taskori uniquement |
GitHub (github-opslorva) |
Fine-grained PAT (Secrets: write) sur les 2 repos | repos lanprobe + taskori-sync-release |
Pré-requis self-host :
ALLOW_INTERNAL_IP_CONNECTIONS=truedans le.envbackend (GitLab est en IP privée).
Infisical = secrets machines. Les humains ne s'y connectent pas au quotidien : les valeurs sensibles correspondantes (clés de signature, mots de passe maîtres, comptes fournisseurs) restent aussi dans Vaultwarden comme sauvegarde/source humaine. Voir ci-dessous.
Tous les secrets LORVA vivent dans Vaultwarden (self-hosted), organisés dans l'Organisation LORVA via des Collections (partageables, mappables sur les groupes LDAP). Les credentials personnels restent dans le coffre perso, jamais dans l'organisation.
⚠️ Cette page documente l'organisation, pas les valeurs. Aucun secret en clair ici.
Voir aussi : Adresses Email · LDAP/RADIUS · Mailcow
Org LORVA
├── Infra → comptes ADMIN d'applications web (UI)
├── Infra/Api Key → clés d'API + tokens
├── Infra/Serveurs → accès MACHINE (SSH, Proxmox, pfSense) + root DB
├── Email → boîtes Mailcow (lorva.dev + taskori.app)
├── Finance
├── Commercial
└── Claude - Depot → tampon d'automatisation (vide en régime normal)
Coffre perso (hors org) → comptes personnels (JAMAIS dans l'org)
La distinction clé : Infra = « je me connecte à l'UI d'une app » (Chatwoot, Wiki.js, CipherMail, Bookdex, NetBox, GitLab, Authentik, Infisical) · Infra/Serveurs = « j'accède à une machine » (SSH root, Proxmox, pfSense, root MariaDB) · Infra/Api Key = « une machine s'authentifie » (jetons).
| Collection | Contenu |
|---|---|
| Infra (comptes admin apps web) | Chatwoot, Wiki.js, CipherMail, Bookdex, NetBox, GitLab, Authentik, Infisical, panneaux d'admin — bref tout compte auquel un humain se connecte via un navigateur |
| Infra / API Key | Anthropic, Cloudflare DNS token, Mailcow API, NetBox, Wiki.js, Prowlarr, Kavita, Home Assistant, tokens GitLab / GitHub |
| Infra / Serveurs | Accès machine uniquement : SSH (root VMs + bastions), Proxmox, pfSense / WireGuard, host OVH, comptes fournisseurs (OVH, Cloudflare, Apple Developer, registrar), root des bases (MariaDB Taskori), clés de signature updater taskori-sync (minisign). Les secrets applicatifs (MASTER_KEY, JWT, INTERNAL_TOKEN…) vivent dans Infisical, pas ici. |
| Les boîtes Mailcow (lorva.dev + taskori.app) + accès webmail | |
| Finance | Stripe, factures fournisseurs, banque, documents LLC / legal |
| Commercial | CRM, comptes prospection / ventes |
| Coffre perso | Comptes personnels — jamais dans l'org LORVA |
🔑 Les comptes fournisseurs techniques (serveurs, domaines, SaaS) sont ouverts avec
[email protected], pas une adresse perso → ils vivent dans Infra / Serveurs.
La recherche Vaultwarden est globale (tout le coffre) — les collections servent au partage et au parcours, pas à la recherche. Donc soigner le nommage :
[Service] – rôle/compte
OVH – compte société, Mailcow – [email protected], GitLab LORVA – token root, MariaDB – taskori_shareTaskori – …, Klibri – … (plus cherchable qu'une arbo profonde)Les collections sont conçues pour être mappées sur les groupes LDAP (Tech/Infra, Finance, Commercial, Support), de la même façon que les boîtes mail partagées. Voir LDAP/RADIUS.
ops@, billing@), jamais perso.[email protected] (automatisation)Un compte de service dédié permet à l'agent (Claude) de déposer des identifiants dans le coffre par API, sans jamais accéder aux secrets rangés.
[email protected] (quota 1 Go), partagée par ACL Dovecot avec [email protected] (Shared/[email protected]/). Refaire ACL + subscribe pour tout nouveau dossier créé dans cette boîte.Claude - Depot. Toute édition hors dépôt est refusée (No rights to modify the collection).Claude - Depot (avec URI, identifiant, note d'usage).Claude - Depot est vide.⚠️ Piège CLI Bitwarden : changer la collection d'une entrée ne passe pas par
bw edit item(retourne un « OK » trompeur sans persister). Utiliserbw edit item-collections <id> <base64-du-tableau-collectionIds>.
bw)grant_type=client_credentials) puis unlock avec la phrase maîtresse.$, ne jamais sourcer le fichier de secrets (le shell interpole et tronque en silence) — lire avec cut, protéger par quotes simples.