Nextcloud - Soute
Le service https://soute.numenaute.org permet de travailler de façon collaborative en ligne1).
C'est utile pour partager des documents, des agendas, papoter en direct avec les membres de son groupe de travail et de façon générale pour divers usages du travail collaboratif.
Le logiciel est basé sur Nextcloud ; vous trouverez la documentation officielle (en anglais) sur https://docs.nextcloud.com/.
À faire sur ce tuto :
- Documentation de base (écrit + capture d'écran) ET soit trouver une vidéo soit la faire, sur les choses suivantes :
- Comment partager un document
- …
- Lister les usages les plus utiles du cloud et comment s'en servir.
Condition d'utilisation du service
Les inscription sont ouvertes à toutes et tous mais pour un quota limité de 100 Mb.
Si vous êtes membres de Numenaute, vous avez droit par défaut à 5 Go, qui peuvent être modifiés sur demande. Pensez à nous notifier si vous n'avez pas ces 5 Go ; tout est fait à la main, parfois certaines choses sont oubliées dans le lot des “trucs à faire”.
Si vous êtes membres et personne morale (association par exemple), vous pouvez demander certains services en plus, comme l'utilisation de groupes pour le partage des documents, ou la mise en place d'un cloud aux couleurs de votre organisme. Ce genre de chose nous demande un peu plus de travail et de maintenance et est mis en place via la signature de partenariats : il faut prendre le temps de discuter pour savoir ce qu'on met en place, nous n'avons pas une offre “clé en main” afin d'être au plus prêt de vos besoins réels.
Les données ne sont pas chiffrées, mais l'accès est sécurisé aussi bien que possible : vos données ne seront accessibles qu'aux personnes avec qui vous les partagez explicitement. Nous vous déconseillons cependant de stocker des données sensibles, ou alors chiffrez-les soigneusement de votre côté. Nous nous engageons à ne pas regarder le contenu de vos dossiers, sauf avec votre accord express (pour débuguer par exemple) ou sur demande d'une autorité judiciaire.
L'usage du service est évidement formellement interdite pour tout ce qui est illégal. Cela inclut le stockage de documents et media que vous n'avez pas le droit d'avoir, comme par exemple des films récupérés sans l'accord des ayants-droits. Nous n'allons pas fouiller pour vérifier, mais s'il vous plaît, ne mettez pas ce genre de chose sur nos serveurs, cela mettrais toute la structure en péril.
Pour les utilisateurs de base
Explication pour les noobs, à compléter, afin que même quelqu'un qui n'est pas doué avec l'informatique puisse s'approprier le service. Si vous avez des liens vers des tutos vidéos, ajoutez-les !
Intérêt du service
Pour les utilisateurs avancés
Les trucs un peu compliqués que permet le logiciel, ou qui sont accessibles avec des droits précis.
Dossier de groupe
Sur demande à un administrateur, il est possible d'avoir un dossier “de groupe”.
- Ce qui sera stocké dans ce dossier appartiendra à tout le groupe ; chaque membre de ce groupe aura les mêmes droits dessus.
- Le quota compté sera celui du dossier, et non celui du créateur du dossier.
Par exemple, vous gérez l'association Numenaute.
- Vous pouvez créer un dossier “Asso Numenaute” depuis votre compte et le partager au groupe “Numenaute”, mais son quota sera décompté du votre et vous serez le seul (en tant que propriétaire) à accéder à certaines fonctionnalités.
- Demandez à un administrateur de créer le dossier partagé “Asso Numenaute” attribué au groupe “Numenaute”. Tous les membres de ce groupe pourront gérer le dossier de la même façon : partager, ajouter des fichiers ou en enlever… L'administrateur donne un quota de 20 Gb (par exemple) au dossier, qui sera valable pour toute l'association.
- Vous voulez que le collège de l'association Numenaute puisse modifier les éléments de ce dossier, mais que les membres puissent uniquement consulter les informations ? Demandez à un admin d'affiner les droits : il peut donner des droits complets à un groupe (College_Numenaute) et des droits restreints à un autre (Membre_Numenaute). Si vous faites partie des deux groupes, vous avez les droits les plus élevés, donc ici ceux du collège !
- Attention, il n'est pas possible de simplement passer un dossier personnel en dossier partagé. C'est faisable, mais vous perdrez tous les liens de partage et cela demande du boulot aux administrateurs. Donc, organisez les choses en amont.
- Ajouter et enlever des accès aux groupes d'utilisateurs est facile et rapide.
- Tous les sous-dossiers créés par les utilisateurs auront les mêmes permissions. Si vous souhaitez que certains documents de votre association ne soient pas accessibles à tout les membres, demandez un autre dossier partagé à vos adminstrateurs. Ce dossier, avec des droits différents, peut être un sous-dossier de votre premier répertoire, par exemple
Asso Numenaute/college
mais il faut qu'il soit créé par un administrateur pour que les droits soient bien pris en compte ! - Songez que nos services gèrent de nombreux organismes, donc utilisez des noms personnalisés pour ces dossiers partagés, comme “Asso_Numenaute” plutôt que juste “Asso”.
Pour les administrateurs de Numenaute
Dossier de groupe
Gérer la politique d'un groupe
Décidez avec les administrateurs du groupe des points suivants :
- Quel sous-groupes ? Par exemple “membre_asso, college_asso, visiteur_asso”.
- Quels dossiers, avec quels noms et quelle hiérarchie ? (uniquement pour les dossiers partagés par le groupe)
Créer un dossier par association, au nom de l'association, et donner les droits de lecture à cette association.
- Exemple : Dossier “Numenaute” :
- accès en lecture seule au groupe “Numenaute” (ajouter le groupe au dossier, mais décochez tout pour un accès en lecture seule)
- accès en gestion complète au groupe “Numenaute_membre” (ajouter le groupe au dossier et cochez toutes les cases)
- accès en gestion complète + autorisation à gérer les droits au groupe “Numenaute_college” (idem que précédement, + autorisations avancées et sélectionner ce groupe).
Pour les sous-dossiers à accès limités, utilisez simplement des barres obliques pour générer le chemin, par exemple :
- Dossier “Numenaute/college”, accès paramétré uniquement pour le groupe “Numenaute_college”.
Bugs connus sur notre installation
- L'historique de l'activité des autres membres d'un dossier de groupe n'est pas disponible.
- Cf https://github.com/nextcloud/groupfolders/issues/1018. PR en attente de merge mais de toute façon, l'option qui devrait être ajoutée fait planter le serveur.
- Le thème est moche, mais changer un thème en profondeur (app comprises) est un sacré bazar.
Bidouilles de sysadmin pour corriger des problèmes spécifiques
"Quelque chose s'est mal passé lors de l'exécution de la dernière tâche il y a X jours."
Si cette erreur apparaît ET que tout semble aller bien, c'est juste que l'erreur reste dans les logs et que Nextcloud continue de la juger pertinente alors que non. Il faut forcer un rafraîchissement. Pour cela :
- Repasser en mode “Ajax”
- Rafraichir une page dans la partie “fichier”
- Remettre la gestion via cron.
- Y'a plus d'erreur ! Jusqu'à la prochaine.
Memcache \\OC\\Memcache\\APCu not available for local cache
Il faut activer ACPCu pour les requêtes CLI, afin que cron.php et occ puissent y faire appel (Source).
echo 'apc.enable_cli=1' >> /etc/php/7.0/mods-available/apcu.ini
Tampon mémoire des chaînes internes OPcache presque plein
Ce qu'on a comme message :
Le tampon mémoire des chaînes internes OPcache est presque plein. Pour vous assurer que les chaînes répétitives peuvent être mise en cache, il est recommandé de définir la variable opcache.interned_strings_buffer de votre fichier de configuration PHP à une valeur supérieure à 10.
Un coup de sudo nano /etc/php/8.2/fpm/php.ini
(modifiez avec votre dernière version de php) et assurez-vous que les paramètres soient comme ça :
; The OPcache shared memory storage size. opcache.memory_consumption=256 ; The amount of memory for interned strings in Mbytes. opcache.interned_strings_buffer=16
Et redémarrer php :
sudo service php8.0-fpm restart
Liens publics cassés après la migration de données
Origine
Vu que nextcloud ne supporte pas officiellement le déplacement du dossier data, dans ses liens publics, il garde des références à l'ancien chemin des fichiers : forcément, ça ne marche pas … Pour chaque partage, nextcloud stocke dans quel “storage” ce lien est (un id numérique), et dans une autre table il stocke la correspondance “id numérique de stockage” ⇔ chemin réel sur le disque. Du coup, quand on indique à nextcloud que le dossier de données sera désormais dans /var/stockage/mmf/nextcloud_data au lieu de /var/www/cloudmmf/data, au lieu de modifier le stockage /var/www/cloudmmf/data, il crée un nouveau “storage” qui pointe vers ce dossier (>;<). Les liens de partages pointent donc vers l'ancien “storage”, qui pointe sur un endroit inexistant sur le disque …
Identifier le problème
Pour voir ça, on trouve le token d'un partage qui est censé marcher, mais ne marche pas, par exemple https://cloud.millionsmissing.fr/s/s46w79Hpag4xGTa. Le token est ce qu'il y a dans l'url après le /s/
, donc ici s46w79Hpag4xGTa
. On va ensuite lancer mysql et farfouiller dans la DB :
sudo mysql -u root
USE mmf_prod; SELECT * FROM oc_share WHERE token='s46w79Hpag4xGTa';
On voit bien que le partage existe, et que le fichier sur lequel il pointe est 71756
:
| 281 | 3 | NULL | NULL | chantal | chantal | NULL | file | 71756 | NULL | 71756 | /Partages/Collège_médecine_interne_4ème_Ed.pdf | 1 | 1644324948 | 0 | NULL | s46w79Hpag4xGTa | 0 | NULL | 0 | NULL | 0 | |
Du coup, on regarde ce fichier 71756
:
SELECT * FROM oc_filecache WHERE fileid='71756';
Et là, on voit qu'il pointe vers le storage 13
:
| 71756 | 13 | __groupfolders/2/RESSOURCES/Ressources_DocTravail/AppellationsEM_SFC/Collège_médecine_interne_4ème_Ed.pdf | 565f2141283f7117bd246d166f7de95e | 72579 | Collège_médecine_interne_4ème_Ed.pdf | 5 | 3 | 8194568 | 1624638322 | 1624638322 | 0 | 0 | b33590d3fe04a1f3e463081ad34d7c89 | 27 | |
Du coup, on regarde dans notre table de storage ce que l'on a :
+------------+-------------------------------------------------------------+-----------+--------------+ | numeric_id | id | available | last_checked | +------------+-------------------------------------------------------------+-----------+--------------+ | 1 | local::/home/millionsmissing/www/html/nc_millionsmiss/data/ | 1 | NULL | | 2 | home::gestionnaire_nc_003 | 1 | NULL | | 6 | home::gestionnaire_mm | 1 | NULL | | 7 | home::chantal | 1 | NULL | | 8 | home::amalia | 1 | NULL | | 11 | home::CarineB | 1 | NULL | | 12 | local::/var/www/clients/client10/web79/web/data/ | 1 | NULL | | 13 | local::/var/www/mmf/data/ | 1 | NULL | | 14 | home::celineg | 1 | NULL | | 15 | local::/var/stockage/mmf/nextcloud_data/ | 1 | NULL | | 16 | home::glorf | 1 | NULL | +------------+-------------------------------------------------------------+-----------+--------------+
On voit bien que le 13 pointe encore vers notre ancien storage !
Résoudre le problème
Librement inspiré d'ici
D'abord, on éteint nginx, sinon nextcloud va mettre le bazar dans nos opérations (en recréant un storage sans notre accord) :
systemctl stop nginx
Puis on revient dans la console SQL, et on commence à supprimer le nouveau storage que nextcloud a créé :
DELETE FROM oc_storage WHERE numeric_id=15;
Puis on modifie l'ancien storage, pour lui donner le nouveau chemin de nos données :
UPDATE oc_storage SET id='local::/var/stockage/mmf/nextcloud_data/' WHERE numeric_id=13;
Et on peut vérifier que nos modifications ont bien été faites :
SELECT * FROM oc_storages;
+------------+-------------------------------------------------------------+-----------+--------------+ | numeric_id | id | available | last_checked | +------------+-------------------------------------------------------------+-----------+--------------+ | 1 | local::/home/millionsmissing/www/html/nc_millionsmiss/data/ | 1 | NULL | | 2 | home::gestionnaire_nc_003 | 1 | NULL | | 6 | home::gestionnaire_mm | 1 | NULL | | 7 | home::chantal | 1 | NULL | | 8 | home::amalia | 1 | NULL | | 11 | home::CarineB | 1 | NULL | | 12 | local::/var/www/clients/client10/web79/web/data/ | 1 | NULL | | 13 | local::/var/stockage/mmf/nextcloud_data/ | 1 | NULL | | 14 | home::celineg | 1 | NULL | | 16 | home::glorf | 1 | NULL | +------------+-------------------------------------------------------------+-----------+--------------+
Et voilà, on peut redémarrer nginx :
systemctl start nginx