Update du 23/05/2019 - Exposez votre service Nextcloud sur internet, dans le cadre d’un auto-hébergement. Je vous renvoi à ce billet : https://www.mytinydc.com/index.php/2019/05/23/nextcloud-exposez-votre-instance-sur-internet/
Toujours dans le cadre de la décentralisation du web, il est intéressant de disposer de sa solution de stockage Cloud.
NEXTCloud est la solution que j’ai choisie.
Cette application dispose d’une grande communauté, d’une version navigateur, d’une version Desktop, de versions mobiles et d’un vaste écosystème, dont la fédération. La fédération permet de communiquer avec d’autres serveurs Nextcloud et de faciliter ainsi le partage de documents.
De part son vaste éco-système, Nextcloud permet de reprendre en main ses données, puisqu’il dispose d’un nombre impressionnant de fonctionnalités permettant leur stockage :
- En remplacement de Google Keep : JOPLIN (Desktop et mobile) : https://github.com/laurent22/joplin
- En remplacement du stockage des contacts et calendriers chez Google : Caldav, CardDav (Mobile)
- En remplacement de Google Doc : Pas de solution permettant d’être disposé sur une unité Lowtech. Pour l’instant j’utilise Onlyoffice, installé sur une VM X86. https://nextcloud.com/onlyoffice/
- Intégration de draw.io pour réaliser vos diagrammes (https://apps.nextcloud.com/apps/drawio).
Dans ce billet, je vais expliquer comment installer et paramétrer Nextcloud, pour des Raspberry PI3 et/ou Rock64, sur un réseau local (çà marche aussi pour les plateformes X86 et amd64).
Installation
L’application est écrite en PHP, autant dire que les petites unités Raspberry vont “souffrir”. J’ai fait le choix de disposer le service sur un Rock64, plus rapide, et disposant de plus de mémoire. Pour améliorer encore les performances, je vous conseille d’héberger la base de données Mysql/MariaDB sur une unité séparée (un Raspberry PI 3 suffit).
diagramme réalisé avec draw.io intégré à Nextcloud
Préparation
Ici je vais lister tous les éléments de paramétrage nécessaires :
- Adresse IP du serveur Nextcloud [* ipservnextc] : 192.168.1.2
- compte administrateur d’accès à l’application Nextcloud [* adminnextc] : admin
- Mot de passe du compte administrateur d’accès à l’application Nextcloud [* passadminnextc] : utilisez le logiciel apg pour générer un mot de passe aléatoire (apt install apg; apg)
- adresse IP du serveur MariaDB/Mysql [* ipservmysql] : 192.168.1.3
- Nom de la base de données [* database] : nextcloud
- Compte d’accès à la base de données [* usermysql] : nextcloud
- Mot de passe du compte d’accès à la base de données [* passmysq**l] : utilisez le logiciel apg pour générer un mot de passe aléatoire (apt install apg; apg)
- Fqdn qui permettra l’accès au service nextcloud [* fqndnextc] : nextcloud.mtdc - Si vous souhaitez exposer votre Nextcloud sur internet, vous devez acheter un nom de domaine (tapez “acheter un nom de domaine” sur DuckDuckGo)
[*…] sont les noms raccourcis utilisés, ci-après.
Serveur Nextcloud
Ce service nécessite d’installer plusieurs paquets Debian. Connectez-vous “root” au serveur Nextcloud, et exécutez les commande ci-après :
Mise à jour du système
apt update;apt -y upgrade
Installation des paquets nécessaires
- DEBIAN 9
apt install apache2 libapache2-mod-php7.0 php7.0-cli php7.0-curl php7.0-gd php7.0-opcache php7.0-xml php7.0-zip php7.0-mbstring php7.0-mysql php-imagick unzip sudo openssl nmap
- DEBIAN 10
apt -y install apache2 libapache2-mod-php php-cli php-curl php-gd php-opcache php-xml php-zip php-mbstring php-mysql php-imagick unzip sudo openssl nmap php-pgsql php-intl php-apcu nmap
Les fichiers à télécharger sont ici, mais nous allons directement télécharger la dernière version accesible par son nom “latest”
Rendez-vous sur la console du serveur Nextcloud, et tapez :
cd /var/www/html/
wget https://download.nextcloud.com/server/releases/latest.zip
# Somme de contrôle MD5
wget https://download.nextcloud.com/server/releases/latest.zip.md5
Contrôle d’intégrité :
md5sum -c latest.zip.md5
# doit retourner
latest.zip: OK
Si le contrôle d’intégrité échoue, recommencez le téléchargement.
Décompressez maintenant le contenu du fichier zip “NextCloud” :
unzip latest.zip
Modifiez les autorisations sur l’ensemble du répertoire /var/www/html/nextcloud/ (attribution des autorisations d’accès pour le compte www-data) :
chown -R www-data:www-data /var/www/html/nextcloud/
Supprimez les archives téléchargées :
rm *.zip *.md5
Après l’exécution de ces opérations, le contenu du répertoire “/var/www/html/nextcloud/” doit ressembler à ceci :
Firewall
OUTPUT : 3306/TCP - Limité à l’adresse [* ipservmysql]
INPUT : 443/TCP - Accessible de partout
Serveur de Base données (MariaDB/Mysql )
Connectez-vous root au serveur de base de données, puis exécutez les commandes suivantes :
Mise à jour du système
apt update;apt -y upgrade
Installation des paquets nécessaires
Cette phase vous demandera de fournir le mot de passe “root” d’accès au service MariaDB/Mysql, que vous devrez conserver.
apt install mariadb-server
Firewall
Prenez l’habitude de limiter les accès à votre serveur de bases de données.
INPUT : 3306/TCP - Limité à l’adresse ip de [* ipservnextc]
Configuration
Serveur de Base données (MariaDB/Mysql )
Créons le compte et la base de données pour l’application Nextcloud, ouvrir une console “root” sur le serveur MariaDB/Mysql, puis exécutez les commandes suivantes :
Lancement de l’interpréteur de commande mysql, dans lequel nous allons exécuter des instructions SQL.
Attention vous devrez remplacer les raccourcis ([* …]) par les valeurs retenues lors de la préparation.
mysql
CREATE USER '[* usermysql]'@'%' IDENTIFIED BY '[* passmysql]';
CREATE DATABASE IF NOT EXISTS [* database] CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
GRANT ALL PRIVILEGES on [* database].* to '[* usermysql]'@'%';
FLUSH privileges;
exit
PS : Si vous avez décidé d’installer le service MariaDB/Mysql sur la même machine que l’application Nextcloud, remplacer ‘%’ par ’localhost’ dans les commandes SQL.
Serveur Nextcloud
Ouvrir une console “root” sur le serveur Nextcloud, puis exécutez les commandes suivantes :
Attention vous devrez remplacer les raccourcis ([* …]) par les valeurs retenues lors de la préparation.
Test d’accès au port 3306 du serveur MariaDB/Mysql
nmap -p 3306 [* ipservmysql]
#Vous devrez obtenir la ligne :
#3306/tcp open mysql
cd /var/www/html/nextcloud/
sudo -u www-data php occ maintenance:install --database "mysql" --database-host="[* ipservmysql]" --database-name "[* database]" --database-user "[* usermysql]" --database-pass "[* passmysql]" --admin-user "[* adminnextc]" --admin-pass "[* passadminnextc]"
Nextcloud is not installed - only a limited number of commands are available
Nextcloud was successfully installed
Préparer l’accès à Nextcloud
Pour réaliser cet opération nous allons paramétrer le serveur web (apache2), afin qu’il redirige les demandes d’accès au nom de domaine vers l’application. La liaison se fera avec le protocole HTTPS, nous aurons donc besoin d’un certificat. Étant dans un réseau local, un certificat auto-signé suffira. Nous allons avoir besoin de la variable [* fqdnnextc] retenue lors de la préparation.
Création du certificat https auto-signé
Toujours connecté “root” à la console du serveur Nextcloud, les certicats ssl seront stockés dans le répertoire : “/etc/apache2/ssl/” , créons ce répertoire à l’aide de la commande :
mkdir /etc/apache2/ssl/
Puis tapez ces commandes, en appuyant sur “Entrée” après chaque ligne :
PARAMETER_CERT_C="FR"
PARAMETER_CERT_ST="private"
PARAMETER_CERT_L="France"
PARAMETER_CERT_O="Nantes"
CN=[* fqdnnextc]
PATHCERTS=/etc/apache2/ssl
Attention vous devrez remplacer les raccourcis ([* …]) par les valeurs retenues lors de la préparation.
# sur une seule ligne :
openssl req -new -x509 -days 365 -nodes -subj "/C=$PARAMETER_CERT_C/ST=$PARAMETER_CERT_ST/L=$PARAMETER_CERT_L/O=$PARAMETER_CERT_O/CN=$CN" -out $PATHCERTS/$CN.crt -keyout $PATHCERTS/$CN.key
Deux fichiers ont été créés dans les répertoire “/etc/apache2/ssl/”, dont les noms commencent par [* fqdnnextc]. Vérifiez en tapant la commande :
ls -l /etc/apache2/ssl/
Modifiez les permissions de ces fichiers :
chmod 644 /etc/apache2/ssl/*.crt
chmod 600 /etc/apache2/ssl/*.key
Création du VirtualHost Apache2
Toujours connecté “root” à la console du serveur Nextcloud, je crée un fichier virtualhost, dont la syntaxe est propre à l’environnement apache2.
Le fichier virtualhost se termine par l’extension “.conf”
vi /etc/apache2/sites-available/[* fqdnnextc].conf
Ajoutez ce contenu en l’adaptant, Vous devrez remplacer les raccourcis ([* …]) par les valeurs retenues lors de la préparation.
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
</IfModule>
ServerName [* fqdnnextc]
ServerAdmin [* admin email]
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
RewriteRule ^/\.well-known/host-meta /public.php?service=host-meta [QSA,L]
RewriteRule ^/\.well-known/host-meta\.json /public.php?service=host-meta-json [QSA,L]
RewriteRule ^/\.well-known/webfinger /public.php?service=webfinger [QSA,L]
RewriteRule ^/\.well-known/carddav /remote.php/dav/ [R=301,L]
RewriteRule ^/\.well-known/caldav /remote.php/dav/ [R=301,L]
DocumentRoot /var/www/html/nextcloud
ErrorLog ${APACHE_LOG_DIR}/error-[* fqdnnextc].log
#CustomLog ${APACHE_LOG_DIR}/access-[* fqdnnextc].log combined
CustomLog ${APACHE_LOG_DIR}/access-[* fqdnnextc].log forwardfor
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/[* fqdnnextc].crt
SSLCertificateKeyFile /etc/apache2/ssl/[* fqdnnextc].key
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
<Directory />
Options FollowSymlinks
AllowOverride All
Order allow,deny
allow from all
</Directory>
<Directory /var/www/html/nextcloud/data>
Require all denied
</Directory>
</VirtualHost>
</IfModule>
Enregistez et quitter : ESC:wq
Configuration apache2
Activation du module SSL pour apache2
a2enmod ssl
Activation du mode Rewrite pour apache2
a2enmod rewrite
Activation du mode headers pour apache2
a2enmod headers
Activation du virtualhost
Vous devrez remplacer les raccourcis ([ …]) par les valeurs retenues lors de la préparation.*
a2ensite [* fqdnnextc]
Configuration OPcache
Opcache ( Optimizer Plus Cache) est un système pour PHP, permettant d’améliorer ses performances. Il arrive que ce processus ne fonctionne pas. Afin de s’assurer de son bon fonctionnement, suivez cette instruction :
Recherche sur l’unité, la localisation de la librairie opcache
find /usr -name 'opcache.so'
[Réponse] : /usr/lib/php/20151012/opcache.so
vi /etc/php/7.0/mods-available/opcache.ini
; configuration for php opcache module
; priority=10
zend_extension=[reportez la "Réponse"]
Tapez pour quitter : ESC:wq!
Vérification DNS
Pour joindre le service Nextcloud, vous devez vous assurez que la station avec laquelle vous travaillez (navigateur web), puisse accéder au serveur Nextcloud, par son nom qualifié ( FQDN - variable [ fqdnnextc]* )
Windows : ouvrir une console (cmd.exe), tapez :
nslookup [* fqdnnextc]
Linux : ouvrir une console, tapez :
host [* fqdnnextc]
Ces commandes doivent renvoyer une réponse valide.
*Vous devrez remplacer les raccourcis ([ …]) par les valeurs retenues lors de la préparation. **
Démarrage du service NextCloud
Pour démarrer le service NextCloud, ce dernier est associé à la configuration apache2, exécuter la commande :
systemctl start apache2
ou (si apache2 est déjà démarré)
systemctl restart apache2
Premier accès à Nextcloud
A partir de votre station de travail, démarrer votre navigateur, puis tapez l’url : https://[* fqdnnextc]
Le certificat étant auto-signé, le navigateur indiquera que le certificat n’est pas valide, confirmer l’accès.
Vous devrez remplacer les raccourcis ([* …]) par les valeurs retenues lors de la préparation.
Pour accéder, à votre “Cloud”, connectez-vous avec le compte administrateur, valeurs [* adminnextc] et [* passadminnextc], retenues lors de la préparation.
Paramétrage de votre instance NextCloud
Je vous invite tout d’abord à créer les utilisateurs nécessaires, ne travaillez jamais avec le compte “administrateur” et de vous référer à la documentation officielle disponible sur le site web de NextCloud : https://nextcloud.com/support/
La documentation officielle est en anglais, mais vous trouverez toutes les ressources nécessaires en français en opérant des recherches sur internet.
Tâches planifiées
Préférez, comme indiqué dans la documentation, d’exécuter les tâches planifiées au moyen de la crontab. Par défaut, ce processus est exécuté par chaque utilisateur via une requête XHR, ce qui diminue les performances.
Créer le fichier :
vi /etc/cron.d/nexcloud
et insérer :
#Taches de fond
*/5 * * * * www-data /usr/bin/php /var/www/html/nextcloud/cron.php**
Le programme “cron.php” sera exécuté toutes les 5 minutes (conseillé par Nextcloud) par le serveur.
Connectez-vous à votre instance Nextcloud, à l’aide de votre navigateur, en tant qu’administrateur. Cliquez sur l’icône “utilisateur” (en haut à droite), puis “Paramètres”, “Administration/Paramètres de base”, puis sélectionnez l’option “Cron”.
Accéder à partir des applications
Les applications NextCloud sont disponibles pour PC, Android, IOS et sont téléchargeables ici : https://nextcloud.com/athome/
Le paramétrage de ces applications est similaire à l’accès par navigateur, vous indiquerez l’url d’accès au serveur, votre compte et votre de passe.
Exposer son instance Nextcloud sur internet
Dans le cadre d’un auto-hébergement, vous allez devoir exposer votre service Nextcloud sur l’internet. Je vous renvoi à ce billet : https://www.mytinydc.com/index.php/2019/05/23/nextcloud-exposez-votre-instance-sur-internet/.
Licence de ce document : Creative Commons (CC BY-NC-ND 4.0)
CETTE DOCUMENTATION EST LIVRÉE “EN L’ÉTAT”, SANS GARANTIE D’AUCUNE SORTE ET DISTRIBUÉE DANS UN BUT ÉDUCATIF EXCLUSIVEMENT. L’AUTEUR, CONTRIBUTEURS DE CETTE DOCUMENTATION OU ©MYTINYDC.COM NE SAURAIENT EN AUCUN CAS ÊTRE TENUS RESPONSABLES DES DOMMAGES DIRECTS OU INDIRECTS POUVANT RÉSULTER DE L’APPLICATION DES PROCÉDURES MISES EN ŒUVRE DANS CETTE DOCUMENTATION, OU DE LA MAUVAISE INTERPRÉTATION DE CE DOCUMENT.