Pour votre DSI / bénévole tech

Fiche technique pour votre DSI

Cette page résume la stack technique, la sécurité, les sauvegardes et les options de portabilité de 1asso1site. Pas de marketing, juste les faits techniques pour évaluer si l'outil convient à votre asso.

Stack technique

LangagePython 3.13 (pyenv + Poetry)
Framework webFastAPI + Starlette (ASGI)
TemplatesJinja2 (autoescape activé)
Base de donnéesSQLite (WAL mode), 1 fichier par site
BackupsLitestream (replica continu, point-in-time recovery)
Reverse proxyCaddy v2 (HTTPS Let's Encrypt automatique)
Init systemsystemd (service templatisé)
Emailaiosmtplib + SMTP O2Switch (France)
Markdownmarkdown-it-py (HTML brut désactivé)
FrontendCSS vanilla avec tokens centralisés, JS vanilla minimal
Pas utilisésReact, Vue, Angular, Tailwind, Bootstrap, webpack, npm — zéro build frontend

Sécurité (état de l'art 2026)

  • Authentification : argon2id (RFC 9106, params time_cost=3 memory=65536 parallelism=4)
  • 2FA admin : TOTP (RFC 6238, pyotp), forcé au 1er login
  • Sessions : cookies HttpOnly + Secure + SameSite=Strict, rotation après changement de mdp
  • CSRF : double-submit cookie (middleware ASGI pur, pas BaseHTTPMiddleware qui casse SSE)
  • CSP : stricte avec nonce par requête (pas de unsafe-inline)
  • Autres headers : HSTS, X-Frame-Options DENY, X-Content-Type-Options nosniff, COOP, CORP, Permissions-Policy stricte
  • Rate-limit : slowapi (5/min login, 3/h contact, 5/h inscription, 120/min global)
  • Anti brute-force : lock 30 min après 3 échecs de login successifs
  • IP hashées : SHA-256 + SECRET_KEY (jamais stockées en clair)
  • Webhook Stripe : signature HMAC vérifiée, tolerance 300 s (anti-replay)
  • Secrets en DB : Fernet (AES-128 + HMAC-SHA-256) pour les mdp mailbox
  • Credentials livrés : lien signé HMAC 24 h one-shot (jamais en clair dans un email)
  • Upload logos : magic bytes + sanitization SVG par allowlist, compression Pillow auto

Hébergement et données

  • Datacenter : Hetzner Online GmbH, Allemagne (UE, RGPD strict)
  • Isolation : 1 base SQLite par site (couveuse) ou 1 dossier dédié par site (programme séparé)
  • Sauvegardes : Litestream continu (sync interval 10 s, retention 168 h, snapshot toutes les 6 h)
  • Replica off-site : copie quotidienne vers serveur Fidesia (autre datacenter UE)
  • Récupération : point-in-time recovery jusqu'à 7 jours en arrière
  • Sous-traitants RGPD signés : Hetzner (DPA UE), Stripe Ireland (DPA UE), O2Switch (France)
  • Pas de transfert hors UE. Pas de réplication chez un GAFAM

Portabilité (vous pouvez partir)

Trois mécanismes pour ne jamais vous retrouver bloqués :

  1. Export CSV des adhérents (RGPD art. 20 — portabilité) depuis l'admin Inscriptions. Inclut tous les champs personnalisés du formulaire. Format compatible Excel / LibreOffice / Google Sheets.
  2. Snapshot complet sur demande : contact@1asso1site.fr, sous 7 jours, vous recevez un tarball chiffré (chiffrement OpenSSL AES-256-CBC + PBKDF2 600 000 itérations) avec votre base SQLite + replica Litestream + fichier .env masqué. Vous pouvez relancer votre site sur n'importe quel VPS Linux.
  3. Achat définitif (formule L3) : vous récupérez le code source complet sur votre propre dépôt Git. Licence d'utilisation et de modification non exclusive, gratuite à vie, accordée par Digitoptimmo. Tarifs : 600 € depuis programme séparé, 799 € depuis couveuse (extraction plus complexe).

Mises à jour et déploiement

  • Déploiement continu : les améliorations du moteur sont déployées automatiquement chez tous les clients (sauf ceux qui ont choisi l'achat définitif, qui décident eux-mêmes de leurs upgrades).
  • Versioning sémantique : breaking changes signalés par bump majeur. Pour l'instant en v1.16, aucun breaking change depuis v1.0.
  • Migrations DB : CREATE TABLE IF NOT EXISTS + _safe_alter idempotent, jamais de DROP destructif.
  • Tests automatisés : environ 340 tests pytest (sécurité, CSP, CSRF, routes, services). Lancés à chaque commit.
  • Lint : ruff (Python) clean en continu.

Ce que nous n'utilisons PAS (zéro SaaS externe)

Liste des outils que d'autres plateformes utilisent, et que nous avons délibérément exclus :

AnalyticsPas de Google Analytics, Plausible cloud, Matomo cloud, Mixpanel, etc.
Monitoring erreursPas de Sentry, Datadog, Bugsnag, Rollbar, etc.
Anti-botPas de Cloudflare Turnstile, Google reCAPTCHA, hCaptcha. Honeypot + rate-limit suffisent.
CDNPas de Cloudflare, Akamai, Fastly. Caddy + cache HTTP natif suffit.
FontsPas de Google Fonts, Adobe Fonts. Stack système (ui-serif / ui-sans-serif).
Hosting frontendPas de Vercel, Netlify, GitHub Pages. Tout self-hosted sur le VPS.
Auth tiercePas d'Auth0, Clerk, Supabase Auth. Auth maison argon2id + TOTP.
RecherchePas d'Algolia, ElasticSearch cloud. SQLite FTS suffit.

Les seules dépendances externes : Stripe (paiement, sous-traitant DPA UE) et O2Switch (SMTP outbound, France).

Confirmer cette action