246 lines
No EOL
7 KiB
Markdown
246 lines
No EOL
7 KiB
Markdown
# Système Nextcloud SNT - Résumé Complet
|
||
|
||
## 🎯 Objectif
|
||
|
||
Système automatisé pour l'enseignement SNT avec Nextcloud gérant **180 élèves** (6 classes × 30 élèves) avec distribution et collecte automatique des devoirs.
|
||
|
||
## 🏗️ Architecture Finale
|
||
|
||
### Structure serveur
|
||
```
|
||
/var/www/html/nextcloud/data/
|
||
├── profsnt/files/
|
||
│ ├── Modeles_SNT/ # Modèles pour toutes classes
|
||
│ │ ├── Sequence1_Introduction_SNT/
|
||
│ │ ├── Sequence2_Web/
|
||
│ │ └── ... (7 séquences SNT)
|
||
│ └── Classes_SNT/ # Rendus par classe
|
||
│ ├── 2nde1/Rendus/
|
||
│ ├── 2nde2/Rendus/
|
||
│ └── ...
|
||
└── [eleve]/files/SNT/ # Espace de travail élève
|
||
├── Sequence1_Introduction_SNT/
|
||
└── ...
|
||
```
|
||
|
||
### Configuration
|
||
- **Quotas :** 125MB par élève (optimisé pour 25GB serveur)
|
||
- **Groupe :** "eleves" pour gestion centralisée
|
||
- **Comptes :** Allégés (sans fichiers par défaut Nextcloud)
|
||
- **Sécurité :** Politique mots de passe assouplie (4 caractères minimum)
|
||
|
||
## 🔧 Scripts Opérationnels
|
||
|
||
### 1. `setup_complet_snt.sh` - Création des comptes
|
||
|
||
```bash
|
||
# Usage
|
||
./setup_complet_snt.sh eleves.csv
|
||
|
||
# Format CSV
|
||
Classe,Nom,Prenom,Email,MotDePasse
|
||
2nde1,Martin,Paul,paul.martin@lycee.fr,1234
|
||
```
|
||
|
||
**Fonctions :**
|
||
- Création 180 comptes avec mots de passe du CSV
|
||
- Ajout au groupe "eleves"
|
||
- Quotas 125MB
|
||
- Structure SNT/ dans chaque espace élève
|
||
- Création Modeles_SNT/ chez prof
|
||
- Suppression fichiers par défaut Nextcloud
|
||
|
||
### 2. `distribution_modeles.sh` - Distribution intelligente
|
||
|
||
```bash
|
||
# Usage
|
||
./distribution_modeles.sh # Toutes classes
|
||
./distribution_modeles.sh 2nde1 # Classe spécifique
|
||
./distribution_modeles.sh 2nde1 csv # Avec CSV custom
|
||
```
|
||
|
||
**Fonctions :**
|
||
- Distribue depuis Modeles_SNT/ unique
|
||
- Ajoute suffixe `_v0` aux fichiers distribués
|
||
- Ne distribue QUE si aucune version n'existe (v0,v1,v2... ou fichier sans version)
|
||
- Gère les espaces dans noms de fichiers
|
||
- Rescan automatique pour visibilité immédiate
|
||
|
||
### 3. `collecte_final.sh` - Collecte avec historique
|
||
|
||
```bash
|
||
# Usage
|
||
./collecte_final.sh eleves.csv
|
||
```
|
||
|
||
**Fonctions :**
|
||
- Collecte fichiers modifiés (30 dernières minutes)
|
||
- Historique automatique : v1, v2, v3...
|
||
- Anti-doublons MD5 (pas de version si contenu identique)
|
||
- Gère tous patterns versions : `_v1`, `v1`, `-v1`, `v1`
|
||
- Gestion robuste des espaces dans noms
|
||
- Compteur précis des fichiers collectés
|
||
|
||
### 4. `gestion_comptes.sh` - Administration
|
||
|
||
```bash
|
||
./gestion_comptes.sh lister # Liste comptes + groupe
|
||
./gestion_comptes.sh groupe # Infos groupe eleves
|
||
./gestion_comptes.sh quota-groupe # Modifier quotas en masse
|
||
./gestion_comptes.sh verifier # Vérifier comptes existants
|
||
./gestion_comptes.sh nettoyer # Suppression fin d'année
|
||
```
|
||
|
||
## 📊 Workflow de Production
|
||
|
||
### Setup initial
|
||
```bash
|
||
1. ./setup_complet_snt.sh eleves_complets.csv
|
||
2. Création modèles dans Modeles_SNT/ via interface web
|
||
3. ./distribution_modeles.sh
|
||
4. Crontab : */30 8-17 * * 1-5 /scripts/collecte_final.sh
|
||
```
|
||
|
||
### Workflow élève
|
||
- **Reçoit :** `Exercise_v0.docx` (modèle à conserver)
|
||
- **Travaille sur :** `Exercise_v1.docx`, `v2.docx`, etc.
|
||
- **Collecte :** Automatique toutes les 30 min
|
||
- **Interface :** Épurée (seulement dossier SNT/)
|
||
|
||
## 🎯 Points Techniques Importants
|
||
|
||
### Gestion des espaces
|
||
- `find -print0` + `IFS= read -r -d ''` pour fichiers avec espaces
|
||
- `find` au lieu de glob bash pour détection versions
|
||
|
||
### Anti-doublons
|
||
- Comparaison MD5 avec version précédente
|
||
- Évite stockage inutile si contenu identique
|
||
|
||
### Permissions
|
||
- Tous scripts en root (nécessaire pour occ)
|
||
- `chown www-data:www-data` systématique après création
|
||
- Rescan obligatoire pour visibilité interface
|
||
|
||
### Format CSV
|
||
```csv
|
||
Classe,Nom,Prenom,Email,MotDePasse
|
||
2nde1,Martin,Paul,paul.martin@lycee.fr,1234
|
||
2nde1,Dupont,Sophie,sophie.dupont@lycee.fr,5678
|
||
```
|
||
|
||
## 🔧 Commandes Utiles
|
||
|
||
### Surveillance système
|
||
```bash
|
||
# Espace utilisé
|
||
du -sh /var/www/html/nextcloud/data/
|
||
|
||
# Statistiques groupe
|
||
sudo -u www-data php /var/www/html/nextcloud/occ group:list-users eleves
|
||
|
||
# Rescan manuel
|
||
sudo -u www-data php /var/www/html/nextcloud/occ files:scan username
|
||
|
||
# Vérifier quota élève
|
||
sudo -u www-data php /var/www/html/nextcloud/occ user:info username
|
||
```
|
||
|
||
### Debug et maintenance
|
||
```bash
|
||
# Logs Nextcloud
|
||
sudo -u www-data php /var/www/html/nextcloud/occ log:tail
|
||
|
||
# Nettoyer cache
|
||
sudo -u www-data php /var/www/html/nextcloud/occ files:cleanup
|
||
|
||
# Statistiques collecte
|
||
find /var/www/html/nextcloud/data/profsnt/files/Classes_SNT -name "*.docx" | wc -l
|
||
```
|
||
|
||
## 📝 Pour Interface Web
|
||
|
||
### Scripts à interfacer
|
||
|
||
1. **Setup**
|
||
- Upload CSV → Exécution setup → Affichage résultats
|
||
- Validation format CSV
|
||
- Progression en temps réel
|
||
|
||
2. **Distribution**
|
||
- Sélection classe → Exécution → Statistiques
|
||
- Aperçu modèles disponibles
|
||
- Logs de distribution
|
||
|
||
3. **Collecte**
|
||
- Bouton collecte manuelle → Résumé fichiers collectés
|
||
- Statistiques par classe/élève
|
||
- Historique des collectes
|
||
|
||
4. **Gestion**
|
||
- Quotas, stats groupe, nettoyage
|
||
- Monitoring espace disque
|
||
- Administration groupe élèves
|
||
|
||
### Variables importantes
|
||
```bash
|
||
NEXTCLOUD_DATA="/var/www/html/nextcloud/data"
|
||
PROF_USERNAME="profsnt"
|
||
SCRIPTS_PATH="/scripts/"
|
||
NEXTCLOUD_ROOT="/var/www/html/nextcloud"
|
||
```
|
||
|
||
### Résultats à parser
|
||
|
||
**Compteurs :**
|
||
- `(\d+) fichier\(s\) collecté\(s\)` - Nombre fichiers collectés
|
||
- `(\d+) fichier\(s\) distribué\(s\)` - Nombre fichiers distribués
|
||
- `(\d+) comptes créés` - Nombre comptes créés
|
||
|
||
**Status :**
|
||
- `✅` - Succès
|
||
- `❌` - Erreur
|
||
- `⚠️` - Avertissement
|
||
- `↔️` - Fichier identique (non collecté)
|
||
|
||
**Messages d'erreur courants :**
|
||
- `Unknown user` - Problème utilisateur
|
||
- `Permission denied` - Problème permissions
|
||
- `No such file` - Fichier/dossier manquant
|
||
|
||
### API pour interface
|
||
|
||
```javascript
|
||
// Endpoints
|
||
POST /api/setup - Upload CSV + création comptes
|
||
GET /api/classes - Liste des classes
|
||
POST /api/distribute - Distribution modèles
|
||
POST /api/collect - Collecte manuelle
|
||
GET /api/stats - Statistiques système
|
||
GET /api/logs - Logs en temps réel
|
||
```
|
||
|
||
## 🎓 Système Final Validé
|
||
|
||
### Fonctionnalités opérationnelles
|
||
- ✅ **180 élèves** opérationnels
|
||
- ✅ **Distribution intelligente** sans doublons
|
||
- ✅ **Collecte robuste** avec historique
|
||
- ✅ **Gestion des espaces** dans noms fichiers
|
||
- ✅ **Anti-doublons MD5** fonctionnel
|
||
- ✅ **Interface épurée** élèves
|
||
- ✅ **Administration centralisée**
|
||
|
||
### Capacités système
|
||
- **Stockage :** 22,5 GB utilisables (180 × 125MB)
|
||
- **Performance :** Collecte 30 min, rescan automatique
|
||
- **Robustesse :** Gestion erreurs, anti-doublons, logging
|
||
- **Scalabilité :** Extensible à plus de classes
|
||
|
||
### Sécurité
|
||
- **Isolation :** Chaque élève dans son espace
|
||
- **Groupe :** Gestion centralisée via groupe "eleves"
|
||
- **Quotas :** Limitation espace par utilisateur
|
||
- **Permissions :** Contrôle accès granulaire
|
||
|
||
--- |