Installer NextCloud sur Debian

Pré-requis

Pour une installation manuelle comme celle qui sera décrite dans cet article, il faut dans un premier temps s’assurer que tous les modules PHP requis sont présents sur le serveur.

Si ce n’est pas déjà fait, installez la stack LAMP sur votre serveur (comme décrit dans l’article Installer WordPress avec LAMP sur un serveur Debian ).

Requis :

  • PHP (7.3 or 7.4)
  • PHP module ctype
  • PHP module curl
  • PHP module dom
  • PHP module GD
  • PHP module iconv
  • PHP module JSON
  • PHP module libxml (Linux package libxml2 doit être >=2.7.0)
  • PHP module mbstring
  • PHP module openssl
  • PHP module posix
  • PHP module session
  • PHP module SimpleXML
  • PHP module XMLReader
  • PHP module XMLWriter
  • PHP module zip
  • PHP module zlib
  • Si votre BDD est sqlite : PHP module pdo_sqlite (>= 3, non recommandé pour des raisons de performances)
  • Si votre BDD est MySQL/MariaDB : PHP module pdo_mysql (MySQL/MariaDB)
  • Si votre BDD est PostgreSQL : PHP module pdo_pgsql (PostgreSQL)

Recommandés:

  • PHP module fileinfo (améliore les performances d’analyse de fichiers)
  • PHP module bz2 (requis pour extraire les applications)
  • PHP module intl (améliore les performances en traduction et corrige le tri des caractères non-ASCII)

Pour améliorer les performances, vous pouvez installer un module de cache mémoire :

  • PHP module apcu (>= 4.0.6) – j’ai personnellement opté pour celui-ci
  • PHP module memcached
  • PHP module redis (>= 2.2.6, requis pour Transactional File Locking)

Pour la prévisualisation (optionnel) :

  • PHP module imagick – j’ai installé celui-ci pour avoir au minimum la prévisualisation des images
  • avconv or ffmpeg
  • OpenOffice or LibreOffice

Commande permettant de vérifier la présence d’un module :
php -m | grep -i <nom_module>

Commande permettant d’installer un module manquant :
sudo apt-get install php[version PHP]-[nom module]
Exemple : sudo apt-get install php7.3-bz2

Télécharger NextCloud

Récupérez la dernière version de NextCloud Server sur cette adresse : https://nextcloud.com/install/

Vous pouvez aussi la télécharger directement sur votre serveur en ligne de commande, exemple :
sudo wget -c https://download.nextcloud.com/server/releases/nextcloud-21.0.1.zip

Une fois l’archive sur votre serveur, décompressez-la puis copiez le dossier nextcloud dans le répertoire du serveur Apache avant de modifier les droits :
sudo unzip nextcloud-21.0.1.zip
sudo cp -r nextcloud /var/www/
sudo chown -R www-data:www-data /var/www/nextcloud/

Création de la base de données

Connectez-vous avec l’utilisateur root à votre base de données en ligne de commande (le mot de passe admin vous sera demandé) :
sudo mysql -u root -p

Nous allons maintenant créer via l’invite de commande un nouvel utilisateur et une nouvelle base dédiés à NextCloud; entrez les lignes suivantes en modifiant les valeurs de « username » et « password » par celle que vous souhaitez :
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
CREATE DATABASE IF NOT EXISTS nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

GRANT ALL PRIVILEGES ON nextcloud.* TO 'username'@'localhost';
FLUSH PRIVILEGES;
quit;

CONFIGURATION APACHE

Pour le bon fonctionnement de NextCloud, le module suivant doit être activé : rewrite

Vous pouvez vérifier la liste des modules activés à l’aide de cette commande :
apachectl -M

Pour activer le module rewrite :
a2enmod rewrite

Les modules mod_headers, mod_env, mod_dir et mod_mime ne sont pas obligatoires mais recommandés. Pour les activer le cas échéant :
a2enmod headers
a2enmod env
a2enmod dir
a2enmod mime

Redémarrer ensuite Apache pour prendre en compte les modifications : service apache2 restart

MISE EN PLACE DU VIRTUALHOST APACHE

La configuration suivante va permettre d’accéder à votre NextCloud via un nom de domaine (ou sous-domaine). Vous pouvez modifier cette configuration et utiliser un Alias si l’accès à votre NextCloud se fait uniquement via votre réseau local.

