Julien Denizot 4ae561b6aa
Build & Deploy / build-deploy (push) Failing after 10m45s
ci: ci: persistent target dir for incremental builds
2026-04-13 21:34:13 +02:00
2026-04-13 17:56:39 +02:00
2026-04-13 17:56:39 +02:00
2026-04-13 19:30:57 +02:00
2026-04-13 17:56:39 +02:00
2026-04-13 17:56:39 +02:00
2026-04-13 17:56:39 +02:00
2026-04-13 17:56:39 +02:00
2026-04-13 17:56:39 +02:00

Enuxia Quiz

Application de quiz pédagogique souveraine et auto-hébergée, construite en Rust full-stack.

Conçue pour un usage en présentiel (cours, examens) — les étudiants passent le quiz depuis leur navigateur, le professeur consulte les résultats et les statistiques depuis une interface d'administration protégée.

Stack technique

Composant Technologie
Frontend + Backend Leptos 0.8 SSR + Axum
Base de données SQLite via SQLx
CSS Tailwind v4
Compilation WASM wasm-bindgen
Déploiement cible Raspberry Pi 5 (ARM64)
Reverse proxy Traefik

Fonctionnalités

Côté étudiant

  • Accès protégé par un code de session distribué le jour J
  • Sélection du quiz, saisie du prénom et nom
  • Navigation avant/arrière entre les questions
  • Minuteur optionnel avec soumission automatique
  • Correction détaillée avec les bonnes réponses après soumission

Côté administration

  • Création et édition de quiz (questions, réponses, options)
  • Ordre aléatoire des questions et/ou des réponses par quiz
  • Blocage anti-doublon — un étudiant ne peut pas repasser sans autorisation
  • Reset individuel — le professeur autorise une nouvelle tentative
  • Statistiques — moyenne, distribution des scores, taux de réussite par question
  • Export CSV des résultats
  • Configuration des codes d'accès en live sans recompilation

Sécurité

  • Interface admin accessible uniquement via VPN (conseillé)
  • Cookies de session httponly
  • Normalisation des noms (lowercase + trim) pour l'anti-doublon

Architecture de déploiement

Internet
    │
    ▼
Traefik Gateway (VM OVH)
    ├── quiz.enuxia.fr          → étudiants (public)
    └── admin-quiz.enuxia.fr    → professeur (VPN uniquement)
              │
              ▼
    Raspberry Pi 5
    └── enuxia-quiz (binaire Rust, systemd)
        └── quiz.db (SQLite local)

Installation

Prérequis

rustup target add wasm32-unknown-unknown
cargo install cargo-leptos
# node et npm installés

Développement

git clone https://git.enuxia.fr/Enuxia-Public/enuxia-quiz
cd enuxia-quiz
cp .env.example .env
# Éditez .env avec vos valeurs
touch quiz.db
cargo leptos serve

Production (binaire)

cargo leptos build --release
# Le binaire est dans target/release/enuxia-quiz
# Les assets sont dans target/site/

Configuration

Créez un fichier .env :

DATABASE_URL=sqlite:///chemin/absolu/vers/quiz.db
SESSION_PASSWORD=code_distribué_aux_étudiants
ADMIN_PASSWORD=mot_de_passe_admin
LEPTOS_SITE_ROOT=/opt/enuxia-quiz/site
LEPTOS_SITE_ADDR=0.0.0.0:3010
LEPTOS_TAILWIND_VERSION=v4.1.13

Les mots de passe sont également modifiables en live depuis /admin/config sans redémarrer l'application.

Gestion du service (systemd)

# Démarrer
systemctl start enuxia-quiz

# Arrêter
systemctl stop enuxia-quiz

# Redémarrer
systemctl restart enuxia-quiz

# Voir l'état
systemctl status enuxia-quiz

# Logs en temps réel
journalctl -u enuxia-quiz -f

# Activer/désactiver le démarrage automatique
systemctl enable enuxia-quiz
systemctl disable enuxia-quiz

CI/CD

Pipeline Gitea Actions (.gitea/workflows/build-deploy.yml) :

  • Runner ARM64 natif sur le Pi — build natif, tous les cores utilisés
  • Cache Cargo — premier build ~15min, suivants ~3min
  • Deploy automatiquecargo leptos build --release + systemctl restart
push main → runner Pi → cargo leptos build → cp binaire → systemctl restart

Licence

MIT — libre d'utilisation, de modification et de déploiement.


Construit par Enuxia — systèmes intelligents souverains sur mesure.

S
Description
Application de quiz pédagogique souveraine — Leptos SSR + Axum + SQLite. Auto-hébergée, anti-doublon, reset étudiant, stats, minuteur.
Readme Unlicense 181 KiB
Languages
Rust 80.7%
CSS 17%
TypeScript 1.5%
Dockerfile 0.6%
JavaScript 0.2%