Système de gestion centralisée des partages SMB pour workflows vidéo professionnels
🌐 Site Web • 📦 Installation • 📚 API • 🔧 Développement
- Présentation
- Proposition de valeur
- Architecture
- Stack technique
- Fonctionnalités détaillées
- Modèle de données
- Sécurité
- Installation rapide
- Configuration
- Documentation API
- Développement
- Structure du projet
- Dépannage
- Roadmap
- Licence
- Auteur
SolidMount est un système de gestion centralisée des partages réseau SMB/CIFS conçu spécifiquement pour les environnements de post-production vidéo professionnelle. Il remplace le processus manuel et fastidieux de montage des partages Windows par un système automatisé de type "broker", offrant une expérience similaire à des solutions enterprise comme Avid NEXIS, Facilis ou EditShare.
Dans un environnement de post-production vidéo typique :
- Multiples NAS/SAN : TrueNAS, Synology, QNAP, Windows Server...
- Nombreux utilisateurs : Monteurs, assistants, étalonneurs, mixeurs... avec des niveaux d'accès différenciés.
- Partages variés : Projets, rushes, exports, archives...
- Postes multiples : Les utilisateurs changent régulièrement de station
Sans SolidMount : Chaque utilisateur doit manuellement monter ses partages avec net use, retenir les chemins UNC, les credentials, les lettres de lecteur... Un cauchemar opérationnel.
Avec SolidMount : L'utilisateur se connecte une fois, tous ses partages apparaissent automatiquement avec les bonnes lettres de lecteur. Simple, rapide, professionnel.
| Fonctionnalité | Bénéfice |
|---|---|
| Authentification unique | Un seul login pour accéder à tous les partages autorisés |
| Montage automatique | Les partages se montent automatiquement à la connexion |
| Lettres cohérentes | Toujours les mêmes lettres de lecteur, sur n'importe quel poste |
| Interface intuitive | Application moderne, simple d'utilisation |
| Mode service | Tourne en arrière-plan, disponible à tout moment |
| Fonctionnalité | Bénéfice |
|---|---|
| Gestion centralisée | Interface web unique pour tout configurer |
| Credentials masqués | Les identifiants SMB ne sont jamais exposés aux utilisateurs |
| Permissions granulaires | Contrôle précis de qui accède à quoi |
| Scanner automatique | Découverte des partages en un clic |
| Monitoring temps réel | Statut des serveurs et partages en direct |
| Fonctionnalité | Bénéfice |
|---|---|
| Léger | Serveur ~15 Mo, Client ~25 Mo |
| Sans dépendances | Pas de runtime externe (Java, .NET...) |
| Base embarquée | SQLite, pas de serveur DB à maintenir |
| Service Windows | Démarre automatiquement, logs rotatifs |
| Chiffrement | Credentials stockés en AES-256-GCM |
SolidMount utilise une architecture client-serveur classique avec une séparation claire des responsabilités :
┌─────────────────────────────────────────────────────────────────────────────┐
│ SOLIDMOUNT ECOSYSTEM │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌───────────────────────────────────────────────────────────────────────┐ │
│ │ SOLIDMOUNT SERVER │ │
│ │ (Service Windows + API REST) │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ API REST │ │ Web Admin │ │ SQLite │ │ SMB Scan │ │ │
│ │ │ (net/http) │ │ (embedded) │ │ (modernc) │ │ (go-smb2) │ │ │
│ │ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │ │
│ │ │ │ │ │ │ │
│ │ └────────────────┴────────────────┴────────────────┘ │ │
│ │ │ │ │
│ │ ┌──────┴──────┐ │ │
│ │ │ JWT + AES │ │ │
│ │ │ Security │ │ │
│ │ └─────────────┘ │ │
│ └───────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ Port 8080 │
│ (HTTP REST API) │
│ │ │
│ ┌──────────────────────────┼──────────────────────────┐ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ CLIENT │ │ CLIENT │ │ CLIENT │ │
│ │ (Poste 1) │ │ (Poste 2) │ │ (Poste N) │ │
│ │ │ │ │ │ │ │
│ │ ┌─────────┐ │ │ ┌─────────┐ │ │ ┌─────────┐ │ │
│ │ │ Wails │ │ │ │ Wails │ │ │ │ Wails │ │ │
│ │ │ Svelte │ │ │ │ Svelte │ │ │ │ Svelte │ │ │
│ │ │ Win32 │ │ │ │ Win32 │ │ │ │ Win32 │ │ │
│ │ └────┬────┘ │ │ └────┬────┘ │ │ └────┬────┘ │ │
│ └──────┼──────┘ └──────┼──────┘ └──────┼──────┘ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Z: \\nas\p1 │ │ Z: \\nas\p1 │ │ Z: \\nas\p1 │ │
│ │ Y: \\nas\p2 │ │ Y: \\nas\p2 │ │ Y: \\nas\p2 │ │
│ │ X: \\san\ex │ │ X: \\san\ex │ │ X: \\san\ex │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ Lecteurs réseau Lecteurs réseau Lecteurs réseau │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────────┐
│ INFRASTRUCTURE STOCKAGE │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ TrueNAS │ │ Synology │ │ QNAP │ │ Windows │ │
│ │ Scale │ │ DS1821+ │ │ TVS-h874 │ │ Server │ │
│ │ │ │ │ │ │ │ │ │
│ │ \\nas1\... │ │ \\nas2\... │ │ \\san\... │ │ \\srv\... │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
- Configuration : L'admin configure serveurs, credentials, partages et permissions via l'interface web
- Authentification : L'utilisateur se connecte au client avec ses identifiants SolidMount
- Récupération : Le client récupère la liste des partages autorisés via l'API REST
- Montage : Le client monte les partages en utilisant les credentials SMB stockés côté serveur
- Monitoring : Le client surveille l'état des connexions et reconnecte automatiquement si nécessaire
| Critère | Justification |
|---|---|
| Performance | Compilation native, pas de runtime, démarrage instantané |
| Déploiement | Un seul exécutable, pas de dépendances externes |
| Concurrence | Goroutines pour le monitoring parallèle des partages |
| Accessibilité | Plus accessible que Rust pour la maintenance par des non-spécialistes |
| Écosystème | Bibliothèques matures pour SMB, SQLite, JWT... |
| Critère | Justification |
|---|---|
| Embedded | Pas de serveur de base de données à installer/maintenir |
| Pure Go | Pas de CGO, compilation croisée simplifiée |
| Performance | Suffisant pour des centaines d'utilisateurs |
| Portabilité | Un seul fichier .db, backup trivial |
| Fiabilité | SQLite est la DB la plus déployée au monde |
| Critère | Justification |
|---|---|
| Natif | Utilise WebView2 (Edge Chromium), pas d'Electron |
| Léger | ~25 Mo vs ~150+ Mo pour Electron |
| Go backend | Communication directe Go ↔ Frontend |
| Moderne | Support des frameworks modernes (Svelte, React, Vue) |
| Critère | Justification |
|---|---|
| Performance | Compilation, pas de virtual DOM |
| Bundle size | Minimal, idéal pour une app desktop |
| Simplicité | Syntaxe claire, courbe d'apprentissage douce |
| Réactivité | Système réactif natif élégant |
| Critère | Justification |
|---|---|
| Pure Go | Pas de dépendance à smbclient ou autres outils externes |
| SMB 2/3 | Support des protocoles modernes |
| Scanning | Permet la découverte automatique des partages |
| Critère | Justification |
|---|---|
| Natif | API Windows officielle pour le montage réseau |
| Fiable | Comportement identique à net use |
| Contrôle | Gestion fine des credentials et options |
| Silencieux | Pas de fenêtre CMD qui apparaît |
| Composant | Technologie | Rôle |
|---|---|---|
| API REST | net/http (stdlib) |
Endpoints CRUD + authentification |
| Routage | Pattern matching manuel | Léger, pas de framework externe |
| Auth | JWT (HS256) | Tokens stateless pour API |
| Crypto | AES-256-GCM | Chiffrement des credentials stockés |
| Service | kardianos/service |
Installation comme service Windows |
| Logs | lumberjack |
Rotation automatique des fichiers log |
| Config | YAML | Configuration lisible et éditable |
| Web UI | HTML/CSS/JS embedded | Interface admin sans dépendance |
| Composant | Technologie | Rôle |
|---|---|---|
| Framework | Wails v2 | Bridge Go ↔ WebView2 |
| UI | Svelte | Interface utilisateur réactive |
| Styling | CSS custom | Design iOS 15 / Material Design |
| SMB | mpr.dll (Win32) |
Montage/démontage natif |
| Theme | DWM API | Coins arrondis Windows 11 |
| Singleton | Mutex + TCP + PID | Instance unique garantie |
| Autostart | Registry | Démarrage avec Windows |
- Installation/désinstallation comme service Windows natif
- Démarrage automatique au boot du système
- Commandes :
install,uninstall,start,stop,restart,status,run - Mode console (
run) pour le débogage - Logs rotatifs avec compression gzip automatique
- Authentification JWT avec tokens signés HS256
- Endpoints CRUD complets pour toutes les entités
- Middleware de logging et récupération d'erreurs
- CORS configuré pour les clients web
- Health check public pour monitoring externe
- Design moderne inspiré iOS 15 / Android Material Design
- Responsive : fonctionne sur desktop, tablette, mobile
- Navigation par sidebar avec indicateurs visuels
- Thème sombre optimisé pour les environnements de post-production
- Feedback visuel : toasts, loaders, confirmations
| Page | Fonctionnalités |
|---|---|
| Dashboard | Vue d'ensemble, statistiques, statut des serveurs |
| Serveurs | CRUD serveurs, test connectivité, scan partages |
| Credentials | CRUD credentials par serveur, credential par défaut |
| Partages | CRUD partages, import depuis scan, lettre par défaut |
| Utilisateurs | CRUD utilisateurs, rôles (admin/user), activation |
| Permissions | Attribution partages→utilisateurs avec lettre custom |
- Découverte automatique des partages sur un serveur
- Test de connectivité avec les credentials configurés
- Import en masse des partages découverts
- Vérification temps réel de l'accessibilité
- Chiffrement AES-256-GCM des mots de passe en base
- Clé de chiffrement générée automatiquement au premier lancement
- Credential par défaut par serveur pour le scanning
- Support domaine :
DOMAIN\userouuser@domain
- Fenêtre frameless : pas de bordure Windows native
- Coins arrondis : natifs sur Windows 11 via DWM API
- Bordure fine : contour subtil pour délimiter la fenêtre
- Titlebar custom : draggable avec boutons minimize/close
- Animations : transitions fluides, feedback visuel
| Statut | Icône | Description |
|---|---|---|
| Connecté | 🟢 | Partage monté et accessible |
| Déconnecté | ⚪ | Partage non monté |
| Connexion... | 🔄 | Montage en cours |
| Inaccessible | 🟠 | Monté mais serveur injoignable |
| Erreur | 🔴 | Échec de montage |
| Action | Résultat |
|---|---|
| Clic minimize (─) | Minimise dans la barre des tâches |
| Clic close (×) | Masque la fenêtre, l'app continue en arrière-plan |
| Relancer l'exe | Réactive la fenêtre existante (single instance) |
| Paramètres → Quitter | Démonte les partages et ferme vraiment l'application |
- Tourne en arrière-plan après fermeture de la fenêtre
- Maintient les connexions SMB actives
- Monitoring continu de l'état des partages
- Reconnexion automatique si un partage devient inaccessible
Triple verrou pour garantir une instance unique :
- Mutex Windows nommé
SolidMountClientMutex - Port TCP 47899 en écoute
- Fichier PID dans
%APPDATA%\SolidMount\
Si une instance existe déjà, la nouvelle envoie un signal IPC pour réactiver la fenêtre.
Au lancement, le client :
- Détecte tous les lecteurs réseau existants
- Déconnecte proprement ceux qui correspondent aux lettres gérées
- Informe l'utilisateur via événement UI
- Évite les conflits de credentials SMB
- Activation/désactivation depuis les paramètres
- Clé registry :
HKCU\Software\Microsoft\Windows\CurrentVersion\Run - Lancement silencieux à l'ouverture de session
- Vérification périodique (toutes les 30 secondes)
- Ping serveur SolidMount
- Test accessibilité des partages montés
- Reconnexion automatique si perte de connexion
- Événements UI pour informer l'utilisateur
| Code Windows | Message utilisateur |
|---|---|
ERROR_ACCESS_DENIED |
Accès refusé |
ERROR_ALREADY_ASSIGNED |
Lettre de lecteur déjà utilisée |
ERROR_BAD_NET_NAME |
Partage introuvable |
ERROR_BAD_NETPATH |
Serveur inaccessible |
ERROR_LOGON_FAILURE |
Utilisateur ou mot de passe incorrect |
ERROR_SESSION_CREDENTIAL_CONFLICT |
Conflit de credentials (session existante) |
┌─────────────────┐ ┌─────────────────────┐ ┌─────────────────┐
│ servers │ │ server_credentials │ │ shares │
├─────────────────┤ ├─────────────────────┤ ├─────────────────┤
│ id (PK) │───┐ │ id (PK) │ ┌───│ id (PK) │
│ nickname │ │ │ server_id (FK)──────│───┘ │ server_id (FK)──│───┐
│ hostname │ └───│ label │ │ share_name │ │
│ port │ │ username │ │ display_name │ │
│ description │ │ password_encrypted │ │ description │ │
│ active │ │ domain │ │ default_letter │ │
│ created_at │ │ description │ │ unc_path │ │
│ updated_at │ │ is_default │ │ active │ │
└─────────────────┘ │ created_at │ │ created_at │ │
│ updated_at │ │ updated_at │ │
└─────────────────────┘ └─────────────────┘ │
│ │ │
│ │ │
▼ ▼ │
┌─────────────────┐ ┌─────────────────────────────────────────────┐ │
│ users │ │ user_share_permissions │ │
├─────────────────┤ ├─────────────────────────────────────────────┤ │
│ id (PK) │───┐ │ id (PK) │ │
│ username │ │ │ user_id (FK)────────────────────────────────│─────┘
│ password_hash │ └───│ share_id (FK)───────────────────────────────│───┐
│ display_name │ │ credential_id (FK)──────────────────────────│───┘
│ email │ │ auto_mount │
│ role │ │ custom_letter │
│ active │ │ created_at │
│ last_login │ │ updated_at │
│ created_at │ └─────────────────────────────────────────────┘
│ updated_at │
└─────────────────┘
| Champ | Type | Description |
|---|---|---|
id |
UUID | Identifiant unique |
nickname |
string | Nom d'affichage (ex: "NAS Principal") |
hostname |
string | IP ou hostname (ex: "192.168.1.10") |
port |
int | Port SMB (défaut: 445) |
description |
string | Description optionnelle |
active |
bool | Serveur actif/inactif |
| Champ | Type | Description |
|---|---|---|
id |
UUID | Identifiant unique |
server_id |
UUID | Référence au serveur |
label |
string | Nom d'affichage (ex: "Admin NAS") |
username |
string | Nom d'utilisateur SMB |
password_encrypted |
blob | Mot de passe chiffré AES-256-GCM |
domain |
string | Domaine optionnel |
is_default |
bool | Credential par défaut pour ce serveur |
| Champ | Type | Description |
|---|---|---|
id |
UUID | Identifiant unique |
server_id |
UUID | Référence au serveur |
share_name |
string | Nom du partage SMB (ex: "video") |
display_name |
string | Nom d'affichage (ex: "Projets Vidéo") |
description |
string | Description optionnelle |
default_letter |
char | Lettre par défaut (ex: "Z") |
unc_path |
string | Chemin complet (ex: "\\nas\video") |
active |
bool | Partage actif/inactif |
| Champ | Type | Description |
|---|---|---|
id |
UUID | Identifiant unique |
username |
string | Identifiant de connexion |
password_hash |
string | Hash bcrypt du mot de passe |
display_name |
string | Nom affiché |
email |
string | Email optionnel |
role |
enum | "admin" ou "user" |
active |
bool | Compte actif/inactif |
last_login |
datetime | Dernière connexion |
| Champ | Type | Description |
|---|---|---|
id |
UUID | Identifiant unique |
user_id |
UUID | Référence à l'utilisateur |
share_id |
UUID | Référence au partage |
credential_id |
UUID | Credential à utiliser pour ce montage |
auto_mount |
bool | Monter automatiquement à la connexion |
custom_letter |
char | Lettre personnalisée (override default) |
| Mécanisme | Implémentation |
|---|---|
| Mots de passe utilisateurs | Hash bcrypt (cost 10) |
| Tokens API | JWT signé HS256, expiration 24h |
| Secret JWT | Généré aléatoirement au premier lancement |
┌────────────────────────────────────────────────────────────┐
│ STOCKAGE CREDENTIALS │
├────────────────────────────────────────────────────────────┤
│ │
│ Mot de passe SMB en clair │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────┐ │
│ │ AES-256-GCM Encryption │ │
│ │ ┌─────────────┐ ┌──────────────┐ │ │
│ │ │ Nonce │ │ Ciphertext │ │ │
│ │ │ (12 bytes) │ │ + Auth Tag │ │ │
│ │ └─────────────┘ └──────────────┘ │ │
│ └──────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ Stocké en base : nonce || ciphertext │
│ │
│ Clé de chiffrement : │
│ - Générée au premier lancement (32 bytes random) │
│ - Stockée dans config.yaml ou variable d'environnement │
│ │
└────────────────────────────────────────────────────────────┘
| Interface | Accessible par | Authentification |
|---|---|---|
| Web Admin | Administrateurs uniquement | JWT (role=admin) |
| API /client/ | Utilisateurs finaux | JWT (role=user ou admin) |
| API /health | Tout le monde | Aucune (monitoring) |
- ✅ Pas de credentials SMB stockés côté client
- ✅ Credentials transmis uniquement pour le montage, jamais affichés
- ✅ HTTPS recommandé en production (via reverse proxy)
- ✅ Tokens JWT à durée limitée
- ✅ Mots de passe jamais loggés
- ✅ Input validation sur tous les endpoints
- Windows 10/11 (64-bit)
- Droits administrateur pour l'installation du serveur
- Télécharger
SolidMount-Server-Setup-1.0.0.exe - Exécuter en tant qu'administrateur
- Suivre l'assistant d'installation
- Le service démarre automatiquement
- Accéder à
http://localhost:8080 - Se connecter :
admin/admin ⚠️ Changer le mot de passe admin immédiatement
- Télécharger
SolidMount-Client-Setup-1.0.0.exe - Exécuter l'installateur
- Suivre l'assistant
- Lancer SolidMount depuis le bureau ou le menu démarrer
- Configurer l'URL du serveur dans les paramètres
- Se connecter avec ses identifiants
C:\Program Files\SolidMount Server\
└── solidmount-server.exe
C:\ProgramData\SolidMount\
├── config.yaml # Configuration
├── solidmount.db # Base de données
└── logs\
├── solidmount.log # Log actuel
└── solidmount-*.gz # Logs archivés
C:\Program Files\SolidMount Client\
└── SolidMount.exe
%APPDATA%\SolidMount\
├── config.json # Configuration locale
└── solidmount.log # Log client
# Configuration SolidMount Server
server:
host: "0.0.0.0" # Écouter sur toutes les interfaces
port: 8080 # Port HTTP
database:
path: "C:\\ProgramData\\SolidMount\\solidmount.db"
security:
jwt_secret: "votre-secret-jwt-genere" # Généré automatiquement
encryption_key: "votre-cle-aes-256" # Généré automatiquement
logging:
path: "C:\\ProgramData\\SolidMount\\logs\\solidmount.log"
max_size_mb: 10 # Taille max avant rotation
max_backups: 5 # Nombre de fichiers conservés
max_age_days: 30 # Rétention en jours
compress: true # Compression gzip des anciens logs| Variable | Description |
|---|---|
SOLIDMOUNT_HOST |
Adresse d'écoute |
SOLIDMOUNT_PORT |
Port d'écoute |
SOLIDMOUNT_DB |
Chemin base de données |
SOLIDMOUNT_JWT_SECRET |
Secret JWT |
SOLIDMOUNT_ENCRYPTION_KEY |
Clé AES-256 |
SOLIDMOUNT_DATA |
Répertoire de données |
{
"server_url": "http://192.168.1.100:8080",
"last_username": "operator1",
"auto_mount": true
}Toutes les routes (sauf /health et /api/v1/auth/login) nécessitent un token JWT dans le header :
Authorization: Bearer <token>
| Méthode | Route | Description |
|---|---|---|
GET |
/health |
Health check (monitoring) |
GET |
/api/v1/status |
Statut du serveur |
POST |
/api/v1/auth/login |
Authentification |
| Méthode | Route | Description |
|---|---|---|
POST |
/api/v1/auth/logout |
Déconnexion |
GET |
/api/v1/auth/me |
Infos utilisateur courant |
POST |
/api/v1/auth/change-password |
Changer mot de passe |
| Méthode | Route | Description |
|---|---|---|
GET |
/api/v1/servers |
Liste des serveurs |
POST |
/api/v1/servers |
Créer un serveur |
GET |
/api/v1/servers/:id |
Détails d'un serveur |
PUT |
/api/v1/servers/:id |
Modifier un serveur |
DELETE |
/api/v1/servers/:id |
Supprimer un serveur |
POST |
/api/v1/servers/:id/scan |
Scanner les partages |
POST |
/api/v1/servers/:id/check |
Vérifier connectivité |
| Méthode | Route | Description |
|---|---|---|
GET |
/api/v1/servers/:id/credentials |
Credentials d'un serveur |
POST |
/api/v1/servers/:id/credentials |
Créer un credential |
GET |
/api/v1/credentials/:id |
Détails d'un credential |
PUT |
/api/v1/credentials/:id |
Modifier un credential |
DELETE |
/api/v1/credentials/:id |
Supprimer un credential |
| Méthode | Route | Description |
|---|---|---|
GET |
/api/v1/shares |
Liste des partages |
POST |
/api/v1/shares |
Créer un partage |
GET |
/api/v1/shares/:id |
Détails d'un partage |
PUT |
/api/v1/shares/:id |
Modifier un partage |
DELETE |
/api/v1/shares/:id |
Supprimer un partage |
| Méthode | Route | Description |
|---|---|---|
GET |
/api/v1/users |
Liste des utilisateurs |
POST |
/api/v1/users |
Créer un utilisateur |
GET |
/api/v1/users/:id |
Détails d'un utilisateur |
PUT |
/api/v1/users/:id |
Modifier un utilisateur |
DELETE |
/api/v1/users/:id |
Supprimer un utilisateur |
GET |
/api/v1/users/:id/permissions |
Permissions d'un utilisateur |
POST |
/api/v1/users/:id/permissions |
Ajouter une permission |
DELETE |
/api/v1/permissions/:id |
Supprimer une permission |
| Méthode | Route | Description |
|---|---|---|
GET |
/api/v1/client/shares |
Partages de l'utilisateur connecté |
curl -X POST http://localhost:8080/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{"username": "admin", "password": "admin"}'Réponse :
{
"success": true,
"data": {
"token": "eyJhbGciOiJIUzI1NiIs...",
"user": {
"id": "uuid",
"username": "admin",
"role": "admin"
}
}
}curl http://localhost:8080/api/v1/client/shares \
-H "Authorization: Bearer <token>"Réponse :
{
"success": true,
"data": [
{
"share_id": "uuid",
"share_name": "video",
"display_name": "Projets Vidéo",
"unc_path": "\\\\nas\\video",
"drive_letter": "Z",
"server_name": "NAS Principal",
"auto_mount": true,
"smb_username": "editor",
"smb_password": "***",
"smb_domain": "WORKGROUP"
}
]
}- Go 1.22+ : golang.org/dl
- Node.js 18+ : nodejs.org
- Wails CLI :
go install github.com/wailsapp/wails/v2/cmd/wails@latest - Inno Setup 6 : jrsoftware.org/isdl.php (pour les installateurs)
cd server
# Mode développement (répertoire local)
$env:SOLIDMOUNT_DATA = "."
go run . run
# Build production
go build -ldflags="-s -w" -o solidmount-server.exe .Le serveur est accessible sur http://localhost:8080
cd client-gui
# Installer les dépendances frontend
cd frontend && npm install && cd ..
# Mode développement avec hot-reload
wails dev
# Build production
wails build -clean -windowsconsole=falseL'exécutable est généré dans client-gui/build/bin/SolidMount.exe
cd installer
# Tout compiler
.\build-all.bat
# Ou séparément
.\build.bat # Serveur
.\build-client.bat # ClientLes installateurs sont générés dans installer/output/
- Serveur : Vérifier
http://localhost:8080/health - Admin : Se connecter à
http://localhost:8080avec admin/admin - Client : Configurer l'URL serveur, se connecter, tester le montage
SolidMount-Bridge/
│
├── server/ # 🖥️ SERVEUR
│ ├── main.go # Point d'entrée, service Windows
│ ├── config/
│ │ └── config.go # Chargement configuration YAML
│ ├── api/
│ │ ├── auth.go # Authentification JWT
│ │ ├── middleware.go # Logging, recovery, CORS
│ │ ├── servers.go # CRUD serveurs
│ │ ├── credentials.go # CRUD credentials
│ │ ├── shares.go # CRUD partages
│ │ ├── users.go # CRUD utilisateurs
│ │ ├── permissions.go # CRUD permissions
│ │ ├── scanner.go # Découverte SMB
│ │ └── connectivity.go # Test connexion temps réel
│ ├── db/
│ │ ├── database.go # Connexion SQLite
│ │ ├── schema.go # Création tables
│ │ ├── models.go # Structures de données
│ │ └── crypto.go # Chiffrement AES-256-GCM
│ ├── web/
│ │ ├── embed.go # Embedding fichiers statiques
│ │ └── static/
│ │ ├── index.html # SPA admin
│ │ ├── css/style.css # Styles iOS/Material
│ │ └── js/
│ │ ├── api.js # Client HTTP
│ │ └── app.js # Logique UI
│ ├── config.yaml # Configuration
│ └── go.mod # Dépendances Go
│
├── client-gui/ # 💻 CLIENT
│ ├── main.go # Point d'entrée, singleton
│ ├── app.go # Logique application Wails
│ ├── windows_theme.go # Coins arrondis Win11
│ ├── internal/
│ │ ├── api/
│ │ │ ├── client.go # Client HTTP vers serveur
│ │ │ └── types.go # Types partagés
│ │ ├── config/
│ │ │ └── config.go # Configuration locale JSON
│ │ ├── smb/
│ │ │ ├── mount.go # WNetAddConnection2
│ │ │ ├── cleanup.go # Nettoyage lecteurs
│ │ │ └── status.go # État des montages
│ │ ├── service/
│ │ │ ├── orchestrator.go # Coordination montages
│ │ │ ├── state.go # État global
│ │ │ └── health.go # Monitoring connexions
│ │ ├── singleton/
│ │ │ └── guardian.go # Instance unique
│ │ └── autostart/
│ │ └── autostart.go # Démarrage Windows
│ ├── frontend/
│ │ ├── src/
│ │ │ ├── App.svelte # Composant racine
│ │ │ ├── main.js # Point d'entrée Svelte
│ │ │ └── components/
│ │ │ ├── Login.svelte # Écran connexion
│ │ │ ├── Header.svelte # Barre de titre
│ │ │ ├── ShareList.svelte # Liste des partages
│ │ │ ├── ShareItem.svelte # Item partage
│ │ │ └── Modal.svelte # Modals génériques
│ │ ├── package.json # Dépendances npm
│ │ └── vite.config.js # Config Vite
│ ├── build/windows/
│ │ └── icon.ico # Icône application
│ ├── wails.json # Config Wails
│ └── go.mod # Dépendances Go
│
├── installer/ # 📦 INSTALLATEURS
│ ├── solidmount-server.iss # Script Inno Setup serveur
│ ├── solidmount-client.iss # Script Inno Setup client
│ ├── build.bat # Build serveur
│ ├── build-client.bat # Build client
│ ├── build-all.bat # Build tout
│ └── output/ # Installateurs générés
│
├── docs/ # 🌐 SITE WEB
│ ├── index.html # Landing page EN
│ ├── fr.html # Landing page FR
│ ├── css/style.css # Styles glassmorphism
│ ├── js/main.js # Interactions
│ └── img/ # Screenshots
│
├── logo/ # 🎨 ASSETS
│ ├── logo*.png # Logo différentes tailles
│ ├── server*.ico # Icônes serveur
│ └── client*.ico # Icônes client
│
├── screenshots/ # 📸 CAPTURES
│
├── LICENSE # CC BY-NC-SA 4.0
└── README.md # Ce fichier
# Vérifier le statut
.\solidmount-server.exe status
# Lancer en mode console pour voir les erreurs
.\solidmount-server.exe run
# Consulter les logs
Get-Content "C:\ProgramData\SolidMount\logs\solidmount.log" -Tail 100- Vérifier que le serveur est accessible :
http://SERVER_IP:8080/health - Vérifier le pare-feu Windows (port 8080)
- Vérifier l'URL dans les paramètres du client
- Consulter
%APPDATA%\SolidMount\solidmount.log
- Tester manuellement :
net use Z: \\server\share /user:DOMAIN\user password - Vérifier les credentials dans l'admin
- Vérifier les permissions de l'utilisateur
- Conflit de credentials :
net use * /deletepuis réessayer
Windows maintient des sessions SMB par serveur. Si vous avez une session existante avec des credentials différents :
# Voir les sessions actives
net use
# Supprimer toutes les connexions
net use * /delete /yes
# Ou supprimer une connexion spécifique
net use Z: /delete- Vérifier que vous n'avez pas cliqué "Quitter" dans les paramètres
- Vérifier qu'une seule instance tourne (
tasklist | findstr SolidMount) - Consulter les logs client
- Support HTTPS natif (sans reverse proxy)
- Notifications toast Windows natives
- Thème clair optionnel
- Export/import de configuration
- Signature numérique des installateurs
- Mise à jour automatique du client (auto-update)
- Support Active Directory / LDAP
- Audit log des actions admin
- Client macOS
- Client Linux
- API de monitoring (Prometheus/Grafana)
- Interface admin mobile
- Multi-tenancy
Ce projet est distribué sous licence Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0).
- Partager — copier et redistribuer le matériel sur tout support ou format
- Adapter — remixer, transformer et créer à partir du matériel
- Attribution — Vous devez créditer l'auteur original, fournir un lien vers la licence et indiquer si des modifications ont été effectuées
- Pas d'Utilisation Commerciale — Vous ne pouvez pas utiliser ce projet à des fins commerciales
- Partage dans les Mêmes Conditions — Si vous modifiez, transformez ou créez à partir de ce projet, vous devez distribuer vos contributions sous la même licence
📜 Voir le fichier LICENSE pour le texte complet de la licence.
Félix Abt
Développeur & Directeur Technique
🌐 Cairn Studios • 💼 LinkedIn • 🐙 GitHub
Fait avec ❤️ pour la communauté post-production
