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

Scénario self-host à la maison

Sur une machine Linux (Ubuntu / Debian typique), ./install.sh prépare le venv Python, les dossiers de stockage et le service systemd. Le serveur FastAPI écoute sur le port 8888 ; Avahi expose nexusnas.local pour éviter de chercher l'IP. Depuis un téléphone, on ouvre l'URL, on ajoute à l'écran d'accueil pour obtenir la PWA, on crée les comptes famille (admin + utilisateurs avec quota), puis on teste glisser-déposer, prévisualisation PDF / média, corbeille et favoris — le tout sans fournisseur cloud.

Onboarding

Premier utilisateur = admin ; JWT 24 h ; isolation des répertoires par compte — parfait pour montrer le modèle multi-utilisateurs sur un seul disque.

Journal & monitoring

Panneau CPU / RAM / disque et journal d'activité : utile pour une démo « infra maison » devant un NAS branché sur le LAN.

Hors-ligne partiel

Service worker : reprise de l'interface et du cache après une coupure courte — illustre l'approche PWA documentée dans le projet.

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