Article

Logo Nextcloud

Nextcloud Installation Sur Ubuntu-Server

Technique
85.03min to read
15-01-2024

Réaliser l'installation de Nextcloud ubuntu-server

Nextcloud sur ubuntu-server

Installation de Nextcloud sur un raspberry Pi4 avec ubuntu-server OS

Dans cet article, nous allons installer un nuage 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.1.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 installée, on commence l'installation d'ImageMagick.

sudo apt install imagemagick

Maintenant vérifions l'installation

identity -version

Réponse du server

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 installons redis-serveur

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.

C'est tout, votre serveur Redis est installé et fonctionnel.

Extensions PHP

Maintenant, on va installer les 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/lastest.tar.bz2

Extraction 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)

Configuration nextcloudconf

On active le site

sudo a2ensite nextcloud.conf

puis on active les modules et le hhtps

sudo a2enmod rewrite 
sudo a2enmod headers   
sudo a2enmode env   
sudo a2enmode dir   
sudo a2enmode mime

pour le ssl

sudo a2enmod ssl a2ensite default-ssl

et pour finir on redémarre le service Apache

sudo systemctl restart apache2

On change les propriétés du répertoire nextcloud

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

Maintenant 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

sudo mysql

nous allons commencé par créer la base de données Nextcloud, puis créer un utilisateur avec tous les droits sur cette base.

CREATE DATABASE db_nextcloud;   
CREATE USER 'nextcloud'@'localhost' IDENTIFIED BY 'VotreMotdePasse';
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud'@'localhost';   
FLUSH PRIVILEGES;

Attention Remplacer "VotreMotdePasse" par le mot de passe que vous aurez choisi.

sortons de Mariadb

exit

Finalisation de l'installation de Nextcloud

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

exemple: 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.

  1. 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
  1. Edition du htaccess

On vas modifier un peu le fichier htaccess afin de forcer l'acces en hhtps.

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

aller à la fin du fichier juste avant la balise et avant l'instruction 'RewriteBase /'

  RewriteCond %{HTTPS} !=on   
  RewriteRule (.*) https://%{HTTP_HOST}%{REQUET_URI} [R=301,L]
  1. 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 /var/wwww/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 des définitives 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 --al-users
  1. Cron taches de fond

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 nouvaux fichiers, exécution chargement de page, etc.

crontab -u www-data -e

Ajouter cette ligne à la fin du fichier. Il 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 ligne suivantes au début du fichier au desus de [mysql]

[mysqld]   
innodb_buffer_pool_size=512M   
innodb_io_capacity=4000

enregistre et 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-COMMITED   
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"
  1. 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
  1. 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 ( à affectuer après configuration de redis)

sudo -u www-data php /var/www/htmlnextcloud/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/nextcloud/config/config.php | egrep "'filelocking\.enabled|'memcache\.local |'memcache\.locking|'host|'port|'timeout|'memcache\.distributed"

        On redémarre apache

sudo systemctl restart apache2
  1. 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
  1. 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 *="

        et on redémarre une dernière fois =)

sudo systemctl restart apache2

Et voilà

On arrive à la fin de notre installation, maintenant, il reste à faire encore quelques configurations notamment ajoutées 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 sauvegarde de nos photos directement sur notre nuage.

liste des articles