Installer Nextcloud sur un Raspberry Pi

connexion nextcloud au Pi

ÉTAPE I: Serveur web

► On commence par mettre à jour son ordinateur, pour éviter des ennuis par la suite.

sudo apt update
sudo apt upgrade

Maintenant on installe le serveur Apache.

sudo apt install apache2

Ensuite nous allons éditer les droits pour travailler sur les dossiers.

Au passage, vous pouvez changer l’utilisateur « pi » par le vôtre, si vous l’avez déjà changer à l’installation du Raspberry Pi.

Votre serveur web pointe sur le dossier « html », nous mettrons notre service Nextcloud dedans.

sudo chown -R pi:www-data /var/www/html/
sudo chmod -R 770 /var/www/html/

Si tout va bien vous pouvez accéder à votre serveur Apache en tapant :

http://127.162.0.11 (il faut changer l’ip locale par la vôtre).

► Passons à l’installation du langage PHP.

sudo apt install php php-mbstring

Ensuite, on supprime « index.html » pour le remplacer par un index.php.

sudo rm /var/www/html/index.html
echo "" > /var/www/html/index.php

Vous pouvez accéder à votre page PHP en tapant :

http://127.162.0.11 (il faut changer l’ip locale par la vôtre).

Normalement la page a changée par rapport à Apache.

► Maintenant nous installons Mysql.

sudo apt install mariadb-server php-mysql

Nous pouvons maintenant vérifier le fonctionnement.

sudo mysql --user=root

Dernière étape, préparer l’utilisateur « root ».

DROP USER 'root'@'localhost';
CREATE USER 'root'@'localhost' IDENTIFIED BY 'votreMotDePasse';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;

Ne perdez pas votre mot de passe, vous en aurez besoin.

Pour sortir de Mysql il suffit de taper : exit

Vous revoilà dans le Shell !

► Nous allons installer PHPMyAdmin, c’est pratique d’avoir une interface graphique accessible par le navigateur.

sudo apt install phpmyadmin

Choisissez « no » à la question concernant l’utilisation de dbconfig-common.

Pour la question sur Apache juste avant, il faut le laisser coché. Histoire d’être bien compatible, il faut installer une extension à PHP.

sudo phpenmod mysqli
sudo /etc/init.d/apache2 restart

La dernière commande redémarre le service Apache.

Reste maintenant à créer un lien symbolique du dossier d’installation vers « html ».

sudo ln -s /usr/share/phpmyadmin /var/www/html/phpmyadmin

Allons à l’adresse: http://127.162.0.11/phpmyadmin et connectez-vous, bien sûr avec l’utilisateur « root » et « votreMotDePasse ».

Dans la fenêtre principale en bas, vous aurez un message d’erreur, cliquez sur le lien et vous pouvez créer une base de données « phpmyadmin ».

Voilà pour la partie la partie web, nécessaire à l’installation de Nextcloud par la suite.

En attendant vous avez un petit serveur web, si vous ajoutiez un serveur FTP, vous auriez un serveur web complet.

ÉTAPE II: Nextcloud

► Commençons par télécharger la dernier version de Nextcloud dans le Terminal.

wget https://download.nextcloud.com/server/releases/latest.zip

Puis on extrait l’archive dans le dossier « html ».

sudo unzip ./latest.zip -d /var/www/html/

Maintenant on repasse à l’étape des droits.

Vous pouvez changer l’utilisateur « pi » si vous aviez changé le nom d’utilisateur à l’installation.

La commande -R est récursive, donc tous les dossiers à l’intérieur de « html » changeront de droits aussi.

sudo chown -R pi:www-data /var/www/html/
sudo chmod -R 770 /var/www/html/

Maintenant vous pouvez lancer Nextcloud à l’adresse: http://127.162.0.11/Nextcloud Vous allez créer un nom d’utilisateur ainsi qu’un mot de passe.

Par défaut les données sont hébergées sur la carte SD, mais vous pouvez en changer le chemin si vous avez mis un disque dur externe (voir étape IV pour préparer un disque externe).

Pour la base de données, mettre l’utilisateur « root » et votre « motDePasse ».

Nommer la base « nextcloud » et vous pouvez laisser « localhost ».

Si vous êtes en SSH, la page suivante ne s’ouvre pas car nous avons mis « localhost » juste avant, donc il suffira de remplacer dans la barre d’adresse « localhost » par l’ip.

Voilà votre Nextcloud est en place !

ÉTAPE III: Certificat SSL

