Self-Hosting · FastAPI + PWA — Projet Personnel

NexusNAS

Serveur de stockage réseau privé, moderne et auto-hébergé. Interface rouge/blanc/noir, multi-utilisateurs, PWA installable, zéro dépendance cloud.

Opérationnel Python · FastAPI SQLite Async PWA MIT License

Tout ce qu'il faut, rien de trop

📁 Stockage & Fichiers

  • Upload drag & drop avec barre de progression
  • Explorateur grille ou liste
  • Prévisualisation (images, vidéos, audio, texte, PDF)
  • Recherche instantanée
  • Favoris et corbeille avec restauration
  • Dossiers illimités + fil d'Ariane
  • Quota configurable par utilisateur (50 Go défaut)

🔒 Sécurité & Utilisateurs

  • Authentification JWT (tokens 24h)
  • Hashage bcrypt des mots de passe
  • Multi-utilisateurs avec rôles (admin / user)
  • Panneau admin pour gérer les comptes
  • Isolation des données par utilisateur

🎨 Interface

  • Thème sombre rouge / blanc / noir
  • Responsive — smartphone, tablette, desktop
  • PWA installable sur tout appareil
  • Menu hamburger + sidebar rétractable
  • Notifications toast + menu contextuel clic droit

⚙️ Système

  • Monitoring temps réel (CPU, RAM, disque)
  • Journal d'activité des opérations
  • mDNS — accessible via nexusnas.local
  • Service systemd avec démarrage automatique
  • Service worker pour cache offline

Structure du projet

nas-server/ ├── app/ │ ├── config.py # Configuration (clés, chemins, quotas) │ ├── database.py # Engine SQLAlchemy async (aiosqlite) │ ├── main.py # Point d'entrée FastAPI │ ├── models/ │ │ └── models.py # User, FileEntry, ShareLink, ActivityLog │ ├── routers/ │ │ ├── auth.py # Login, register, profil, admin │ │ ├── files.py # CRUD fichiers, upload, download, corbeille │ │ └── system.py # Monitoring CPU/RAM/disque │ └── utils/ │ ├── auth.py # JWT, hashing, middleware OAuth2 │ └── files.py # Catégorisation fichiers, thumbnails ├── static/ │ ├── css/style.css # Thème complet (~1500 lignes) │ ├── js/app.js # SPA vanilla JS (~1300 lignes) │ ├── manifest.json # Manifest PWA │ └── sw.js # Service Worker ├── templates/ │ └── index.html # Shell SPA ├── storage/ # Fichiers utilisateurs (gitignored) ├── install.sh # Installation automatique ├── start.sh # Lancement du serveur └── nexusnas.service # Unit systemd

Endpoints sous /api/

Authentification

POST/api/auth/loginConnexion OAuth2
POST/api/auth/registerInscription
GET/api/auth/meProfil utilisateur

Système

GET/api/system/infoInfos système (admin)

Fichiers

GET/api/files/Lister les fichiers
POST/api/files/uploadUpload de fichier
GET/api/files/download/{id}Télécharger
POST/api/files/folderCréer un dossier
DEL/api/files/{id}Supprimer / corbeille
GET/api/files/search?q=Recherche
GET/api/files/favoritesFavoris
GET/api/files/trashCorbeille

Technologies

ComposantTechnologie
BackendFastAPI + Uvicorn
Base de donnéesSQLite (async via aiosqlite)
ORMSQLAlchemy 2.0 (async)
AuthJWT (python-jose) + bcrypt
FrontendVanilla JS (SPA) + CSS custom
ImagesPillow (thumbnails)
Monitoringpsutil
mDNSAvahi
PWAService Worker + Web App Manifest
Python FastAPI SQLite SQLAlchemy JWT Vanilla JS PWA Pillow psutil

Paramètres clés

VariableDéfautDescription
SECRET_KEYnexusnas-super-secret…Clé JWT — à changer en production
ACCESS_TOKEN_EXPIRE_MINUTES1440 (24h)Durée de validité du token
MAX_UPLOAD_SIZE10 GoTaille max par upload
PORT8888Port du serveur
STORAGE_PATH./storageRépertoire de stockage

Déploiement rapide

# Cloner le dépôt
git clone https://github.com/Irkeedia/nas-nipogi.git
cd nas-nipogi

# Installation automatique
chmod +x install.sh
./install.sh

# Lancement
./start.sh

Prérequis : Linux (Ubuntu/Debian), Python 3.10+, accès réseau local.

Le script d'installation configure automatiquement le venv, les dépendances et les dossiers de stockage. Le premier utilisateur créé est automatiquement admin.

PWA : Installable directement depuis le navigateur sur Android, iOS, PC et Mac.

Port 8888
Upload max 10 Go
Quota user 50 Go

Votre stockage, vos règles

NexusNAS — Fait avec ❤️ pour le self-hosting. Licence MIT.

Voir tous les projets