====== Cloud storage : Nextcloud ====== On oublie Owncloud, on passe directement sur son fork : Nextcloud. * Site officiel : [[https://nextcloud.com]], * Dépot Github : [[https://github.com/nextcloud/server]], * Téléchargement du client de synchronisation : [[https://nextcloud.com/install/#install-clients]]. ===== Prérequis MariaDB ===== Utilisateurs de MariaDB, Nextcloud demande de modifier une option MariaDB avant de commencer : nano /etc/mysql/my.cnf [mysqld] binlog-format=mixed On redémarre le serveur MariaDB et tout est prêt : service mariadb restart ===== Installation ===== On télécharge le package server (vérifier la dernière version [[https://nextcloud.com/install/#instructions-server|ici]]) et on décompresse : wget https://download.nextcloud.com/server/releases/nextcloud-11.0.2.zip unzip nextcloud-11.0.2.zip mv nextcloud /var/www/ #si autre utilisateur utilisé, on redonne les droits : chown -R www-data:www-data /var/www/nextcloud Se rendre à l'adresse voulue, et lancer l'installation (avec configuration MySQL/MariaDB ici). ===== Erreur répertoire DATA accessible ===== Si vous obtenez une erreur avec Apache qui ressemble à :\\ ''Votre dossier de données et vos fichiers sont probablement accessibles depuis internet. Le fichier .htaccess ne fonctionne pas. Nous vous recommandons vivement de configurer votre serveur web de façon à ce que ce dossier de données ne soit plus accessible, ou de le déplacer hors de la racine du serveur web.''\\ Vérifiez dans votre fichier de configuration Apache, au niveau des balises ''directory'' : [...] AllowOverride None [...] Si ''AllowOverride'' est sur ''None'', passez le à ''All'', pour autoriser la prise en charge des fichiers ''.htaccess'' et relancez Apache : service apache2 restart ===== Cache ===== Utiliser un cache est recommandé par Nextcloud/Owncloud, on va donc y remédier.\\ On commence par installer les paquets requis : apt-get install redis-server php7.0-apcu php7.0-redis On configure Redis : nano /etc/redis/redis.conf #On vérifie qu'on écoute bien en local : bind 127.0.0.1 #On supprime le port 6379 pour 0 port 0 #On a désactiver l'écoute réseau, on passera par le socket local. #Décommenter la ligne "unixsocket /var/run/redis/redis.sock", et en profiter pour changer la permission en "770" au lieu de "700". unixsocket /var/run/redis/redis.sock unixsocketperm 770 On ajoute notre utilisateur ''www-data'' au groupe ''redis'' : usermod -a -G redis www-data Et on relance Apache et Redis : service apache2 restart service redis-server restart Nextcloud est installé, Redis est installé et configuré. Il reste à configurer Nextcloud pour prendre en compte le cache Redis.\\ On va éditer manuellement le fichier de configuration Nextcloud et lui rajouter à la fin : nano /var/www/nextcloud/config/config.php #APCu pour le local, 'memcache.local' => '\OC\Memcache\APCu', #Redis pour les locks de fichiers, 'memcache.locking' => '\OC\Memcache\Redis', 'memcache.distributed' => '\OC\Memcache\Redis', 'filelocking.enabled' => 'true', 'redis' => array ( #Configuration avec le socket, pas de connexion TCP, 'host' => '/var/run/redis/redis.sock', 'port' => 0, 'timeout' => 0.0, ), On redémarre le tout pour avoir une base propre, et le cache devrait fonctionner correctement.\\ Documentation officielle : [[https://docs.nextcloud.com/server/11/admin_manual/configuration_server/caching_configuration.html]]. ===== URL simples ===== On va activer les URL simples, pour nettoyer un peu tout ça.\\ on vérifie que les mods Apache nécessaires sont bien activés : a2enmod env rewrite On va encore éditer manuellement le fichier de configuration Nextcloud pour ajouter la ligne (''/nextcould'' est le dossier ou se situe notre instance Nextcloud) : nano /var/www/nextcloud/config/config.php 'htaccess.RewriteBase' => '/nextcloud', Enfin, on se place dans le dossier de Nextcloud, et on met à jour le fichier ''.htaccess'' : cd /var/www/nextcloud sudo -u www-data php occ maintenance:update:htaccess On passe donc d'url du style : https://my.domain.tld/nextcloud/index.php/settings/admin à : https://my.domain.tld/nextcloud/settings/admin ===== News APP ===== Le lecteur RSS intégré à Nextcloud sous la forme d'une application, s'appelle ''News''.\\ De base, sous Nextcloud 11, je ne la vois pas dans le marketplace, je l'installe manuellement : #On se place dans le dossier des apps Nextcloud cd /var/www/nextcloud/apps #On télécharge l'archive, dont on a récupéré l'adresse ici : https://apps.nextcloud.com/apps/news wget https://github.com/nextcloud/news/releases/download/10.1.0/news.tar.gz #On décompresse tar zxvf news.tar.gz #On applique les droits au dossier chown -R www-data:www-data news/ #On supprime l'archive devenue inutile rm news.tar.gz Finalement, on se rend dans les applications de notre Nextcloud, et on active ''News''. ===== Cron ===== On va préférer utiliser cron pour gérer la tâche de maintenance : * Configurer l'utilisation de CRON sur la page d'administration de l'instance Nextcloud. Créer la tâche système : crontab -e -u www-data On ajoute la ligne (bien vérifier le chemin vers le fichier ''cron.php'') : */15 * * * * php -f /var/www/nextcloud/cron.php ===== Logs & fail2ban ===== ==== logrotate ==== On vérifie la présence des paquets : apt-get install fail2ban logrotate On crée le script de rotation des logs (toujours vérifier le chemin vers Nextcloud) : nano /etc/logrotate.d/nextcloud /var/www/nexcloud/data/nextcloud.log { weekly missingok rotate 8 compress notifempty create 640 www-data www-data } ==== fail2ban ==== Création du filtre ''fail2ban'' : nano /etc/fail2ban/filter.d/nextcloud.conf [Definition] failregex={"reqId":".*","remoteAddr":".*","app":"core","message":"Login failed: '.*' \(Remote IP: ''\)","level":2,"time":".*","method":".*","url":".*","user":".*","version":".*"} Création de la règle : nano /etc/fail2ban/jail.local [nextcloud] enabled = true filter = nextcloud port = https protocol = tcp bantime = 3600 findtime = 600 maxretry = 3 logpath = /var/www/nextcloud/data/nextcloud.log Redémarrer le service fail2ban : service fail2ban restart ===== CalDAV / CardDAV ===== CalDAV URL : https://my.domain.tld/nextcloud/remote.php/dav/ Pour iOS / OSX : https://my.domain.tld/nextcloud/remote.php/dav/principals/users// CardDAV URL : https://my.domain.tld/nextcloud/remote.php/dav/addressbooks/users//contacts/ ==== DAVdroid ==== CalDAV & CardDAV : https://my.domain.tld/nextcloud/remote.php/dav/ Plus d'infos [[https://davdroid.bitfire.at/configuration/nextcloud/|ici]]. ==== RFC 6764 ==== **Définition** : ''This specification describes how DNS SRV records, DNS TXT records, and well-known URIs can be used together or separately to locate CalDAV (Calendaring Extensions to Web Distributed Authoring and Versioning (WebDAV)) or CardDAV (vCard Extensions to WebDAV) services.''\\ \\ En gros : utiliser le serveur DNS (ou ''.well-known'', comme le fait Let's Encrypt pour son service) pour gérer la découverte automatique de service CardDAV / CalDAV.\\ \\ Les entrées disponibles sont : * Une entrée de type ''SRV'' pour définir le serveur, * Une entrée de type ''TXT'' pour définir le chemin sur le serveur. Les noms des entrées sont différentes suivant l'utilisation ou non de ''TLS'' (le ''s'' final si TLS), exemples :\\ \\ Entrée ''SRV'' ''CalDAV'' sans ''TLS'' : _caldav._tcp SRV 0 1 80 my.domain.tld. Entrée ''SRV'' ''CalDAV'' avec ''TLS'' : _caldavs._tcp SRV 0 1 443 my.domain.tld. Entrée ''SRV'' ''CardDAV'' sans ''TLS'' : _carddav._tcp SRV 0 1 80 my.domain.tld. Entrée ''SRV'' ''CardDAV'' avec ''TLS'' : _carddavs._tcp SRV 0 1 443 my.domain.tld. \\ \\ La même chose pour l'entrée de type ''TXT'' :\\ \\ Entrée ''TXT'' ''CalDAV'' sans ''TLS'' : _caldav._tcp TXT "path='/nextcloud/remote.php/dav/'" Entrée ''TXT'' ''CalDAV'' avec ''TLS'' : _caldavs._tcp TXT "path='/nextcloud/remote.php/dav/'" Entrée ''TXT'' ''CardDAV'' sans ''TLS'' : _carddav._tcp TXT "path='/nextcloud/remote.php/dav/'" Entrée ''TXT'' ''CardDAV'' avec ''TLS'' : _carddavs._tcp TXT "path='/nextcloud/remote.php/dav/'" \\ \\ Au final, on aura normalement 4 entrées, suivant les choix faits (''TLS'' ou non, choix du serveur et du chemin). Ici avec ''TLS'' : _caldavs._tcp SRV 0 1 443 cloud.libox.fr. _carddavs._tcp SRV 0 1 443 cloud.libox.fr. _caldavs._tcp TXT "path='/remote.php/dav/'" _carddavs._tcp TXT "path='/remote.php/dav/'" === Utilisation de .well-known === Tout se passe dans le fichier ''.htaccess'', pour Apache du moins.\\ Il nous faudra les 2 lignes (qui sont déjà incluses de base dans Nextcloud, juste pour voir le fonctionnement ici) : RewriteRule ^\.well-known/carddav /remote.php/dav/ [R=301,L] RewriteRule ^\.well-known/caldav /remote.php/dav/ [R=301,L] Qui redirigent bien les services correctement vers le bon emplacement (voir [[https://docs.nextcloud.com/server/11/admin_manual/issues/general_troubleshooting.html#service-discovery-label|page documentation officielle]]). ==== Export des données *DAV ==== Contacts : https:///remote.php/dav/addressbooks//?export Calendriers : https:///remote.php/dav/calendars//?export ===== Z-Push ===== Plus d'informations sur le post : [[https://help.nextcloud.com/t/z-push-sync-and-how-it-works/5688|z-push-sync-and-how-it-works]]. ====== Avec le client Owncloud CLI ====== Pour Linux, à tester si compatible avec Nextcloud : [[https://memo-linux.com/debian-8-installer-et-utiliser-le-client-owncloud-sans-interface-graphique/]]. ===== Client Tweak ===== ==== PPA Client ==== add-apt-repository ppa:nextcloud-devs/client apt-get update apt-get install nextcloud-client Voir plus sur la page du dépôt : https://github.com/nextcloud/client_theming ==== Android ==== https://play.google.com/store/apps/details?id=com.nextcloud.client\\ ==== Modifier manuellement la configuration du client ==== Trouver le bon fichier de configuration du ''client'' : * Linux : $HOME/.local/share/data/ownCloud/owncloud.cfg * Windows : %LOCALAPPDATA%\ownCloud\owncloud.cfg * MAC OS X : $HOME/Library/Application Support/ownCloud Chercher la section ''[General]'' et ajouter (pour le transfert de gros fichiers, augmenter la taille des chunks et les transferts simultanés) : [General] #Taille d'un block, ici 10M chunkSize 10485760 #Nombre de tâches en parallèle maxParallel 5 #Augmenter le timeout timeout 3600 Via [[https://doc.owncloud.org/desktop/2.3/advancedusage.html|Documentation Client Owncloud]] (pas encore de documentation client spécifique Nextcloud). ===== Sécurité ===== Test sécurité et hardening d'une instance Nextcloud : * https://scan.nextcloud.com ===== Gestion de la Corbeille ===== Via ''https://memo-linux.com/owncloud-vider-la-corbeille-sur-le-serveur/''\\ & ''https://doc.owncloud.org/server/9.1/admin_manual/configuration_server/config_sample_php_parameters.html'' \\ Vider la corbeille manuellement, pour tous les utilisateurs : sudo -u www-data php occ trashbin:cleanup Pour un ou des utilisateurs spécifiques : sudo -u www-data php occ trashbin:cleanup [...] Configuration du délais de suppression automatique, dans le fichier de configuration ''config/config.php'' : #Suppression automatique des fichiers dans la corbeille après 10 jours (''auto'' pour supprimer au bout de 30 jours SI besoin de place, sinon les fichiers restent en place) : trashbin_retention_obligation => '10, 10', #Désactiver la suppression : trashbin_retention_obligation => 'disabled', ===== Améliorer la réactivité lors de la recherche ===== Voir https://www.dadall.info/blog/index.php?article604/ameliorer-la-recherche-dans-nextcloud-avec-nextant