Dans le répertoire /etc/apache2/sites-available, ajoutez un nouveau fichier de configuration (ex: nextcloud.mondomaine.url.conf) pour votre sous-domaine ou domaine.

<VirtualHost *:80>
  DocumentRoot /var/www/nextcloud/
  ServerName  nextcloud.mondomaine.url

  ErrorLog ${APACHE_LOG_DIR}/nextcloud/error.log
  CustomLog ${APACHE_LOG_DIR}/nextcloud/access.log combined

  <Directory /var/www/nextcloud/>
    Require all granted
    AllowOverride All
    Options FollowSymLinks MultiViews

    <IfModule mod_dav.c>
      Dav off
    </IfModule>
  </Directory>
</VirtualHost>

.

Exécutez ensuite les commandes suivantes afin de prendre en compte le nouveau VirtualHost:
sudo a2ensite nextcloud.mondomaine.url.conf
sudo systemctl reload apache2

Pour votre sous-domaine, il vous sera sûrement nécessaire d’ajouter une entrée CNAME à la zone DNS de votre nom de domaine. Vous pouvez vous référer à l’article Mise en place d’un reverse proxy avec Apache pour plus de détails sur cette partie.

Vous pouvez maintenant tester l’accès en http à votre sous-domaine (nextcloud.mondomaine.url).

ASSISTANT D’INSTALLATION NEXTCLOUD

Si tout s’est bien déroulé, vous devriez atterrir sur l’assistant d’installation NextCloud :

Une fois renseignés la configuration de la base de données, votre compte administrateur et le répertoire de stockage, vous pourrez commencer à profiter de votre nouveau cloud perso !

Gestion des tâches de fond

Pour que votre instance Nextcloud fonctionne au mieux, un certain nombre de tâches automatisées ont besoin d’être lancées par le système à intervalles réguliers. Ces jobs sont les « cron jobs » et il ne faut pas négliger leur configuration.

Une fois connecté en tant qu’admin, rendez-vous dans le menu Paramètres, puis dans la catégorie Administration > Paramètres de base .

Sur un système Linux comme Debian, la solution la plus optimisée est d’utiliser le service cron du système (option « Cron »), mais pour cela un peu de configuration sera nécessaire.

Exécutez la commande suivante afin d’ajouter de nouvelles lignes à la crontab du système :
sudo crontab -u www-data -e

Le contenu de la crontab s’affichera dans l’éditeur de texte configuré sur votre système (exemple ci-dessus).
Insérez la ligne suivante à la suite des autres, puis enregistrez :
*/5 * * * * php -f /var/www/nextcloud/cron.php

Remarque : si comme moi vous avez opté pour le cache apcu, il vous faudra ajouter un paramètre supplémentaire à votre commande :
*/5 * * * * php –define apc.enable_cli=1 -f /var/www/nextcloud/cron.php

Cette ligne va permettre de lancer la commande toutes les 5 min. Vous pouvez vérifier que la modification a bien été prise en compte avec : crontab -u www-data -l

Pour aller plus loin…

Augmenter la taille d’upload maximale

S’agissant d’un cloud, vous serez potentiellement amené à y uploader des fichiers de taille conséquente.

Editez dans un premier temps la configuration PHP sur votre système :
sudo vi /etc/php/7.X/apache2/php.ini

Modifiez ensuite les lignes suivantes :

upload_max_filesize = 2048M
post_max_size = 2058M

Redémarrez ensuite le serveur Apache :
sudo service apache2 restart

Message « La limite de mémoire PHP est inférieure à la valeur recommandée de 512 Mo. »

Modifier la ligne suivante du fichier /etc/php/7.X/apache2/php.ini :
memory_limit = 512M

APCu installé mais aucun cache détecté par NextCloud

Ajouter la ligne suivante au fichier /var/www/[Repertoire Nextcloud]/config/config.php :
'memcache.local' => '\OC\Memcache\APCu',

Migrer rapidement un grand volume de données

Plutôt que de passer par la synchro classique (assez lente dans si on doit migrer de grands volumes), il est possible de copier les fichiers sur le serveur « à la main » (en branchant un disque ou via samba), puis forcer NextCloud à faire un scan des fichiers.

Une fois le dossier copié, enchaînez les commandes suivantes :

  • sudo chown -R www-data:www-data [nouveauRepertoire]
  • chmod -R 755 [nouveauRepertoire]
  • cd /var/www/nextcloud
  • sudo -u www-data php console.php files:scan --all
Partager sur :