Par défaut nous sommes en protocole http simple, nous allons voir comment installer Certbot et générer un certificat SSL avec Let’s Encrypt.

La sécurité c’est important, et surtout pratique pour éviter les messages d’alertes dans le navigateur.

Pour ma part, je le fais via Snapcraft pour tester, mais si vous êtes sur un Raspberry Pi Zero, il vaut mieux passer par APT, et je dirais même plus, il faut passer par Aptitude.

► Via APT:

sudo apt install certbot python3-certbot-apache

Vous pouvez passer à l’étape du certificat directement.

► Via Snap, parce que pourquoi pas:

sudo apt install snapd
sudo reboot

Une fois redémarré, il faut mettre le dernier morceau de Snap

sudo snap install core

► Si vous aviez déjà un certificat SSL appliquer cette commande. Sinon étape suivante.

sudo apt remove certbot python3-cert*
sudo apt autoremove

► On installe Certbot avec la première commande, puis on créé un lien logique.

sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot

► Générer le certificat.

sudo certbot --apache

Lisez bien, car on vous demandera un email, pour vous prévenir de régénérer votre certificat, mais ce n’est pas obligatoire.

Puis il vous sera proposez de participer à une analyse de stats, personnellement j’ai mis non.

Dernière étape il vous sera demandé votre domaine: mon.domaine.com, et le certificat va être généré.

Si tout va le « https » est activé.

ÉTAPE IV: Mettre les datas sur un disque dur externe.

Dans l’étape II à l’installation on vous demande où mettre les données.

Personnellement j’ai choisi un disque dur mécanique externe qui traînait. J’ai branché le tout sur un port USB 3.

Pour ça j’ai choisi de formater mon disque en Ext4 (format pour Linux), je l’ai fait à partir d’une machine sous Debian, mais vous avez le même outil sur Ubuntu.

Sur le Pi pour que cela fonctionne, vous devez faire monter votre disque au démarrage.

► Trouver son disque dur.

L’adresse est en bas de liste, en général vous aurez « /dev/sda1 ».

sudo fdisk -l

► Pour le faire monter.

sudo mount /dev/sda1 /mnt

► Donner des droits pour l’usage sur Nextcloud.

Vous pouvez changer « pi » par votre nom de compte.

sudo chown -R pi:www-data /mnt/
sudo chmod -R 770 /mnt/

► Monter le disque automatiquement au démarrage.

sudo nano /etc/fstab

Ajouter cette ligne en dessous des disques déjà présents.

/dev/sda1             /mnt            ext4    defaults          0       0

Ctrl+o j’enregistre et Ctrl+x pour fermer l’outil. Normalement votre disque est prêt pour monter automatiquement au démarrage.

Cette solution pour l’hébergement des données est bien plus rapide que sur la carte SD du Pi.

ÉTAPE V: L’ip à mettre à jour.

Pour ça j’ai utilisé l’utilitaire DDclient, qui mettra à jour l’ip de votre BOX internet vers votre service de routage d’IP.

sudo apt install ddclient

Vous pouvez choisir de répondre aux questions des paramètres ou éditer le fichier « .conf ».

sudo nano /etc/ddclient.conf

Pour que le service démarre avec votre Pi, il faut éditer un fichier et vérifier que la valeur « run_daemon » soit sur « true ».

sudo nano /etc/default/ddclient

Normalement, si vous avez mis les bons paramètres vous n’aurez pas de problème.

Mais documentez vous avec quelques recherches sur internet, car en fonction des services de routage d’adresse les données à rentrer sont parfois différentes.

ÉTAPE VI: Extensions pour PHP.

Dans les paramètres de sécurité de Nextcloud, ce dernier vous dira qu’il faut ajouter ou améliorer des choses. Vous devrait ajouter des extensions pour « php ».

sudo apt install php-intl
sudo apt install php-bcmath
sudo apt install php7.4-gmp
sudo apt install php-imagick
sudo apt install imagemagick

Il est conseillé de faire un « sudo service apache2 restart » à la fin, et si tout va bien vous n’aurez plus de message d’alerte sur ces quelques points.

C’était un peu long ce tutoriel, j’ai rassemblé tout ce que j’ai trouvé sur le net, et j’espère que vous serez nombreux a tester ce service Nextcloud !

Améliorations pour Nextcloud sur le Raspberry Pi

