Logo Nextcloud server cloud

Nextcloud sur Raspberry Pi 4

JM-HOLLAND

21 Nov 2023 à 17:30

devop's

1 Comments

Réalisaer l'installation de Nextcloud sur un raspberry Pi 4 (4 ou 8 GO)

Dans cet article, nous allons installer un cloud personnel, pour se dés-idéologiser de Google. Nous allons commencer par l'environnement du système, ubuntu-server avec Apache, Maria-db, php 8.1 et ses dépendances. Pour fonctionner correctement, Nextcloud à besoin des extensions php suivant :

  • imagemagick
  • redis-server
  • php-apcu
  • php-bcmath
  • php-curl
  • php-gd
  • php-gmp
  • php-imagick
  • php-intl
  • php-mbstring
  • php-mysql
  • php-redis
  • php-xml
  • php-zip

Commençons par l'installation des logiciels nécessaires.

ImageMagick

ImageMagick est un outil de manipulation d'images gratuit et open-source. Il est principalement utilisé pour créer, éditer, composer ou convertir des images bitmap. Ses utilisations incluent le redimensionnement, la rotation, le cisaillement des images, l'application de divers effets spéciaux ou le dessin de texte, de lignes et de courbes. La plupart de ses fonctionnalités sont exécutées depuis la ligne de commande.

Connexion à notre serveur en ssh

ssh ubuntu@192.168.0.20   Remplacer les informations nécessaires pour votre connexion.

Nous allons commencer par vérifier que notre serveur soit bien à jour :

sudo apt update && sudo apt upgrade

Une fois, la vérification faite, on commence l'installation d'ImageMagick.

sudo apt install imagemagick

Maintenant vérifions l'installation

identify -version

Réponse

Version: ImageMagick 6.9.10-23 Q16 aarch64 20190101 https://imagemagick.org
Copyright: © 1999-2019 ImageMagick Studio LLC
License: https://imagemagick.org/script/license.php
Features: Cipher DPC Modules OpenMP
Delegates (built-in): bzlib djvu fftw fontconfig freetype jbig jng jpeg lcms lqr ltdl lzma openexr pangocairo png tiff webp wmf x xml zlib

Maintenant nous allons installer "redis-server".

Redis

Redis est un magasin de données clé-valeur en mémoire open source. Il peut être utilisé comme base de données cache et courtier de messages, et prend en charge diverses structures de données telles que les chaînes, les hachages, les listes, les ensembles, etc. Redis offre une haute disponibilité via "Redis Sentinel "et un partitionnement automatique sur plusieurs nœuds Redis avec "Redis Cluster".

Installation de redis-server

sudo apt install redis-server

Une fois, l'installation complète, le service Redis va démarrer automatiquement.
Maintenant, vérifions notre installation.

sudo systemctl status redis-server

Vous devriez voir quelque chose comme ça

