Files
Julien Denizot c0ae39075a
Build & Deploy / build-deploy (push) Has been cancelled
docs: 🎨 docs: update README with systemd and CI/CD
2026-04-13 21:30:37 +02:00

142 lines
3.7 KiB
Markdown

# 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
```bash
rustup target add wasm32-unknown-unknown
cargo install cargo-leptos
# node et npm installés
```
### Développement
```bash
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)
```bash
cargo leptos build --release
# Le binaire est dans target/release/enuxia-quiz
# Les assets sont dans target/site/
```
## Configuration
Créez un fichier `.env` :
```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)
```bash
# 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](https://enuxia.com) — systèmes intelligents souverains sur mesure.