Dans un précédent article nous avions vu comment installer Nextcloud sur votre Raspberry Pi.
Ici nous allons voir comment corriger des erreurs et améliorer notre installation. J’ai balayé large afin de répondre à un maximum de messages d’erreur.
Il est possible que je mette l’article à jour de temps en temps en fonction des découvertes que je ferai.
N’étant pas un professionnel du domaine veillez à vous documenter aussi, je ne voudrais pas être responsable d’un drame !
Nous allons faire un grand tour des problèmes et j’espère que tout ça vous permettra de profiter au mieux de votre service Nextcloud.
Corriger l’erreur d’utilisateur du dossier Nextcloud:
On va simplement changer l’ordre des groupes.

sudo chown -R www-data:nomUtilisateurPi /var/www/html/nextcloud

Ajouter les différents modules PHP manquants:

Tous ces petits modules d’extensions vont vous permettre un meilleur support dans php.
Si vous êtes passé à une autre version de php, vous pouvez changer les numéros.

sudo apt install php-intl
sudo apt install php-bcmath
sudo apt install php7.4-gmp
sudo apt install php-imagick
sudo apt install imagemagick

Problème de préfixe régional:

On va éditer le fichier de configuration de Nextcloud et ajouter une ligne avant la fermeture « ); ».

sudo nano /var/www/html/nextcloud/config/config.php
'default_phone_region' => 'FR',

Redémarrage du serveur Apache.

sudo service apache2 restart

Corriger l’erreur HSTS et de redirection 301:

Éditons le fichier apache2.conf sur le Raspberry Pi, pour d’autres systèmes cela peut être le .htaccess.

sudo nano /etc/apache2/apache2.conf

Ajouter tout en bas du fichier ces quelques lignes.

La première est pour le HSTS, les autres permettrons par exemple à l’application Contacts de Mac OS de bien trouver le chemin.
Il faudra ajouter aussi la balise IfModule mod_headers.c avec les chevrons, comme sur l’image.
N’oubliez pas de fermer la balise. 

Exemple avec les chevrons et if module.

Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
Redirect 301 /.well-known/carddav /nextcloud/remote.php/dav
Redirect 301 /.well-known/caldav /nextcloud/remote.php/dav
Redirect 301 /.well-known/webfinger /nextcloud/index.php/.well-known/webfinger
Redirect 301 /.well-known/nodeinfo /nextcloud/index.php/.well-known/nodeinfo

Puis il faut activer l’entête Apache et relancer le tout !

sudo a2enmod headers
sudo systemctl restart apache2

Si vous avez un blocage pour relancer votre page web. ^_^

sudo reboot

Activation du caching:

En activant le caching nous aurons normalement une machine plus véloce. J’ai utilisé « redis server », il y a d’autres solutions mais celle-ci fonctionne bien.

sudo apt install php-apcu redis-server php-redis -y
sudo nano /etc/redis/redis.conf

Changez le port 6379 par 0 et vous décommentez les paramètres qui suivent.

unixsocket /var/run/redis/redis.sock
unixsocketperm 700

Maintenant vous passez « unixsocketperm 700 » à la valeur 770 pour les permissions. On ajoute maintenant l’utilisateur Redis à Apache.

usermod -a -G redis www-data

Redémarrage du server Redis.

service redis-server restart

Maintenant on ajoute des paramètres de caching au fichier de configuration Nextcloud. Recopier le code à l’identique: 

Attention à ne pas faire d’erreur !

Redémarrage du serveur.

systemctl enable redis-server

Réglage de la mémoire php:

La mémoire par défaut est de 128Mo mais Nextcloud a besoin de 512Mo.
Nous allons éditer le fichier php.ini est augmenter tout ça.

sudo nano /etc/php/7.4/apache2/php.ini

Cherchez « memory_limit » avec Ctrl+w et remplacez la valeur comme ci-dessous.

memory_limit = 512M

Redémarrage du serveur Apache.

sudo service apache2 restart

Impossible de vider la corbeille:

Parfois on rencontre des problèmes avec la corbeille dans l’interface graphique, casse la tienne, on va passer par le terminal.

cd /var/www/html/nextcloud
nc_user=www-data
sudo -u ${nc_user} php occ trashbin:cleanup --all-users

Normalement en réponse de retour vous aurez le nom d’utilisateur du ou des comptes NextCloud.

Autoriser la connection d’un sous domaine:
Pour autoriser un sous domaine à se connecter, il faudra ajouter l’adresse. Nous éditions encore une fois le fichier de configuration de Nextcloud.

sudo nano /var/www/html/nextcloud/config/config.php

Il faudra ajouter votre sous domaine dans « trusted domaine ».

1 => 'sous.domaine.com',

Redémarrage du serveur Apache.

sudo service apache2 restart

