SelfVault est une application auto-hébergeable de stockage personnel de fichiers. Respectant la philosophie BYOI (Bring Your Own Infrastructure), chaque utilisateur peut déployer son propre backend, base de données et stockage où il le souhaite.
- Open-source et auto-hébergeable
- BYOI : vous contrôlez votre infrastructure
- Sécurité : chiffrement, authentification robuste, bonnes pratiques
- Portable : architecture modulaire permettant le changement de DB/stockage/auth
- Aucune dépendance obligatoire : fonctionne sans service externe (Supabase, AWS, etc.)
"Supabase is a default provider, not a requirement."
- Authentification flexible :
- Supabase Auth (social login, email verification) - par défaut
- Auth locale (JWT + bcrypt) - totalement autonome
- Upload/Download de fichiers
- Organisation par catégories
- Gestion des métadonnées (nom, taille, type MIME, hash SHA256)
- Contrôle de visibilité (privé/public/partagé)
- Stockage flexible :
- Supabase Storage (par défaut)
- Local (système de fichiers)
- S3/MinIO (compatible AWS S3)
- Partage de fichiers avancé :
- Génération de liens de partage uniques
- Expiration configurable (1h, 24h, 7 jours, 30 jours, jamais)
- Protection par mot de passe optionnelle
- Limite de téléchargements
- Révocation instantanée
- Quotas de stockage par utilisateur
- API REST complète
- Interface web moderne (React + TailwindCSS)
- Support Docker
SelfVault/
├── backend/ # API REST (Node.js + Express + TypeScript + Prisma)
│ └── src/
│ ├── auth/ # Providers d'authentification (Supabase, Local)
│ └── adapters/ # Adaptateurs de stockage (Supabase, S3, Local)
├── frontend/ # Interface web (React + Vite + TypeScript + TailwindCSS)
│ └── src/
│ └── services/auth/ # Services d'auth abstrait
├── docs/ # Documentation détaillée
├── docker-compose.yml # Développement local (PostgreSQL + MinIO + Auth local)
├── docker-compose.prod.yml # Production (optimisé, Nginx)
├── .env.example # Template des variables d'environnement
└── README.md # Ce fichier
| Configuration | Auth | Storage | Database | Dépendances externes |
|---|---|---|---|---|
| Full Supabase | Supabase | Supabase | PostgreSQL (Supabase) | Supabase |
| Full Self-Hosted | Local | S3/MinIO | PostgreSQL/MySQL | Aucune |
| Hybride | Supabase | S3/MinIO | PostgreSQL | Supabase (auth only) |
| Dev Local | Local | Local | SQLite | Aucune |
Quelques tâches planifiées pour les prochaines versions — voir NEXT_STEPS.md pour le détail :
- Ajouter un
docker-compose.prod.ymld'exemple pour la production - Créer workflows CI (lint / test / build)
Implémenter un adaptateur S3/MinIO pour supporter un stockage BYOI✅Implémenter l'authentification locale (sans Supabase)✅- Ajouter guide
MIGRATION.mdet exemples Nginx / Let's Encrypt
Backend :
- Node.js + TypeScript
- Express.js (API REST)
- Prisma (ORM multi-DB : PostgreSQL, MySQL, SQLite)
- Auth abstrait : Supabase Auth ou JWT local
- Storage abstrait : Supabase, S3/MinIO, Local
- Jest + Supertest (tests)
Frontend :
- React 18
- Vite
- TypeScript
- TailwindCSS
- Supabase Client
Infrastructure :
- Docker + Docker Compose (fichier de développement fourni)
- Node.js 18+
- Docker et Docker Compose
- (Optionnel) Un compte Supabase pour utiliser leur auth/storage
Aucune dépendance externe requise - PostgreSQL + MinIO + Auth locale
# 1. Cloner le projet
git clone https://github.com/Amine830/SelfVault.git
cd selfvault
# 2. Lancer avec Docker (PostgreSQL + MinIO + Backend + Frontend)
docker compose up -d
# 3. Accéder à l'application
# Frontend: http://localhost:5173
# Backend: http://localhost:8080
# MinIO: http://localhost:9001 (minioadmin/minioadmin123)Créez un compte directement sur http://localhost:5173 - l'authentification est gérée localement.
# 1. Cloner le projet
git clone https://github.com/Amine830/SelfVault.git
cd selfvault
# 2. Configurer Supabase
cp .env.example .env
# Éditez .env avec vos clés Supabase
# 3. Lancer
./install.sh && ./start.sh- Créez un projet sur supabase.com
- Créez un bucket de stockage nommé
filesdans Storage - Configurez les politiques d'accès (RLS)
- Récupérez vos clés API (Project Settings > API)
- Clonez le repository :
git clone https://github.com/Amine830/SelfVault.git
cd selfvault- Copiez et configurez les variables d'environnement :
cp .env.example .env
# Éditez .env avec vos clés Supabase- Lancez l'installation :
chmod +x install.sh
./install.sh- Démarrez l'application :
chmod +x start.sh
./start.shL'application sera accessible sur :
- Frontend : http://localhost:5173
- Backend API : http://localhost:8080
cd backend
npm install
npx prisma generate
npx prisma migrate deploy
npm run devcd frontend
npm install
npm run dev# Démarre PostgreSQL + MinIO + Backend + Frontend avec hot-reload
docker compose up -d
# Voir les logs
docker compose logs -f
# Arrêter
docker compose down# 1. Configurer l'environnement
cp .env.example .env
# Éditer .env avec des mots de passe sécurisés
# 2. Lancer en production
docker compose -f docker-compose.prod.yml up -dVoir docs/LOCAL_DEPLOYMENT.md pour le guide complet.
cd backend
npm test # Tous les tests
npm run test:coverage # Avec coverage
npm run test:watch # Mode watchcd frontend
npm testPOST /auth/register- InscriptionPOST /auth/login- ConnexionGET /me- Profil utilisateur
POST /files/upload- Upload fichierGET /files- Liste des fichiers (pagination)GET /files/:id- Métadonnées d'un fichierGET /files/:id/download- Télécharger un fichierPATCH /files/:id- Modifier métadonnéesDELETE /files/:id- Supprimer un fichier
POST /files/:id/share- Créer un lien de partageGET /files/:id/share- Infos de partage d'un fichierDELETE /files/:id/share- Révoquer le lien de partageGET /share/:token/info- Infos publiques (sans auth)GET /share/:token/download- Télécharger via lien (sans auth)POST /share/:token/url- Obtenir URL signée (sans auth)GET /public/files- Liste des fichiers publics
GET /categories- Liste des catégoriesPOST /categories- Créer catégorieDELETE /categories/:id- Supprimer catégorie
GET /settings- Paramètres utilisateurPATCH /settings- Modifier paramètres
Tous les endpoints nécessitent un token JWT dans le header Authorization: Bearer <token>.
- Swagger UI disponible sur
http://localhost:8080/docs - Spécification OpenAPI brute sur
http://localhost:8080/docs/openapi.json - Fichier source :
src/docs/openapi.json
- HTTPS/TLS obligatoire en production
- Validation des entrées (Zod)
- Protection contre injection SQL (Prisma ORM)
- Rate limiting
- Headers de sécurité (Helmet)
- CORS configuré
- Hash d'intégrité (SHA256) pour chaque fichier
- Service key Supabase jamais exposée au client
Il est recommandé de :
- Changer le
JWT_SECRETtous les 90 jours - Régénérer les clés Supabase en cas de compromission
- Faire des backups réguliers de la base de données
Le projet V1 utilise Supabase comme provider par défaut (Auth, Postgres, Storage). La portabilité vers une stack Postgres+MinIO/S3 est prévue mais les adaptateurs et guides détaillés ne sont pas encore fournis dans cette version. Voir NEXT_STEPS.md pour la liste des tâches nécessaires à la migration.
backend/src/
├── controllers/ # Gestionnaires de routes
├── services/ # Logique métier
├── middlewares/ # Auth, validation, rate limiting
├── routes/ # Définition des routes
├── adapters/ # Adaptateurs storage (Supabase, local)
├── utils/ # Utilitaires
└── (types/) # Types TypeScript (non fournis dans cette version)
- TypeScript strict mode activé
- ESLint + Prettier
- Commits conventionnels (Conventional Commits)
- Tests obligatoires pour les nouvelles fonctionnalités
Les logs sont structurés avec Winston/Pino :
# Logs backend
docker-compose logs -f backend
# Logs frontend
docker-compose logs -f frontend- Installez Docker et Docker Compose
- Configurez Nginx avec Let's Encrypt :
sudo apt install nginx certbot python3-certbot-nginx
sudo certbot --nginx -d votre-domaine.com- Déployez avec Docker Compose :
git clone https://github.com/yourusername/selfvault.git
cd selfvault
cp .env.example .env
# Configurez .env
docker-compose -f docker-compose.prod.yml up -d- Configurez Nginx comme proxy reverse
Workflows de CI/CD (GitHub Actions) non fournis dans cette version. Voir NEXT_STEPS.md pour les tâches proposées (lint/test/build, publication d'images, etc.).
Les contributions sont les bienvenues ! Merci de :
- Fork le projet
- Créer une branche (
git checkout -b feature/amazing-feature) - Commit vos changements (
git commit -m 'feat: add amazing feature') - Push vers la branche (
git push origin feature/amazing-feature) - Ouvrir une Pull Request
Ce projet est sous licence MIT. Voir le fichier LICENSE pour plus de détails.
- Email : amine.nedjar4716@gmail.com
- Issues : GitHub Issues
- Discussions : GitHub Discussions
SelfVault - Votre stockage, votre infrastructure, votre contrôle.