● redis-server.service - Advanced key-value store
   Loaded: loaded (/lib/systemd/system/redis-server.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2022-04-28 18:27:37 CEST; 5 days ago
    Docs: http://redis.io/documentation,
          man:redis-server(1)
   Main PID: 1941 (redis-server)
    Tasks: 4 (limit: 9256)
   CGroup: /system.slice/redis-server.service
           └─1941 /usr/bin/redis-server 127.0.0.1:0
avril 28 18:27:37 ubuntu systemd[1]: Starting Advanced key-value store...
avril 28 18:27:37 ubuntu systemd[1]: redis-server.service: Can't open PID file /run/redis/redis-server.pid (yet?) after star>
avril 28 18:27:37 ubuntu systemd[1]: Started Advanced key-value store.

normalement tout est bon, votre serveur Redis est installé et fonctionnel.

Extensions PHP

Poursuivons , avec l'installation des extensions PHP.

sudo apt install php-apcu php-bcmath php-curl php-gd php-gmp php-imagick php-intl php-mbstring php-mysql php-redis php-xml php-zip

Des extensions peuvent déjà être installées avec votre version de PHP, vérifier et adapter la ligne en fonction.

Installation de Nextcloud

Téléchargement de Nextcloud

wget https://download.nextcloud.com/server/releases/latest.tar.bz2

Modification des droits pour le dossier html
sudo chown -R $USER /var/www/html

Extraction des données dans le dossier /var/www/html

tar -xvf latest.tar.bz2 -C /var/www/html/

Avant d'aller plus loin on vas mettre en place notre fichier de configuration pour notre hôte virtuel.

sudo nano /etc/apache2/sites-available/nextcloud.conf

Cela va créer et ouvrir le fichier de configuration de notre hôte virtuel dans lequel nous allons coller les instructions suivantes. ( à corriger selon vos besoins) 

nextcloud_conf


Alias / "/var/www/html/nextcloud/" 

<Directory /var/www/html/nextcloud/>

         Require all granted

         AllowOverride All 

         Options FollowSymLinks Multiviews

         <IfModule mod_dav.c>

                 Dav off

         </IfModule>

         <IfModule mod_headers.c>

                  Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"

         </IfModule>

</Directory>

On active le site

sudo a2ensite nextcloud.conf

puis on active les modules et le https :

sudo
a2enmod rewrite
a2enmod headers
a2enmod env
a2enmod dir
a2enmod mime

et pour le ssl :

sudo
a2enmod ssl
a2ensite default-ssl

et pour finir on redémarre le service Apache :

sudo systemctl restart apache2

Maintenant on change les propriétés du répertoire Nextcloud :

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

et on va vérifier la version installée :

sudo -u www-data php /var/www/html/nextcloud/occ -V
sudo -u www-data php /var/www/html/nextcloud/occ status

Création de la base de données

Commençons par nous connecter à mariadb -server

sudo mysql

Nous allons d'abord créer la base de données Nextcloud, puis créer un utilisateur avec tous les droits sur cette base.

CREATE DATABASE nomdelaBase;
CREATE USER 'votreIdentifiantDeConnnexion'@'localhost' IDENTIFIED BY 'VotreMotdePasse';
GRANT ALL PRIVILEGES ON nomdelaBase.* TO 'votreIdentifiantDeConnexion'@'localhost';
FLUSH PRIVILEGES;

Attention remplacer "les informations de connexion " par les vôtres.

sortons de mariadb;

exit

Finalisation de l'installation de Nextcloud

Pour finaliser l'installation on va maintenant se connecter à Nexcloud en local.

exmeple: http://192.168.0.20

Interface installation Nextcloud

Une fois les champs renseignés, cliquer sur Terminer l'installation.
On va ensuite retourné sur notre terminal afin de configurer notre installation plus précisément.

  1. Région et téléphone

    sudo -u www-data php /var/www/html/nextcloud/occ config:system:set default_phone_region --value="FR"

    Si besoin modifier le code Pays selon votre lieu de résidence.

  2. Pretty url en hhtps

    Cela permet la suppression de "index.php" dans la barre d'adresse, ce sera plus joli !!!

    sudo -u www-data php /var/www/html/nextcloud/occ config:system:set htaccess.RewriteBase --value="/"
    sudo -u www-data php /var/www/html/nextcloud/occ maintenance:update:htaccess

  3. Edition du htaccess

    On va modifier un peu le fichier .htaccess afin de forcer l'accès en https.

    sudo nano /var/www/html/nextcloud/.htaccess

    aller à la fin du fichier juste avant la balise

    "<IfModule mod_env.c>"
    et avant l'instruction "RewriteBase /"

    RewriteCond %{HTTPS} !=on
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUET_URI} [R=301,L]

  4. Gestion des fichiers supprimés.

    L'application "Deleted_files" gère les fichiers supprimés en fonction du paramètre "trashbin_retention_obligation" du fichier "config.php".

    sudo -u www-data php /var/www/html/nextcloud/occ config:system:set trashbin_retention_obligation --value="auto,30"

    Les fichiers de la poubelle seront supprimés définitivement au bout de 30 jours. Mais si la taille de la poubelle dépasse 50 % de l'espace libre, les fichiers les plus anciens seront supprimés automatiquement.

    Forcer la suppression définitives des fichiers de la corbeille

    sudo -u www-data php /var/www/html/nextcloud/occ trashbin:expire

    Forcer la suppression pour tous les utilisateurs

    sudo -u www-data php /var/www/html/nextcloud/occ trashbin:cleanup --all-users

  5. Taches de fond _ Cron

    Pour son fonctionnement, il est recommandé d'utiliser "Cron" afin d'exécuter les tâches de fonds régulièrement sans intervention.( recherche de nouveaux fichiers, exécution chargement de page, etc.).

    sudo crontab -u www-data -e

    Ajouter cette ligne à la fin du fichier, cela permet l'exécution des tâches toutes les 5 minutes.

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

    configuration du type de tâche dans Nextcloud.

    sudo -u www-data php /var/www/html/nextcloud/occ background:cron

