====== 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