Évaluation Solutions Stockage — Cloud Personnel & Archives¶
Date : 2026
Contexte : Évaluation pour remplacer l'approche MergerFS+SnapRAID (qui nécessite l'acquisition d'un disque parity ≥ 4TB non prévue) par une stratégie réaliste basée sur l'infrastructure existante.
Méthode : Analyse multi-agents parallèles, évaluation exhaustive de 8 solutions.
1. Objectifs¶
| Besoin | Détail | Priorité |
|---|---|---|
| Backup Google Drive | rclone PULL quotidien → stockage local (sdd IronWolf 4TB) |
Critique |
| Backup Google Photos | Takeout trimestriel → import local | Critique |
| Consolidation archives | ~1TB disque HGST externe → serveur | Haute |
| Accès web fichiers | Explorateur navigateur, multi-utilisateurs | Haute |
| Liens de partage | Partage externe avec expiration, protection MdP | Haute |
| SSO Authelia | Intégration OIDC avec le LXC 103 existant | Haute |
| Plain files | Aucun format propriétaire — fichiers lisibles directement | Critique |
| Légèreté | Coexister avec autres services dans LXC 104 (2GB RAM) | Moyenne |
| Versioning | Accès aux versions précédentes | Basse |
Contrainte éliminatoire : plain files + no lock-in. Toute solution stockant les fichiers dans un format propriétaire est éliminée d'office.
1.1 Périmètre utilisateurs¶
Deux niveaux d'utilisateurs :
Noyau familial — alice + nico (utilisateurs complets)¶
| Source | alice | nico | Partagé alice+nico |
|---|---|---|---|
| Google Drive | ✅ drive personnel | ✅ drive personnel | ✅ dossier Drive partagé |
| Google Photos | ✅ ~300GB | ✅ ~100GB | — |
| Archives HGST | ✅ archives personnelles | ✅ archives personnelles | ✅ archives communes |
- Alice accède à ses données + espace commun alice+nico — pas aux données privées de nico
- Nico idem pour ses données privées — Nico est également admin serveur (SFTPGo + accès complet)
- Nico en tant qu'admin accède à tout y compris
/mnt/media/etc.
Autres utilisateurs — accès hypothétique¶
D'autres utilisateurs disposent d'un compte Authelia existant. Leur usage est très hypothétique : ils ne synceront pas leur propre Google Drive (nécessite leur OAuth), ne feront pas de Takeout autonome, et n'utiliseront pas le serveur comme remplacement de Google Drive.
1.2 Nomenclature de la structure de stockage¶
Question : storage/{alice,nico,alicenico,shared} vs storage/cloud/{...} vs storage/shared/{alicenico,all} ?
Décision : structure plate sans préfixe, family à la place de alicenico¶
storage/
alice/ ← espace complet alice (drive + photos + archives)
nico/ ← espace complet nico (drive + photos + archives)
family/ ← espace commun alice+nico
shared/ ← optionnel : accessible à d'autres utilisateurs
Pourquoi pas de préfixe cloud/ ?
Le dataset storage est entièrement dédié aux données personnelles. Ajouter cloud/ crée un niveau de hiérarchie sans valeur sémantique. rclone comme SFTPGo n'en ont pas besoin.
Pourquoi pas storage/shared/{alicenico,all} ?
Nommer un sous-dossier alicenico est technique et fragile (si la composition change). Le regroupement shared/ en tant que parent de plusieurs sous-espaces partagés crée une ambiguïté entre l'espace commun alice+nico et un éventuel espace global. Deux namespaces distincts à la racine (family/ et shared/) sont plus lisibles.
Pourquoi family/ plutôt qu'alicenico/ ?
- Sémantique et stable : résiste à l'évolution de la composition
- Renommable trivialement en ZFS (zfs rename storage/family storage/foyer) à tout moment
Structure ZFS datasets correspondante :
zfs create storage/alice
zfs create storage/nico
zfs create storage/family
zfs create storage/shared # optionnel
Création d'espaces partagés ad-hoc via web UI : Oui — entièrement faisable depuis l'interface admin SFTPGo sans CLI : 1. Admin crée un répertoire via SFTPGo (ou SSH) 2. Admin crée un virtual folder pointant dessus 3. Admin assigne ce folder aux utilisateurs voulus (individuellement ou via un groupe dédié)
Pour le noyau familial (alice+nico), le groupe owners gère l'héritage automatiquement. Pour des combinaisons ad-hoc ponctuelles, les share links SFTPGo (sans compte requis côté destinataire) sont souvent suffisants et plus simples qu'un groupe dédié.
2. Contexte Google Photos/Drive — Fait Technique Fondamental¶
Google Photos API : morte depuis le 31 mars 2025.
Le backend gphotos de rclone ne peut plus télécharger que les photos qu'il a lui-même uploadées. Aucune solution de sync continue depuis Google Photos n'est possible en 2025/2026.
Seule voie pour les photos : Google Takeout (export manuel ou semi-automatisé trimestriel).
Google Drive API : toujours fonctionnel. rclone sync/copy fonctionne parfaitement avec le backend drive. Le LXC 102 a déjà le OAuth configuré (direction PBS→GDrive pour les backups) — ajouter une direction PULL est trivial.
Drive partagé : un dossier Google Drive partagé entre alice et nico est accessible depuis les deux comptes Google. Pour le sync rclone côté serveur, une seule paire OAuth suffit (compte propriétaire du dossier). Pas besoin de Service Account.
3. Tableau Comparatif Global¶
| Solution | Score | Plain files | rclone drop | Share links | SSO OIDC | RAM idle | Verdict |
|---|---|---|---|---|---|---|---|
| SFTPGo | 8.2/10 | ✅ | ✅ natif | ✅ complet | ✅ natif | ~27 MB | ✅ RECOMMANDÉ |
| Nextcloud | 7/10 | ✅ (occ scan) | ⚠️ friction | ✅ complet | ✅ app OIDC | ~600–900 MB | ✅ Alternative (nouveau LXC) |
| Dufs | 6.5/10 | ✅ | ✅ | ❌ absent | ❌ basique | 5–15 MB | ⚠️ Partiel — WebDAV backend seulement |
| oCIS | 5.5/10 | ✅ (PosixFS) | ⚠️ inotify | ✅ complet | ✅ first-class | ~600 MB–1 GB | ⚠️ Conditionnel (nouveau LXC) |
| Filestash | 4.5/10 | ✅ | ✅ | ⚠️ limité | ❌ paywall | ~50 MB | ❌ ÉCARTÉ |
| Pydio Cells | 4.5/10 | ❌ flat store | ⚠️ indirect | ✅ | ❌ paywall | ~46 % CPU | ❌ ÉCARTÉ |
| Seafile | 3.5/10 | ❌ block | ❌ impossible | ✅ | ✅ | ~20 % CPU | ❌ ÉCARTÉ (lock-in) |
| Syncthing | 2/10 | ✅ | N/A | ❌ | ❌ | ~30 MB | ❌ ÉCARTÉ (mauvais outil) |
| ZFS natif | 6.5/10 | ✅ | ✅ | N/A | N/A | négligeable | ✅ Couche stockage (nécessite SFTPGo) |
4. Évaluations Détaillées¶
4.1 SFTPGo — RECOMMANDÉ ★★★★★¶
Score : 8.2/10
SFTPGo est un serveur de fichiers multi-protocole (SFTP, WebDAV, FTPS, HTTP) conçu pour une exploitation sérieuse avec une empreinte minimale.
Points forts¶
| Critère | Détail |
|---|---|
| RAM idle | ~27 MB avec host networking — tient facilement dans LXC 104 |
| Plain files | Les fichiers sont stockés exactement tels quels sur le disque |
| rclone compatibility | rclone dépose dans le répertoire → SFTPGo les expose immédiatement, sans scan |
| Share links | Natifs : expiration par date/compteur d'accès, protection par mot de passe, portée (lecture/écriture) |
| SSO OIDC Authelia | Documenté officiellement avec Authelia v4.39.16 + SFTPGo v2.6.6 — zéro hack |
| Multi-utilisateurs | Isolation complète par virtual folders, chroot par utilisateur |
| Versioning ZFS | Virtual folders pointant sur .zfs/snapshot/ → accès histoire fichiers sans plugin |
| WebDAV | Exposition WebDAV native (sync depuis clients desktop, Rclone, etc.) |
Limitations¶
| Limitation | Impact | Mitigation |
|---|---|---|
| Pas de preview inline | Les images s'ouvrent en download, non affichées dans le navigateur | Acceptable pour usage archive/backup — pas un DAM |
| Pas d'auto-provisioning | En community edition, les utilisateurs OIDC doivent être pré-créés | Pre-login hook script ou appels API REST à l'inscription |
| Web UI basique | Interface fonctionnelle mais pas aussi soignée que Nextcloud/oCIS | Compensé par légèreté et fiabilité |
Modèle d'accès multi-utilisateurs — Detail¶
SFTPGo implémente un système de virtual folders pleinement documenté et éprouvé :
- Un virtual folder = mapping entre un chemin disque réel et un chemin virtuel visible par l'utilisateur
- Aucune limite sur le nombre de virtual folders par utilisateur
- Le même virtual folder peut être assigné à plusieurs utilisateurs avec des permissions différentes (lecture, lecture+écriture) et des quotas distincts
- Le dossier home de chaque utilisateur = leur espace privé (chroot)
Structure sur disque (flat, voir section 1.2) :
/mnt/storage/
alice/
drive/ ← rclone PULL drive alice
photos/ ← Takeout alice
archives/ ← archives personnelles alice
nico/
drive/ ← rclone PULL drive nico
photos/ ← Takeout nico
archives/ ← archives personnelles nico
family/
drive/ ← rclone PULL dossier Drive partagé
photos/ ← photos de famille (optionnel : post-Takeout)
archives/ ← archives communes alice+nico
shared/ ← optionnel : contenu accessible aux autres utilisateurs
others/ ← optionnel : espaces individuels pour guests
{username}/ ← inbox par guest (admin y dépose des fichiers)
Vue alice dans SFTPGo :
/ ← home = /storage/alice/
drive/
photos/
archives/
family/ ← virtual folder → /storage/family/ [rw]
.snapshots/ ← virtual folder → /storage/.zfs/snapshot/ [ro]
Vue nico dans SFTPGo : identique à alice, home privé distinct (/storage/nico/), même virtual folder family/. Nico dispose en plus du rôle admin SFTPGo (gestion des users, groupes, virtual folders via web UI).
Vue nico (admin) dans SFTPGo :
/
alice/ ← virtual folder → /storage/alice/ [rw]
nico/ ← virtual folder → /storage/nico/ [rw]
family/ ← virtual folder → /storage/family/ [rw]
others/ ← virtual folder → /storage/others/ [rw]
shared/ → virtual folder → /storage/shared/ [rw]
media/ ← virtual folder → /mnt/media/ [ro]
.snapshots/ ← virtual folder → /storage/.zfs/snapshot/ [ro]
Groupes SFTPGo — gestion via web UI :
| Groupe | Type | Membres | Héritage |
|---|---|---|---|
owners |
primary | alice, nico | home_dir = /storage/%username% |
owners-shared |
secondary | alice, nico | virtual folder family/ → /storage/family/ [rw] |
guests |
secondary | autres users | virtual folder shared/ → /storage/shared/ [ro] |
- Tout configurable depuis l'interface admin SFTPGo (web UI), sans CLI
- Ajouter alice ou nico = créer le compte + l'assigner à
owners+owners-shared— aucune autre config - Nico dispose en plus du rôle admin SFTPGo (case à cocher lors de la création)
- Virtual folder supplémentaire ad-hoc (ex: partage entre alice et un tiers) : créer le folder + assigner individuellement aux deux users concernés
Modèle autres utilisateurs¶
Les autres utilisateurs ont un compte Authelia mais pas de sync automatique (pas d'OAuth Drive, pas de Takeout). Ce que leur compte SFTPGo apporte :
| Feature | Disponible | Détail |
|---|---|---|
Accès shared/ (lecture) |
✅ | Via groupe guests — contenu que nico y dépose |
Accès family/photos/ (lecture) |
✅ optionnel | Virtual folder read-only assigné au groupe guests |
| Inbox personnel | ✅ optionnel | /storage/others/{username}/ — nico y dépose des fichiers |
| WebDAV mount | ✅ | Monter leur espace sur desktop/mobile |
| Upload vers le serveur | ✅ limité | Si un virtual folder [rw] leur est assigné |
| Backup de leur propre Drive | ❌ | Nécessite leur OAuth token |
| Remplacement de leur Google Drive | ❌ | Pas l'objectif, ils ne migreront pas leur usage |
Recommandation pratique : pour un accès ponctuel, préférer les share links SFTPGo — aucun compte SFTPGo requis côté destinataire. Un compte guest ne se justifie que si l'accès est régulier et persistant.
Déploiement¶
Voir le fichier d'implémentation : storage-implementation.md
4.2 Nextcloud — Alternative si preview/collab nécessaire ★★★★¶
Score : 7/10
Nextcloud classique docker-compose (pas AIO) répond à tous les objectifs mais demande un LXC dédié.
Points forts¶
| Critère | Détail |
|---|---|
| Écosystème | 300+ apps, preview inline toutes extensions, Office, versioning natif |
| Share links | Complets, sécurisés, standards |
| SSO OIDC | Via app user_oidc (gratuite, maintenue) — intégration Authelia documentée |
| WebDAV | Natif |
| Plain files | Oui — fichiers stockés normalement sur le disque |
Modèle d'accès multi-utilisateurs — Détail¶
Nextcloud propose deux mécaniques distinctes pour le multi-utilisateur sur des fichiers externes :
1. External Storage avec variable $user
Mount de /mnt/storage/personal/$user/ en tant que stockage externe → Nextcloud substitue $user par le login de l'utilisateur courant. Alice voit /mnt/storage/personal/alice/, nico voit /mnt/storage/personal/nico/.
- ✅ Isolation stricte des données privées
- ✅ Applicable à tous les utilisateurs d'un groupe en une seule règle admin
- ⚠️ Le répertoire doit pré-exister sur le disque (pas de création automatique)
- ⚠️ Variable
$userdans lesource path: bug connu (GitHub #10948) — le substitute ne fonctionne que dans lemount point(nom affiché), pas toujours dans le path source selon les versions. - ⚠️ Après dépôt rclone,
occ files:scan --path="$user/files/Drive"requis pour que Nextcloud détecte les nouveaux fichiers
2. Group Folders (app officielle)
Crée un dossier commun visible et accessible simultanément par tous les membres d'un groupe Nextcloud.
- ✅ Alice et nico voient le même dossier
Shared/dans leur interface Files - ✅ Permissions configurables par groupe et par sous-dossier (lecture / lecture-écriture / création / suppression)
- ✅ Versioning Nextcloud s'applique au dossier partagé
- ❌ Le Group Folder ne peut PAS pointer vers un chemin External Storage — il réside impérativement dans le répertoire
data/interne de Nextcloud (GitHub issue #2897, non résolu en 2024) - ⚠️ Contournement : monter le chemin externe dans
data/__groupfolders/au niveau OS (symlink ou bind mount) — fonctionne mais fragile
3. Accès admin à /mnt/media/
Via la fonctionnalité External Storage (admin) : monter /mnt/media/ comme stockage externe visible uniquement pour l'admin (ou tout groupe désigné). S'affiche comme un dossier Media dans l'interface Files. Après modification externe, occ files:scan requis.
Structure résultante dans Nextcloud :
alice/
Files/
Drive/ ← External Storage ($user path)
Photos/ ← External Storage ($user path)
Archives/ ← External Storage ($user path)
Shared/ ← Group Folder (alice + nico)
nico/ → même structure
admin/ (nico)
Files/
Media/ ← External Storage → /mnt/media/
[+ accès panel admin à tous les fichiers]
Limitations critiques pour cette infra¶
| Limitation | Impact |
|---|---|
occ files:scan requis |
Après chaque dépôt rclone, Nextcloud ignore les fichiers sans scan. Script cron nécessaire. |
| RAM idle ~600–900 MB | Incompatible avec LXC 104 déjà chargé — exige nouveau LXC 106 (3–4 GB RAM) |
| UID mapping complexe | LXC non-privilégié → mapping d'UIDs pour que www-data accède aux fichiers |
| Group Folder ≠ External Storage | Dossier partagé doit être dans data/ Nextcloud — bind mount workaround nécessaire pour pointer sur ZFS |
| Maintenabilité | Stack plus lourde (PostgreSQL, Redis, cron Nextcloud) |
Verdict¶
Recommandé uniquement si le preview inline est indispensable et si la création d'un 7ème LXC est acceptable. La gestion du dossier partagé sur stockage externe est plus complexe qu'avec SFTPGo. Sinon, SFTPGo est supérieur pour ce cas d'usage.
4.3 ownCloud Infinite Scale (oCIS) — Conditionnel ★★★¶
Score : 5.5/10
oCIS est architecturalement moderne (Go, microservices, OIDC first-class) mais sa maturité opérationnelle en 2025/2026 reste préoccupante.
Points forts¶
- OIDC first-class : le meilleur intégrateur OIDC parmi tous les candidats
- PosixFS driver : stockage en plain files sur le disque (NE PAS utiliser le driver par défaut)
- Pas de PostgreSQL requis (base embarquée)
Blocants¶
| Problème | Gravité |
|---|---|
| Memory leak thumbnails | OCIS_EXCLUDE_RUN_SERVICES=thumbnails obligatoire en production |
| RAM 600 MB–1 GB | Nouveau LXC requis comme Nextcloud |
| PosixFS immaturity | Driver récent, moins éprouvé à 1 TB+ de données |
| Fuite de devs | Gran partie de l'équipe core a forké → OpenCloud en 2024, décrit comme plus stable |
Note : OpenCloud¶
Fork d'oCIS par l'équipe originale. Même architecture (PosixFS disponible, OIDC natif), décrit comme "much more stable and uses less RAM" par la communauté homelab. Si oCIS est évalué, considérer OpenCloud en parallèle.
4.4 Dufs — Backend WebDAV seulement ★★★¶
Score : 6.5/10
Serveur de fichiers ultra-léger (Rust) avec interface web et WebDAV.
Avantages : 5–15 MB RAM, plain files, WebDAV natif, simple à déployer
Blocant : Aucun système de liens de partage — manque un objectif clé
Usage recommandé : Backend WebDAV pour clients desktop/rclone, pas pour l'accès utilisateur final
4.5 Filestash — ÉCARTÉ ★¶
Score : 4.5/10
Éliminé : OIDC/SSO est derrière paywall ($50/month). Limite à 3 utilisateurs en version gratuite. Ne répond pas aux objectifs sans abonnement commercial.
4.6 Pydio Cells — ÉCARTÉ ★¶
Score : 4.5/10
Éliminé : Intégration OIDC avec provider externe (Authelia) est Enterprise uniquement (€3 280/an). Format "flat" par défaut (lock-in propriétaire). CPU idle ~46% rapporté.
4.7 Seafile — ÉCARTÉ ★¶
Score : 3.5/10
Éliminé : Stockage en blocs propriétaires — les fichiers ne sont PAS stockés en plain files sur le disque. rclone ne peut pas déposer des fichiers que Seafile découvrira. CPU idle ~20% constant. Incompatible avec le principe de non-lock-in.
Note : /mnt/storage/seafile/ existe mais reste vide — peut être supprimé.
4.8 Syncthing — ÉCARTÉ ★¶
Score : 2/10
Éliminé : Outil de synchronisation P2P entre appareils, pas un gestionnaire de fichiers cloud. Ne peut pas se connecter à Google Drive. Aucune interface de navigation de fichiers. Aucun lien de partage. Mauvais outil pour ce besoin.
4.9 ZFS — Couche Stockage (pas une solution autonome)¶
Score couche stockage seule : 6.5/10
Score combiné ZFS + SFTPGo : 8/10
ZFS sur l'IronWolf 4TB (sdd) est la fondation recommandée pour remplacer l'ext4 actuel.
| Avantage | Détail |
|---|---|
| Checksums | Détection automatique corruption silencieuse (bit rot) |
| Snapshots | Copy-on-write, instantanés, exposition via .zfs/snapshot/ |
| Compression zstd | Gain ~20–40% sur text/archives, neutre sur JPEG/vidéo |
| Intégrité | zpool scrub périodique vérifie 100% des données |
À éviter : déduplication ZFS (5 GB RAM par TB de table DDT).
Tooling admin recommandé : - Sanoid : snapshots automatiques (daily×7, weekly×4, monthly×3) — standard éprouvé 15 ans - ZfDash (v1.8.7-beta) : interface web ZFS déployable en Docker, actif en 2025/2026 - Cockpit+ZFS : meilleure UI, mais risqué sur hôte Proxmox/Debian 12 (conflits packages) - WebZFS : trop récent (projet "AI slop" selon Reddit 2025) — non recommandé
5. Conclusion et Suite¶
Solution retenue : ZFS (IronWolf 4TB) + Sanoid + SFTPGo v2.7.1+ + ZfDash
Utilisateurs : alice + nico (admin), espace commun family/, guests via share links
Structure disque : storage/{alice,nico,family}/ — datasets ZFS indépendants
→ Plan d'implémentation complet : storage-implementation.md
Document issu d'une évaluation multi-agents exhaustive des solutions Nextcloud, Seafile, oCIS, SFTPGo, Pydio Cells, Filestash, Dufs, Syncthing et ZFS natif.