Files
2026-06-09 18:40:21 +02:00

147 lines
5.9 KiB
Markdown

---
title: myDrive
created: 2026-06-07
updated: 2026-06-07
type: app
tags: [catalogue, cloud-storage, nodejs, file-sharing, mongo, simple]
confidence: medium
contested: false
sources: [https://selfh.st/apps/?tag=Self-hosted+Cloud, https://github.com/subnub/myDrive]
---
# 💾 myDrive
> **Un clone simplifié de Google Drive écrit en Node.js** : une application modulaire qui mise sur la simplicité, avec une interface web élégante, un client de synchronisation natif et la prise en charge multi-utilisateurs, idéale pour les petits déploiements perso ou de famille.
## 📋 Informations Générales
| Métadonnée | Valeur |
| :--- | :--- |
| **Site web** | [mydrive.nicholas.guru](https://mydrive.nicholas.guru/) |
| **GitHub** | [subnub/myDrive](https://github.com/subnub/myDrive) |
| **License** | MIT |
| **Langage** | TypeScript / Node.js (Express + React) |
| **Étoiles** | 4 800 ⭐ |
| **Dernière MAJ** | 2026-04-18 |
| **Catégorie** | [[cat-cloud-storage]] |
## 📝 Description
**myDrive** est un projet éducatif et fonctionnel d'un développeur solo (Subnub / Nicholas Van Oudtshoorn) qui vise à recréer l'expérience de Google Drive avec une stack moderne 100 % JavaScript : Express pour l'API REST, MongoDB pour la persistance, React pour l'interface web, et un client de synchronisation écrit en Node.js capable de tourner en daemon sur Windows/macOS/Linux.
L'ambition n'est pas de rivaliser avec [[app-nextcloud]] en termes de fonctionnalités (pas d'agenda, pas de contacts, pas d'édition collaborative), mais de proposer une **base saine et lisible** pour quiconque souhaite comprendre comment construire un cloud storage. Le code est structuré en monorepo avec un backend, un frontend et un client de sync séparés. La sécurité inclut chiffrement AES-256-CBC côté serveur, hash Argon2 pour les mots de passe, JWT pour les sessions et WebSocket pour les notifications temps réel.
L'UI web est fluide et propose les classiques : upload drag-and-drop avec barre de progression, prévisualisation d'images / vidéos / PDF, partage par lien, gestion de dossiers, recherche, partage multi-utilisateurs. Le client desktop synchronise en arrière-plan avec déduplication par hash. Pour un usage en production familiale de 2-5 personnes, c'est largement suffisant ; pour de l'entreprise, mieux vaut se tourner vers [[app-seafile]] ou [[app-owncloud]].
⚠️ Note : la cadence de développement a ralenti depuis 2023 ; le projet est néanmoins fonctionnel et reste un excellent terrain d'apprentissage.
## 🚀 Installation
### Option 1 : Docker Compose (recommandé)
```yaml
# docker-compose.yml
version: '3.8'
services:
mongo:
image: mongo:7
container_name: mydrive-mongo
restart: unless-stopped
volumes:
- mongo_data:/data/db
backend:
image: ghcr.io/subnub/mydrive-backend:latest
container_name: mydrive-backend
restart: unless-stopped
depends_on:
- mongo
environment:
MONGO_URL: mongodb://mongo:27017/mydrive
JWT_SECRET: ${JWT_SECRET}
ENCRYPTION_SECRET: ${ENCRYPTION_SECRET}
NODE_ENV: production
WEB_PORT: 3000
frontend:
image: ghcr.io/subnub/mydrive-frontend:latest
container_name: mydrive-frontend
restart: unless-stopped
ports:
- "8080:3000"
depends_on:
- backend
volumes:
- mydrive_files:/files
volumes:
mongo_data:
mydrive_files:
```
### Option 2 : Monorepo local (dev)
```bash
git clone https://github.com/subnub/myDrive.git
cd myDrive
# Backend
cd backend && npm install && npm start
# Frontend (autre terminal)
cd ../frontend && npm install && npm start
```
## ⚙️ Configuration
- **Variables d'environnement** : `MONGO_URL`, `JWT_SECRET`, `ENCRYPTION_SECRET` (à externaliser dans un `.env`).
- **Premier compte** : à créer via l'UI, le premier utilisateur est admin par défaut.
- **Stockage** : dossier `/files` mappé sur l'hôte via volume.
- **Reverse-proxy** : laissez [[app-traefik]] gérer le TLS et l'auth de base supplémentaire si exposé publiquement.
- **Sync client** : téléchargeable depuis la page releases GitHub pour Windows/macOS/Linux.
## 🔄 Alternatives
### Open Source
- [[app-nextcloud]] — La suite complète
- [[app-cloudreve]] — Go, plus rapide et complet
- [[app-owncloud]] — PHP, plus ancien
- [[app-seafile]] — C, performances de sync
- [[app-opencloud]] — Go, fork OCIS
- [[app-oxicloud]] — Rust, moderne
- [[app-sync-in]] — Node.js, autre alternative légère
- [[app-kinto]] — JSON storage, pas fichiers
- **FileBrowser** — UI web minimaliste sur Go
- **Plex/Jellyfin** — Si l'usage est plutôt média
### Propriétaires (ce que cette app remplace)
- **Google Drive** — partage, prévisualisation
- **Microsoft OneDrive** — sur Windows
- **iCloud Drive** — sur Apple
- **Dropbox Basic** — cloud perso
## 🔐 Sécurité
- **Authentification** : JWT, hash Argon2 des mots de passe.
- **Chiffrement at-rest** : AES-256-CBC appliqué aux fichiers uploadés, clé dans `ENCRYPTION_SECRET` (à sauvegarder séparément, sinon données irrécupérables).
- **HTTPS** : obligatoire en prod, à terminaison sur le reverse-proxy.
- **Sessions** : expiration configurable, refresh token possible.
- **Logs** : Winston, exportables vers votre stack [[cat-monitoring]].
- **Mises à jour** : la cadence a ralenti ; avant d'exposer publiquement, auditer le code et limiter à un usage privé.
- **MFA** : non intégrée nativement, à compenser par un reverse-proxy auth (ex. [[app-authelia]]).
## 📚 Ressources
- [Site officiel](https://mydrive.nicholas.guru/)
- [GitHub subnub/myDrive](https://github.com/subnub/myDrive)
- [Wiki](https://github.com/subnub/myDrive/wiki)
- [Démo en ligne](https://demo.mydrive.nicholas.guru/)
## Pages Liées
- [[cat-cloud-storage]] — Catégorie Cloud Storage
- [[recettes-docker-compose]] — Templates Docker
- [[app-nextcloud]] — Plus complet
- [[app-cloudreve]] — Plus moderne
- [[securisation-home-lab]] — Sécurité
- [[Catalogue-Self-Hosted]] — Hub