Optimisation des performances

Le serveur est maintenant fonctionnel, mais il reste quelques réglages afin de peaufiner l'installation de Nextcloud.

Mariadb configuration

On vas éditer les fichiers de configuration de la base de données pour de meilleurs résultats et éviter les alertes de sécurisations.
On commence par le fichier mysql.cnf

sudo nano /etc/mysql/conf.d/mysql.cnf

Ajouter les lignes suivantes au début du fichier, au dessus de [mysql]

[mysqld]
innodb_buffer_pool_size=512M
innodb_io_capacity=4000

On enregistre et on ferme le fichier, maintenant on va ouvrir le fichier "my.cnf"

sudo nano /etc/mysql/my.cnf

Ajouter les lignes suivantes a la fin du fichier.

[mysqld]
transaction_isolation = READ-COMMITTED
binlog_format = ROW

et on redémarre le serveur mariadb

sudo systemctl restart mariadb.service

Modification de php.ini

  1. Mémoire

    On va modifier les valeurs de mémoire pour la porter à 512M pour le bon fonctionnement de Nextcloud. (modifier la version de PHP en fonction de vos besoins, ici "8.1")

    sudo sed -i -e "s/^memory_limit \+= \+.*$/memory_limit = 512M/g" /etc/php/8.1/apache2/php.ini
    sudo sed -i -e "s/^output_buffering \+= \+.*$/output_buffering = 0/g" /etc/php/8.1/apache2/php.ini
    sudo systemctl restart apache2.service

    on vérifie si nos changements on été pris en compte =)

    sudo cat /etc/php/8.1/apache2/php.ini | egrep "memory_limit|^output_buffering"

  2. Configuration de REDIS

    Documentation Nextcloud Redis

    Ajout de l'utilisateur "www-data" au groupe REDIS

    sudo usermod -a -G redis www-data

    Configuration de redis.conf

    sudo sed -i -e "s/^#* *port +*6379$/port 0/g" /etc/redis/redis.conf
    sudo sed -i -e "s/^#* *unixsocket +*.*$/unixsocket \/var\/run\/redis\/redis-server.sock/g" /etc/redis/redis.conf
    sudo sed -i -e "s/^#* *unixsocketperm+*.*$/unixsocketperm 770/g" /etc/redis/redis.conf

    Vérification

    sudo cat /etc/redis/redis.conf | egrep "^#* *port +|^#* *unixsocket +|^#* *unixsocketperm +"

    Redémarrage de Redis

    sudo systemctl restart redis-server.service

  3. File locking et Memory cache

    Activation de "filelocking".

    sudo -u www-data php /var/www/html/nextcloud/occ config:system:set filelocking.enabled --value="true"

    configuration de redis

    sudo -u www-data php /var/www/html/nextcloud/occ config:system:set redis host --value="/var/run/redis/redis-server.sock"
    sudo -u www-data php /var/www/html/nextcloud/occ config:system:set redis port --value="0"
    sudo -u www-data php /var/www/html/nextcloud/occ config:system:set redis timeout --value="0.0"

    Configuration de "memcahe.distributed" ( à effectuer après configuration de redis).

    sudo -u www-data php /var/www/html/nextcloud/occ config:system:set memcache.distributed --value="\OC\Memcache\Redis"

    Configuration de "memcache.local" et "memcache.locking"

    sudo -u www-data php /var/www/html/nextcloud/occ config:system:set memcache.local --value="\OC\Memcache\Redis"
    sudo -u www-data php /var/www/html/nextcloud/occ config:system:set memcache.locking --value="\OC\Memcache\Redis"

    Vérification de l'ensemble

    sudo cat /var/www/html/nextcloud/config/config.php | egrep "'filelocking\.enabled|'memcache\.local |'memcache\.locking|'host|'port|'timeout|'memcache\.distributed"

    On redémarre apache

    sudo systemctl restart apache2

  4. Activation de PHP OPcache

    On modifie à nouveau le fichier "php.ini", toujours en veillant à modifier la version de PHP si besoin.

    sudo sed -i -e "s/^;* *opcache\.enable *= *.*$/opcache.enable=1/g" /etc/php/8.1/apache2/php.ini
    sudo sed -i -e "s/^;* *opcache\.memory_consumption *= *.*$/opcache.memory_consumption=128/g" /etc/php/8.1/apache2/php.ini
    sudo sed -i -e "s/^;* *opcache\.interned_strings_buffer *= *.*$/opcache.interned_strings_buffer=8/g" /etc/php/8.1/apache2/php.ini
    sudo sed -i -e "s/^;* *opcache\.max_accelerated_files *= *.*$/opcache.max_accelerated_files=10000/g" /etc/php/8.1/apache2/php.ini
    sudo sed -i -e "s/^;* *opcache\.revalidate_freq *= *.*$/opcache.revalidate_freq=1/g" /etc/php/8.1/apache2/php.ini
    sudo sed -i -e "s/^;* *opcache\.save_comments *= *.*$/opcache.save_comments=1/g" /etc/php/8.1/apache2/php.ini

    vérification des modifications

    sudo cat /etc/php/8.1/apache2/php.ini | egrep "^;* *opcache\.enable *=|^;* *opcache\.interned_strings_buffer *= |^;* *opcache\.max_accelerated_files *=|^;* *opcache\.memory_consumption *= |^;* *opcache\.save_comments *=|^;* *opcache\.revalidate_freq *="

    Et on redémarre le serveur apache =)

    sudo systemctl restart apache2

  5. Taille limite de téléchargement

    sudo sed -i -e "s/^;* *upload_max_filesize *= *.*$/upload_max_filesize=16G/g" /etc/php/8.1/apache2/php.ini
    sudo sed -i -e "s/^;* *post_max_size *= *.*$/post_max_size=16G/g" /etc/php/8.1/apache2/php.ini

    vérification

    sudo cat /etc/php/8.1/apache2/php.ini | egrep "^;* *upload_max_filesize *=|^;* *post_max_size *="

    sudo systemctl restart apache2

Et voilà

On arrive à la fin de notre installation, maintenant, il reste à faire encore quelques configurations notamment à ajouter un domaine afin d'accéder à notre cloud depuis un adresse dédiée.
Pour accéder au serveur Nextcloud depuis l’extérieur, il est fortement recommandé de le faire au travers du protocole HTTPS.
Grâce aux étapes précédentes, le serveur Nextcloud force l’utilisation du protocole HTTPS.
Cependant, le certificat SSL utilisé est un certificat auto-signé et n’est pas considéré comme fiable par les navigateurs. Ces derniers afficheront donc un avertissement

Nous avons donc maintenant un serveur Nextcloud personnel, qui nous permet de nous affranchir de Google concernant les contacts et le calendriers, mais aussi les photos.

Dans un prochain article nous verrons comment mettre en place une relation entre notre nuage Nextcloud et un téléphone portable sous android, afin de gérer notre carnet d'adresse nos calendriers et la sauveagarde dde nos phots directement sur notre nuage.


Liste des commentaires

Posté par Exemple    14 Nov 2022 à 19:49

Installation sur OS Ubuntu-server, voir l'article sur le serveur Lamp


retour aux articles