Activer le mode maintenance:

Direction le fichier de configuration de Nextcloud.

sudo nano /var/www/html/nextcloud/config/config.php

Si la ligne maintenance est absente, ajoutez la. La valeur « true » nous donne la maintenance, la valeur « false » coupe cette dernière, et nous repasse en fonctionnement normal.

Idéal pour des mises à jour ou bricoler sur Nextcloud.

'maintenance' => true,

Corriger l’erreur Server replied « 423 Locked »:

Nous allons nous connecter à la BDD, il faut donc connaître le nom de l’utilisateur, et le mot de passe, mais aussi le nom de votre BDD Nextcloud.
Sinon cette partie va être compliquée. Avant de passer à la suite activer le mode maintenance.

mysql --user=utilisateurRoot --password=monDePasse
use votreBDDNextcloud;
DELETE FROM oc_file_locks WHERE 1;

Corriger le problème APCU pour php CLI :

Pour corriger le problème, il suffit d’éditer le fichier apcu.ini.
Debian avec ISPConfig ignore les paramètres PHP du site web, il faut donc définir le CLI dans le fichier de configuration.

sudo nano /etc/php/7.4/mods-available/apcu.ini

Ajoutez les valeurs suivantes sur la ligne du dessous.

apc.enable_cli=1
apc.shm_size=512M

Puis redémarrer apache.

sudo service apache2 restart

Activation du htaccess:

Si vous avez un avertissement pour le « .htaccess » il suffit de l’activer.

sudo nano /etc/apache2/apache2.conf

Puis passer les paramètres de « None » à « All » et sur /var/www/ et modifier le pointage vers /var/www/html/ en fonction de votre dossier web. 

Exemple de configuration.

Options Indexes FollowSymLinks
AllowOverride All
Require all granted

Redémarrage de Apache.

sudo service apache2 restart

Réussir le scan de sécurité en A+:

Vous aurez remarqué que l’installation dans mon tutoriel s’est faite dans le dossier « /var/www/html/ ».
Cet emplacement ne permettra pas d’avoir la note A+, pour avoir la note maximale, il suffira de déplacer le dossier « nexcloud » dans le dossier « www ».
Si vous ne déplacez pas le dossier il sera impossible d’avoir la note max, mais vous aurez un A avec une erreur « __Host-Prefix ». https://scan.nextcloud.com
Augmenter la taille maximale de téléversement de 2M:
Pour modifier la taille des téléverssements dans le client web (navigateur) il faut changer deux valeurs, « post_max_size » et « upload_max_filesize ».
Personnellement je cherche les valeurs avec le raccourci « w » dans l’éditeur Nano. J’ajoute au deux 5G.

sudo nano /etc/php/7.4/apache2/php.ini

Éditer votre fichier, puis redémarrer.

sudo service apache2 restart

NB: Toutes ces corrections conviennent à une installation de Nexcloud sur un Raspberry Pi, avec Raspberry Pi OS.

Les pré-requis ici sont, Apache, php, MySQL / Mariadb, et la dernière version de Nextcloud.
Corriger l’erreur « occ db:add-missing-indices »:
Si vous êtes passé de Nextcloud Hub II version 23 à la 24, dans la vue d’ensemble vous avez peut-être une erreur « occ db:add-missing-indices ».
Pour la corriger rien de plus simple.

sudo -u www-data php /var/www/html/nextcloud/occ db:add-missing-indices

Normalement vous êtes à nouveau tranquille, mais attention pour certains le chemin est /var/www/html et pour d’autres simplement /var/www en fonction de vos installations.

Activer Cron :
Pour exécuter des tâches régulières il faut manipuler un fichier et donner le bon chemin.
Surtout si votre dossier n’est pas dans /www/. L’utilisateur doit être www-data, dans d’autre Linux que Debian ça change.
Pour activer Cron, il suffit de passer par les paramètres de base.

sudo crontab -u www-data -e

Choisir 1 pour l’éditeur nano. Vous ajoutez la ligne :

*/5  *  *  *  * php -f /var/www/html/nextcloud/cron.php

Puis la commande :

crontab -u www-data -l

Vous donne :

*/5  *  *  *  * php -f /var/www/html/nextcloud/cron.php

Je conseille un reboot, ou relancer apache.

Corriger l’erreur « opcahe » inférieur à 8:

sudo nano /etc/php/7.4/apache2/php.ini

Chercher la ligne opcache.interned_strings_buffer=8 et mettre 16.

   Envoyer l'article en PDF   

Laisser un commentaire