blog-image

Nextcloud - Installation - Raspberry PI3 - Rock64 (armhf-arm64)

  • dHENRY
  • 08/04/2019
  • (Durée de lecture : 9 mn)

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 :

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 :

contenu du répertoire “/var/www/html/nextcloud”

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.