Commit graph

17 commits

Author SHA1 Message Date
46298871fb
chore(forgejo): archive le mot de passe admin break-glass au vault + doc (#98)
- vault_forgejo_admin_password (compte local forgejo-admin, accès de secours)
- doc : note DISABLE_REGISTRATION, section break-glass, su-exec git obligatoire

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-07 23:51:35 +02:00
224c06041e
feat(forgejo): Git self-host en miroir de GitHub (git.funklab.online, SSO Authentik) (#96)
- k8s/apps/forgejo : deployment (image forgejo:11, config par env), service, PVC nfs,
  IngressRoute interne (git.lab.local) + publique (git.funklab.online + middlewares
  security-headers/ratelimit), Application ArgoCD (ns ai, recurse)
- base PostgreSQL `forgejo` sur storage-01 (rôle postgresql)
- vault : vault_pg_forgejo_password + vault_forgejo_oauth_client_secret
- doc admin/k8s/forgejo.md (archi, OIDC, création du miroir, pièges) + index + CLAUDE.md

GitHub reste la source de vérité (pull-mirror lecture seule) — ArgoCD inchangé.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-07 23:20:33 +02:00
502403d0f9
chore(vault): archive le secret OIDC ArgoCD (#93)
vault_argocd_oidc_client_secret (= secret k8s argocd/argocd-oidc). Différé
lors de la PR #92 pour éviter un conflit d'encrypted blob avec #91 ; ajouté
maintenant que les deux sont mergées.

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 17:33:24 +02:00
5e70e72719
feat(apps): Open WebUI (OIDC) + n8n sur le domaine public HTTPS (#91)
- open-webui : SSO OIDC Authentik (app openwebui) + route
  openwebui.funklab.online. Secret vault_openwebui_oauth_client_secret
  (= secret k8s ai/open-webui-oauth). Nouveaux comptes en rôle 'user'.
- n8n : route n8n.funklab.online (garde son propre login ; route interne
  n8n.lab.local conservée pour le webhook AlertManager)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 17:17:18 +02:00
cd0dacbc9a
feat(infra): domaine public funklab.online + HTTPS Let's Encrypt (fondation) (#88)
- traefik : values.yaml versionné (réplique existant + certResolver ACME
  HTTP-01 + acme.json persistant) — appliqué par helm upgrade (hors ArgoCD).
  Redirect HTTP→HTTPS scopée funklab.online (ne casse pas *.lab.local).
- gateway : DNAT 80/443 → Traefik + rate-limit
- dnsmasq : split-horizon *.funklab.online → Traefik (var public_domain)
- doc : admin/k8s/public-domain.md (archi, OVH/Freebox, helm, ajout d'app)

Appliqué et vérifié : helm upgrade OK (services *.lab.local intacts),
resolver ACME chargé, DNAT/dnsmasq en place. En attente DNS OVH + Freebox
pour l'émission des certificats.

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 15:59:26 +02:00
514cb89579
feat(grafana): SSO OIDC via Authentik + admin par groupe lab-admins (#86)
- values.yaml monitoring : auth.generic_oauth (auth_url navigateur,
  token/api sur le Service interne), root_url, mapping lab-admins→Admin /
  sinon Viewer. Login local conservé (break-glass).
- vault : vault_grafana_oauth_client_secret (= secret k8s
  monitoring/grafana-oauth-secret, déjà créé)
- doc : runbook « ajouter une app » complété (exemple Grafana concret +
  groupe lab-admins) et procédure SQL pour promouvoir un compte SSO admin
  Guacamole (appliquée à Alkatrazz)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 12:11:00 +02:00
bc0e1dd53e
feat(wireguard): accès distant au lab via VPN (Freebox 51820/udp → s01) (#80)
- rôle wireguard : serveur wg0 (10.99.0.0/24) sur storage-01, profils
  clients générés dans /etc/wireguard/clients/ (fichier .conf / QR code)
- gateway : filtrage nftables par pair — full (tout le lab) / portal
  (uniquement Traefik :80 = portail Guacamole), masquerade VPN→cluster
- dnsmasq : bind-dynamic + écoute wg0 → *.lab.local résolu dans le tunnel
- pairs initiaux : alkatrazz (full), invite-01 (portal)
- vault : clés WireGuard + reprise de l'archive Authentik (remplace #78)
- doc : admin/infra/wireguard.md (onboarding pair, pièges, exploitation)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 11:11:43 +02:00
8137830e53
chore(vault): archive secret-key et mdp Redis Authentik (#78)
Ces deux valeurs ne vivaient que dans le secret k8s auth/authentik-secret
(etcd single control-plane, sans backup) — copie de sûreté dans le vault.

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 22:48:28 +02:00
87b786eb57
feat(auth): annuaire Authentik + portail consoles Guacamole (#76)
- k8s/apps/authentik : IdP OIDC (auth.lab.local), namespace auth —
  server + worker 2026.5.3, Redis in-cluster, PG sur storage-01, PVC media
- k8s/apps/guacamole : portail consoles SSH web s01/g01 (portail.lab.local) —
  guacd + webapp 1.6.0, SSO OIDC vers Authentik, Job initdb idempotent
- ansible : rôle console_user (user sans sudo pour les consoles, s01 + g01),
  bases PG authentik/guacamole, secrets vault (mdp PG + clé SSH console)
- doc : admin/k8s/auth-portal.md (déploiement, config initiale, pièges)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 21:24:46 +02:00
f0e33c1121
feat(stt): active les actions via Hermes (STT_ACTIONS_ENABLED=true) (#43)
* feat(stt): active les actions via Hermes (STT_ACTIONS_ENABLED=true)

hermes-exec déployé sur storage-01 (:9096) + secret k8s stt-server-secrets/hermes-exec-token
en place → on active le contexte « agent ». Après déploiement ArgoCD, le contexte
🤖 Agent apparaît dans le sélecteur et les actions (avec confirmation) sont opérationnelles.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* docs: journal 2026-06-21 + état STT (portail, contextes, intents, actions Hermes)

- progress/2026-06-21.md : récap complet de la journée (portail + santé live, contextes
  visualiseur + presets live, intents vocaux, jeton Ghostfolio unifié, actions via Hermes,
  ASR Parakeet) + l'incident de merge des PR empilées et sa leçon.
- PROGRESS.md : ligne du jour.
- CLAUDE.md : « État actuel » daté 2026-06-21, ligne STT enrichie.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* chore(vault): ajoute vault_hermes_exec_token (jeton actions hermes-exec, chiffré)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 04:09:35 +02:00
4f1c03df08 feat(ghostfolio): suivi de portefeuille sur k8s (PG s01 + Redis)
Nouvel app ArgoCD ghostfolio (namespace ai) : suivi/analyse de portefeuille
boursier. Base PostgreSQL dédiée sur storage-01, Redis in-cluster pour le cache.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-15 14:04:19 +02:00
ddff71a0fb chore(vault+ansible): clé API n8n dans vault + cleanup rôle hermes_auto_improve
- vault.yml : ajout vault_n8n_api_key (clé API n8n "claude", label n8n UI)
- hermes_auto_improve tasks : retirer déploiement timer/service daily (scheduling via n8n)
- hermes_auto_improve handlers : retirer handler Reload systemd daemon (inutilisé)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-10 14:01:46 +02:00
alkatrazz
144c522096 chore: mettre à jour vault Gmail + RAG 339 chunks
- vault: App Password Gmail mis à jour pour postfix_relay
- CLAUDE.md: RAG 284 → 339 chunks (ajout docs n8n + open-webui)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-29 18:17:08 +02:00
alkatrazz
8da92cb721 feat(postfix): relay SMTP Gmail + suppression règles Conan nftables
- postfix_relay: switch Brevo → Gmail SMTP (smtp.gmail.com:587, App Password)
- smtp_generic_maps: réécriture expéditeur root@lab.localaliyesilkaya93@gmail.com
- nftables: suppression DNAT/NAT Conan Exiles (ports 7777/7778/27015)
- gateway handler: reloaded → restarted (flush complet des règles nft)
- hermes_agent: pip → uv pour installation qdrant-client (venv sans pip binaire)
- CLAUDE.md: corrections funk-cluster, hermes-switch, RAID5, postfix
- docs: admin/infra/email.md — procédure complète relay Gmail

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-17 16:46:42 +02:00
alkatrazz
92a882aa94 feat: monitoring — node_exporter + ROCm sysfs collector + alertmanager webhook
Ansible roles:
- node_exporter : déploie node_exporter v1.9.1 sur storage-01 et gpu-01
  avec textfile collector + services systemd. ROCm activé sur gpu-01 uniquement
  via group_vars. Collecte métriques GPU via sysfs (temp, VRAM, utilisation)
  — pas de dépendance rocm-smi (remplacé dans ROCm 7.x)
- alertmanager_webhook : service Python sur storage-01 (:9093/webhook)
  reçoit alertes AlertManager et les route vers ask-agent monitor → Hermes

Playbooks: node_exporter + alertmanager_webhook ajoutés à storage-01 et gpu-01

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 21:01:03 +02:00
alkatrazz
00d10234f9 feat: amélioration routing ask-agent + identité SOUL.md profils
- SOUL.md funk-ai : tableaux détaillés system vs monitor (quand appeler
  chaque agent avec exemples concrets), section delegate_task vs ask-agent
- SOUL.md system : rôle clarifié (traitement texte, PAS analyse santé),
  format de réponse explicite (verdict direct, pas de préambule)
- hermes-agent.service : SupplementaryGroups=systemd-journal pour que
  journalctl fonctionne sans sudo depuis le Terminal de Hermes
- Ansible common : admin_user (alkatrazz) ajouté au groupe systemd-journal
- admin/hermes.md : section SOUL.md complète (déploiement, contenu, profils)
- admin/ask-agent.md : distinction system vs monitor documentée avec
  tableau et exemples, note /no_think, monitor réservé supervision

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13 18:59:48 +02:00
alkatrazz
b3fce8af5d feat: initial commit — Ansible roles storage-01/gpu-01 opérationnels 2026-05-12 17:17:03 +02:00