a386a542dcbadedb1790631cc2963a7db643bf64
Build & Deploy / build-deploy (push) Failing after 2m24s
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 automatique —
cargo 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.
Languages
Rust
80.7%
CSS
17%
TypeScript
1.5%
Dockerfile
0.6%
JavaScript
0.2%