No description
Find a file
2026-10-18 05:23:07 +01:00
.forgejo/workflows Tests: suite pytest (59 tests) + pyflakes + CI Forgejo Actions; couvre fonctions partagees UI/MCP et regression spares 2026-10-09 06:39:35 +01:00
app Maintenance: prune des taches orphelines (pool/array disparu) + alerte resolue; fixture db robuste. 190 tests 2026-10-18 05:23:07 +01:00
docs Progression generique: moteur de taches (etapes reelles + % noyau/sys), overlay global, wiring create/destroy/demantelement/wipe/format/scrub/replication(rsync%)/zfs/garage/updates + MCP silo_tasks 2026-10-09 10:42:18 +01:00
skills/afriktecksilo Renommage complet: afrisilo -> afriktecksilo (env, chemins, services, cookie, IQN, marqueurs, docs); AfriSilo -> AfrikTeckSilo; service afriktecksilo.service 2026-10-09 09:18:22 +01:00
static Perfs Phase A : options sures par service (dataset ZFS, SMB sendfile/aio, RAID chunk+stripe_cache, iSCSI block_size/queue_depth) + MCP + 152 tests verts 2026-10-12 22:10:51 +01:00
templates Anti-dur P1+P2+P3 : constantes, systemd/paths/jinja centraux, timeouts nommes (182 tests, 117 outils) 2026-10-13 21:07:18 +01:00
tests Maintenance: prune des taches orphelines (pool/array disparu) + alerte resolue; fixture db robuste. 190 tests 2026-10-18 05:23:07 +01:00
tools Renommage complet: afrisilo -> afriktecksilo (env, chemins, services, cookie, IQN, marqueurs, docs); AfriSilo -> AfrikTeckSilo; service afriktecksilo.service 2026-10-09 09:18:22 +01:00
vendor Vendorise .debs NUT (+closure) : try_vendor_install avec garde anti-downgrade, branche nut/rclone/targetcli, manifest + tests 2026-10-12 12:37:46 +01:00
.gitignore Tests: suite pytest (59 tests) + pyflakes + CI Forgejo Actions; couvre fonctions partagees UI/MCP et regression spares 2026-10-09 06:39:35 +01:00
afriktecksilo.service Renommage complet: afrisilo -> afriktecksilo (env, chemins, services, cookie, IQN, marqueurs, docs); AfriSilo -> AfrikTeckSilo; service afriktecksilo.service 2026-10-09 09:18:22 +01:00
AGENTS.md MCP silo_zfs_vdevs (radar by-id multi-sites) + 189 tests, 118 outils 2026-10-14 12:53:30 +01:00
CAHIER-DES-CHARGES.md Renommage complet: afrisilo -> afriktecksilo (env, chemins, services, cookie, IQN, marqueurs, docs); AfriSilo -> AfrikTeckSilo; service afriktecksilo.service 2026-10-09 09:18:22 +01:00
install.sh Module Onduleur NUT (supervision UPS + arret propre + alertes + MCP silo_ups*) + guide marques discret 2026-10-12 11:44:44 +01:00
LICENSE P0: squelette NAS (FastAPI, auth, layout MVC, dashboard, disques lecture seule, SQLite, systemd) 2026-10-06 12:40:08 +01:00
README.md Renommage complet: afrisilo -> afriktecksilo (env, chemins, services, cookie, IQN, marqueurs, docs); AfriSilo -> AfrikTeckSilo; service afriktecksilo.service 2026-10-09 09:18:22 +01:00
requirements-dev.txt Tests: suite pytest (59 tests) + pyflakes + CI Forgejo Actions; couvre fonctions partagees UI/MCP et regression spares 2026-10-09 06:39:35 +01:00
requirements.txt Retrait Docker+UPS, S3 natif via Garage, selects dynamiques partout, gating grise/degrise 2026-10-06 16:04:06 +01:00
TUTORIEL.md Cache RAM ARC en % (multi-sites) : reglage produit, carte UI, MCP, 179 tests, 118 outils 2026-10-13 13:56:28 +01:00

AfrikTeckSilo — cockpit de stockage robuste sur Debian

Application web 100 % native (service systemd) : un système de stockage robuste, utilisable en datacenter, qui expose le stockage à l'infrastructure (SMB/NFS, iSCSI, S3) avec une vraie machinerie interne (RAID/ZFS, spares, scrub, snapshots, monitoring).

  • Backend : Python 3 + FastAPI, SQLite (SQLAlchemy), Jinja2 + CSS/JS maison (aucun CDN, aucune étape de build).
  • Structure MVC : layout principal (templates/base.html) + vues injectées ; fonctionnalités en modules indépendants (app/modules/) isolés au chargement (un module en échec ne bloque pas les autres).
  • Sécurité : service local, sessions, mots de passe pbkdf2, commandes système en allow-list stricte (jamais de shell), journal d'audit.

État : P0 (squelette)

  • Authentification admin + sessions + changement de mot de passe.
  • Tableau de bord (système, disques, alertes, journal).
  • Disques en lecture seule : inventaire lsblk + SMART de base.
  • Centre d'alertes (lecture/accusé), export/import de config (JSON), API santé.
  • Service systemd + script d'installation.

