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 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
:
<Directory />
[...]
AllowOverride None
[...]
</Directory>
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: '<HOST>'\)","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/<my-user>/
CardDAV URL :
https://my.domain.tld/nextcloud/remote.php/dav/addressbooks/users/<my-user>/contacts/
DAVdroid
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 page documentation officielle).
Export des données *DAV
Contacts :
https://<server>/remote.php/dav/addressbooks/<user>/<carnet>?export
Calendriers :
https://<server>/remote.php/dav/calendars/<user>/<calendrier>?export
Z-Push
Plus d'informations sur le post : 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
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 Documentation Client Owncloud (pas encore de documentation client spécifique Nextcloud).
Sécurité
Test sécurité et hardening d'une instance Nextcloud :
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 <user1> <user2> [...] <userX>
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',