Louis Mazin df47775b0a test
2026-10-14 00:49:38 +02:00
2026-10-14 00:49:38 +02:00
2026-10-14 00:44:15 +02:00
2026-10-13 19:43:55 +02:00
2026-10-13 19:43:55 +02:00
2026-10-13 19:43:55 +02:00
2026-10-14 00:20:28 +02:00
2026-10-14 00:19:42 +02:00

GooDrive

Drive privé (React 19 + Vite 8 + Tailwind v4 + composants shadcn/ui, Django REST Framework, MySQL 8 et Docker). Construit à partir de la structure du site de la boulangerie, sans ses modules de planning / pointage.

Fonctions incluses

  • Connexion avec les comptes Django, inscription publique désactivée.
  • Dossiers imbriqués, import par bouton et glisser-déposer, classement en liste/grille, recherche, tri.
  • Aperçu des images, PDF et fichiers audio ; téléchargement direct avec des URL signées valables 5 minutes.
  • Renommer, déplacer, marquer favori, partager, mettre à la corbeille, restaurer et supprimer définitivement.
  • Espace « Partagés avec moi » : partage en lecture à tous les comptes connectés, uniquement pour les fichiers et dossiers à la racine (le partage d'un dossier inclut sa descendance).
  • Import reprenable par blocs de 8 Mio dès 8 Mio ; la progression est conservée dans le navigateur de l'utilisateur. Taille maximale réglable (50 Gio par défaut dans .env.example).
  • Fichiers sur un dossier disque persistant, métadonnées dans MySQL 8.
  • Thème clair/sombre, interface responsive avec composants shadcn/ui repris de la structure existante.

Méthode 1 — Docker Compose (MySQL 8 intégré)

Depuis le dossier GooDrive :

cp .env.example .env
# Modifier les secrets, ALLOWED_HOSTS (IP / nom de domaine), etc.
# Exemple pour un secret (ne pas copier un secret trouvé en ligne) :
python3 -c "import secrets; print(secrets.token_urlsafe(64))"
docker compose up -d --build
docker compose exec backend python manage.py createsuperuser

Puis ouvrir http://IP_DU_SERVEUR:1028/. Les comptes supplémentaires se créent dans http://IP_DU_SERVEUR:1028/django-admin/ > Utilisateurs. Les utilisateurs ordinaires ne peuvent pas gérer les autres comptes.

Le frontend React/Vite (mode développement de l’archive) écoute sur 1028 ; Django écoute sur 1029. Le proxy Vite transfère /api/, /django-admin/ et /static/ vers Django. En Docker Compose, DJANGO_PROXY_TARGET=http://backend:1029 est défini pour le conteneur frontend. Hors Compose, la valeur par défaut est http://127.0.0.1:1029 (modifiable via DJANGO_PROXY_TARGET). Il est normal que les outils réseau du navigateur affichent le port 1028 : le transfert vers le port 1029 se fait côté serveur. MySQL 8 reste privé au réseau Docker (aucun port 3306 publié). Pour une mise en production publique, remplacer le serveur de développement Vite/Django par un serveur web et Gunicorn correctement configurés.

Persistance / sauvegarde

  • Fichiers : ./storage/files/.
  • Importations en cours : ./storage/tmp/.
  • Base MySQL 8 : nouveau volume mysql8_data de Compose. L’ancien db_data n’est pas supprimé ni réutilisé. Voir MYSQL8_MIGRATION.md.

Sauvegarder ensemble le volume MySQL 8 et le dossier storage. Ne pas exécuter docker compose down -v : cela supprimerait la base stockée dans le volume.

Méthode 2 — Pterodactyl (MySQL 8 externe)

Si GooDrive tourne dans un seul conteneur Pterodactyl, son backend doit accéder à une base MySQL 8 externe, via les variables MYSQL_HOST, MYSQL_PORT, MYSQL_DATABASE, MYSQL_USER et MYSQL_PASSWORD de Pterodactyl. MYSQL_HOST=db n'est valable que pour le Docker Compose ci-dessus.

Limite de l'archive fournie : le dockerfile racine référence un start.sh absent et ne constitue pas, tel quel, une image monocon­teneur prête à déployer. Le présent correctif porte sur le mode Docker Compose. Une image Pterodactyl autonome nécessite son propre script de lancement et un serveur HTTP de production.

Reverse proxy et gros fichiers

  • Utilise HTTPS sur l'accès distant : des identifiants circulent à chaque connexion.
  • Configure ton reverse proxy externe avec une limite suffisante : client_max_body_size 0; côté nginx et proxy_request_buffering off; pour ne pas recopie entière des très gros imports (le nginx fourni est déjà configuré).
  • Les envois de 8 Mio ou plus sont fractionnés en blocs de 8 Mio et peuvent reprendre après recharge/incident côté navigateur. Un navigateur différent ne récupère pas automatiquement la session locale de reprise.
  • Limite par fichier : DRIVE_MAX_FILE_SIZE_MB. L'espace disque est celui alloué au serveur Pterodactyl, pas un quota par utilisateur.
  • Une importation interrompue reste dans storage/tmp jusqu'à reprise. Pour nettoyer les sessions de plus de 14 jours : python manage.py cleanup_uploads --days 14 dans le backend (ou docker compose exec backend python manage.py cleanup_uploads --days 14). Ne pas vider tmp pendant un import actif.

Authentification / sécurité

  • Pas d'inscription ouverte ; les comptes sont créés via Django Admin.
  • Le JWT est conservé dans sessionStorage du navigateur, le renouvellement dans la session du même onglet (refresh 7 jours, access 30 minutes). Après fermeture de l'onglet, reconnexion nécessaire.
  • Les contrôles d'accès s'effectuent côté Django ; l'UI ne suffit pas pour protéger un document.
  • Les URL de téléchargement sont temporaires (5 min) et leur possession suffit à accéder au fichier pendant leur validité. Ne les partage pas publiquement.
  • Les utilisateurs peuvent modifier leurs propres fichiers et dossiers, et lire les racines partagées par d'autres comptes. Les administrateurs Django ont accès aux objets via les vues et peuvent gérer les comptes.

Limites de cette première version

Ce n'est pas encore un Nextcloud complet : pas de lien public permanent, pas de partage à un utilisateur précis, pas d'historique des versions, pas d'édition collaborative, pas de quota individuel, pas de WebDAV/Samba et pas de stockage chiffré de bout en bout. L'aperçu vidéo et la synchronisation automatique type client Drive ne sont pas inclus. Cette version prend en charge le téléchargement et l'import via navigateur.

Pour les gros volumes de rushs (plusieurs dizaines de Go), le fractionnement évite de tout recommencer, mais les performances et la reprise sont à valider sur le réseau réel. Sauvegarde et HTTPS sont indispensables avant un usage important.

Vérifications manuelles conseillées

  1. Créer deux comptes : propriétaire A et salarié B.
  2. Avec A, créer un dossier, importer un fichier, le renommer, le télécharger et l'ouvrir.
  3. Avec B, vérifier que le dossier privé de A n'est pas accessible, puis que le dossier partagé de A est accessible en lecture seule.
  4. Déplacer un dossier, mettre un fichier en corbeille, restaurer, puis supprimer définitivement un document test.
  5. Couper volontairement la connexion au milieu d'un gros import et relancer le même fichier depuis le même navigateur pour vérifier la reprise.
  6. Redémarrer le conteneur et vérifier que les fichiers et comptes sont toujours là.

Tests automatisés

Les tests Django sont dans backend/drive/tests.py :

docker compose exec -e USE_SQLITE=1 backend python manage.py test drive

Note : dans Compose, utiliser la base de test dédiée automatique Django (normalement la base MySQL de tests) convient aussi : docker compose exec backend python manage.py test drive ; la variante SQLite évite d'avoir à créer une base MySQL de tests et n'est à réserver aux tests.

Passage depuis MariaDB / erreur ibdata1

Consulte MYSQL8_MIGRATION.md. Ne recycle pas un datadir MariaDB dans MySQL 8 : ce correctif crée un volume distinct sans effacer l’ancien.

Description
No description provided
Readme 1.3 MiB
Languages
JavaScript 64.3%
Python 34.5%
CSS 0.6%
Shell 0.5%