Installation

Dépôt privé Forgejo : clone, puis installe.

apt-get install -y git
git clone http://10.0.3.88:3000/root/afriktecksilo.git /opt/afriktecksilo
cd /opt/afriktecksilo
sudo AFRIKTECKSILO_ADMIN_PASSWORD='mot-de-passe-solide' ./install.sh
# -> http://<IP>:8000/ (compte admin)

Port personnalisé : sudo PORT=8080 AFRIKTECKSILO_ADMIN_PASSWORD='...' ./install.sh.

Guide complet (2ᵉ nœud, réplication, MAJ) : docs/DEPLOIEMENT.md.

Architecture

app/
  main.py            point d'entree FastAPI
  db.py / models.py  SQLite (users, sessions, settings, alerts, audit)
  auth.py            pbkdf2 + sessions
  executor.py        allow-list de commandes (pas de shell)
  modules/
    __init__.py      chargement isole + etat de sante
    core.py          dashboard, auth, alertes, reglages, export/import
    disks.py         inventaire + SMART (lecture seule en P0)
templates/           base.html (layout) + vues
static/              style.css responsive + app.js minimal

Interface (P1)

  • Sidebar (opérations : dashboard, disques, RAID, spares, remplacement, alertes, paramètres) fixe, navbar (fil d'Ariane, thème, export, user), panneau contextuel à droite, contenu central scrollable.
  • Dark (défaut) + light, persistance locale, animations subtiles, responsive (sidebar repliable sur mobile), prefers-reduced-motion respecté.
  • 100 % codé main, sans CDN (aucune dépendance externe).

État : P1 + P2 + P3 + V2

  • Pools unifiés (RAID, ZFS, disques montés) avec préparation en un clic.

  • Partages dynamiques : pool → dataset auto (<pool>/shares/<nom>) + SMB et/ou NFS sur le même dataset.

  • ZFS : mirror/raidz2/raidz3 (stripe/raidz1 refusés), scrub, snapshots, rollback, datasets, destruction confirmée. Active contrib si besoin.

  • iSCSI (LIO) : cibles + LUNs fichier sur les pools, CHAP, ACL initiateurs, modèle régénéré (idempotent) ; testé avec initiateur réel (iscsiadm + CHAP + mkfs + écriture/lecture).

  • Objet S3 (Garage natif, Deuxfleurs) : binaire officiel + service systemd, données sur pool, bucket + clé créés, test PUT+GET réel.

  • Gating façon TrueNAS : partages, iSCSI et S3 grisés sans pool monté (dégrisés automatiquement après création RAID/ZFS) ; création RAID/ZFS grisée sans disques libres.

  • Formatage ext4/xfs + montage (/etc/fstab par UUID) avec garde-fous.

  • RAID mdadm : création RAID1/6/10 (RAID5/0 refusés), état, fail/remove/add, scrub, mdadm.conf + initramfs persistés. Les arrays pré-existants (créés hors app) sont affichés et gérables.

  • Disques utilisés non cliquables (système, en RAID, montés, partitionnés, avec FS) : pastille d'état, on se concentre sur les disponibles.

  • Spares : pool + assignation (rebuild auto du noyau).

  • Assistant de remplacement : fail → retrait → ajout + historique.

  • Utilisateurs : comptes système + Samba, groupes, mots de passe.

  • Partages SMB (bloc géré, validé par testparm avant restart) et exports NFS (exportfs) ; chemins restreints à /mnt/ et /srv/.

  • 2FA TOTP (stdlib, sans dépendance) : enrôlement + login en 2 étapes.

  • Durcissement : headers sécurité, anti-CSRF (origine), rate-limit login, purge sessions, base 0600.

  • Mises à jour : Debian (liste + apply) et application (git + restart), backup auto de la config avant chaque MAJ.

  • Notifications : webhook + email (en option : Telegram, ntfy), désactivées par défaut, test intégré, envoi auto sur alerte critique.

  • Métriques : courbes natives (CPU, mémoire, réseau ↓/↑, I/O par disque, température SMART) échantillonnées depuis /proc et le SMART, rendues en sparklines SVG maison (aucune dépendance, aucun CDN) ; timer systemd toutes les 5 min, purge auto > 7 jours. Fonctionne aussi sur disques virtuels (CPU/mémoire/réseau/I/O ; température si SMART exposé).

Tests

Suite pytest (base SQLite temporaire, isolée du système) + pyflakes (noms non définis) ; lancée à chaque push/PR par Forgejo Actions.

pip install -r requirements.txt -r requirements-dev.txt
bash tools/ci.sh          # pyflakes + pytest
# ou
python -m pytest -q       # ~59 tests

Couverture : chargement des 21 modules, inventaire/format des 56 outils MCP, réponses des outils de lecture, fonctions partagées UI+MCP (utilisateurs, spares, notifications, remplacement, métriques) et pages web protégées.

Roadmap

Licence

MIT.