22/12/2024

CloudLinux

Comment installer Nextcloud sur CentOS 8 ?

I. Présentation

Créé en 2016, Nextcloud est un fork de la solution ownCloud, qui sert à créer une plateforme d'hébergement et de partage de fichiers, comme nous le propose Microsoft avec OneDrive, Google avec Google Drive ou encore la solution Dropbox. A la différence qu'avec Nextcloud, c'est vous qui hébergez et gérez la plateforme, et c'est vous aussi qui maîtrisez les données puisqu'elles seront stockées sur votre infrastructure. Autrement dit, vos données ne vont pas traverser l'Océan Atlantique.

L'idée est simple : vous créez des utilisateurs, ils disposent chacun d'un espace privé avec un espace de stockage alloué, et ils peuvent ensuite partager des données si besoin.

Nextcloud est accessible par l'intermédiaire d'un navigateur, mais il dispose aussi d'une application mobile, ainsi que d'un client de synchronisation pour rendre vos données accessibles hors ligne. Grâce à WebDAV, il est possible de connecter un lecteur réseau sur sa machine via le protocole HTTPS.

Nextcloud ne néglige pas l'aspect sécurité : analyse antivirus, authentification à deux facteurs, gestion des droits, authentification basée sur des sources externes (Active Directory, Shibboleth, SAML 2.0...), etc.

II. Prérequis

Dans cet article, je vous propose d'installer Nextcloud sur CentOS 8 sur un socle LAMP, avec Apache et MariaDB (MySQL) donc.  Si besoin, je vous propose de suivre mon article sur l'installation d'un serveur LAMP sous CentOS.

Note : Nextcloud peut tout à fait s'installer sur un serveur Nginx

En complément, après avoir installé le serveur LAMP, il faudra s'assurer de la présence des modules PHP utiles à Nextcloud. Pour être sûr, exécutez cette commande :

yum install -y php-mysqlnd php-common php-json php-xml php-gd php-mbstring php-process php-pecl-zip php-pdo php-intl php-ldap

Nous installons notamment le module php-pdo pour la gestion d'une connexion à notre serveur MariaDB/MySQL, php-gd pour la manipulation des images, ainsi que php-ldap pour l'interconnexion à un serveur LDAP type Active Directory pour l'authentification.

III. Préparer la base de données Nextcloud

Avant d'attaquer la partie service web, nous allons créer la base de données pour Nextcloud. L'idéal pour sécuriser l'installation est d'utiliser un utilisateur dédié à l'utilisation de cette base de données.

Connectez-vous au serveur MariaDB/MySQL :

mysql -u root -p

Créez la base de données, par exemple avec le nom "nextcloud2543" :

CREATE DATABASE nextcloud2543;

Créez un utilisateur et son mot de passe. Exemple avec l'utilisateur "nextclouduser2543" et le mot de passe "IT-Connect" :

CREATE USER nextclouduser2543@localhost IDENTIFIED BY 'IT-Connect';

Donnons tous les droits à cet utilisateur sur la base de données "nextcloud2543" :

GRANT ALL PRIVILEGES ON nextcloud2543.* TO nextclouduser2543@localhost;

Il ne reste plus qu'à mettre à jour les droits et à fermer la connexion à notre serveur MariaDB :

flush privileges;
exit;

La base de données est prête, nous pouvons passer à la suite.

IV. Préparation du Virtual Host

Dans cet exemple, plutôt que d'utiliser le site par défaut d'Apache, je vais créer un site dédié à l'utilisation de Nextcloud. Celui-ci répondre à l'adresse nextcloud.it-connect.local. Il sera associé au dossier suivant : /var/www/nextcloud/html/.

Quant aux logs, ils seront stockés dans : /var/www/nextcloud/logs/

Ce nom de domaine n'étant pas enregistré, nous avons deux solutions : créer un nouvel enregistrement DNS sur le serveur DNS de l'entreprise ou alors modifier le fichier hosts de la machine pour créer un enregistrement local. Sinon, vous pouvez aussi acheter et utiliser un nom de domaine 🙂

Pour la préparation du Virtual Host, je vous invite à lire mon article à ce sujet : créer un vHost Apache

Voici le code de mon vHost "nextcloud.conf" :

<VirtualHost *:80>
  ServerName nextcloud.it-connect.local
  DocumentRoot /var/www/nextcloud/html
  ErrorLog /var/www/nextcloud/logs/error.log
  CustomLog /var/www/nextcloud/logs/access.log combined

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

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

 </Directory>
</VirtualHost>

Avec la configuration ci-dessus, tout le monde pourra se connecter à votre Nextcloud car il n'y a pas de restriction basée sur l'adresse IP ou autre, l'autorisation est spécifiée via la directive Require all granted.

En complément, la directive AllowOverride All sert à autoriser l'utilisation d'un fichier .htaccess pour configurer les options du site : la réécriture d'URL, par exemple. Nextcloud peut directement modifier le fichier .htaccess alors qu'il n'accède pas directement au fichier de votre vHost.

Pensez à créer le lien symbolique pour activer le site :

ln -s /etc/httpd/sites-available/nextcloud.conf /etc/httpd/sites-enabled/nextcloud.conf

Une fois que c'est prêt, passez à la suite...

V. Récupérer et préparer les sources

Commencez par le téléchargement des sources, directement à partir du site officiel. Attention, le lien va évoluer au fil des versions... pensez à vérifier sinon il faudra mettre à jour Nextcloud dans un deuxième temps :

cd /tmp
wget https://download.nextcloud.com/server/releases/nextcloud-17.0.1.zip

Décompressez l'archive ZIP téléchargée :

unzip nextcloud-*.zip

Nous allons copier le contenu dans un dossier dédié au site Nextcloud (associé à un vHost Apache), à savoir le dossier "/var/www/nextcloud/html/" mentionné précédemment. Vous pouvez aussi utiliser la configuration par défaut d'Apache avec "/var/www/html/".

cp -R nextcloud/* /var/www/nextcloud/html/

Maintenant, nous allons créer le dossier "data" de Nextcloud :

mkdir /var/www/nextcloud/html/data

Pour finir, deux actions sont nécessaires : attribuer les bons droits et redémarrer le service httpd correspondant à Apache.

chown -R apache:apache /var/www/nextcloud/html
systemctl restart httpd.service

 

VI. Configuration de SELinux

Si vous utilisez SELinux avec le profil "Enforced" il est nécessaire d'adapter sa configuration pour que Nextcloud fonctionne correctement. Voici les commandes référencées dans la documentation de Nextcloud (adaptez les chemins si vous n'utilisez pas le même dossier que moi) :

semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/html/data(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/html/config(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/html/apps(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/html/.htaccess'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/html/.user.ini'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/html/3rdparty/aws/aws-sdk-php/src/data/logs(/.*)?'

restorecon -R '/var/www/nextcloud/html/'

setsebool -P httpd_can_network_connect on

Compte-tenu de la configuration effectuée, Nextcloud sera accessible à l'adresse suivante : http://nextcloud.it-connect.local

VII. Installation de Nextcloud

Maintenant que tout est prêt, il faut que l'on déclenche l'installation de Nextcloud. Ouvrez un navigateur et accédez à l'adresse "http://nextcloud.it-connect.local", vous devez accéder sur une page Nextcloud.

Plusieurs infos sont à fournir :

  • Un nom d'utilisateur pour le compte administrateur, et son mot de passe
  • Cliquez sur "Stockage & base de données" pour choisir "MySQL/MariaDB" afin d'utiliser notre base de données. Indiquez ensuite le nom de votre base de données et les identifiants à utiliser (rappelez-vous ce que nous avons fait lors de la création de la base de données)

Une fois que les champs sont renseignés, démarrez le processus... Cela prend 1 à 2 minutes.

L'installation étant terminée, vous pouvez vous connecter à Nextcloud grâce au compte administrateur créé lors de l'installation. Vous arrivez sur cette interface :

Le fichier de configuration de Nextcloud (/var/www/nextcloud/html/config/config/php) contient toutes les informations de configuration, y compris pour la connexion à la base de données.

Note : si vous avez besoin de relancer le processus d'installation web, vous devez passer la directive "installed" sur "false". Vous devez aussi créer un fichier "CAN_INSTALL" dans le dossier "config" grâce à la commande "touch CAN_INSTALL". Ensuite, relancez 🙂

 

Pour finir, comme me l'a fait remarqué Kiki Novak en commentaire, ownCloud (oui, oui, ownCloud) intègre à sa documentation un script Bash pour affiner les autorisations sur son serveur. Je vous recommande de télécharger et d'exécuter ce script, disponible ici : Affiner les droits

VIII. Astuces et compléments

Pour terminer ce tutoriel, je souhaitais partager avec vous deux informations concernant Nextcloud :

1 - Astuce pour réinitialiser le mot de passe "admin" de Nextcloud

Exemple avec le compte "florian" :

sudo -u apache php /var/www/nextcloud/html/occ user:resetpassword florian

2 - Problème de connexion : page login qui boucle

Si vous n'arrivez pas à vous connecter suite à l'installation, il peut y avoir un problème de droits au niveau de la gestion des sessions PHP. Dans ce cas, adaptez les droits comme ceci :

sudo chown root:apache /var/lib/php/session/ -R

Pour la suite de la configuration, il sera pertinent de configurer le cache PHP OPcache sur le serveur pour optimiser le chargement des pages, ainsi que d'utiliser le protocole HTTPS plutôt que HTTP pour chiffrer les connexions client-serveur. Il y a également une optimisation possible sur la gestion des verrouillages de fichiers (Transactional file locking) en s'appuyant sur Redis. D'autres tutoriels Nextcloud à suivre... ?

author avatar
Florian BURNEL Co-founder of IT-Connect
Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

2 commentaires sur “Comment installer Nextcloud sur CentOS 8 ?

  • Merci pour cet article.

    Deux remarques techniques.

    1. Les permissions ne sont pas assez strictes. La documentation de Nextcloud fournit un script Bash pour les définir très précisément.

    2. Pour ce qui est du peaufinage de SELinux, il suffit de basculer le booléen httpd_unified à 1.

    Pour les détails, cf. mon article sur OwnCloud. Les remarques sont valables telles quelles pour Nextcloud.

    Joyeux Noël et un gentil bonjour de la banlieue parisienne congestionnée. :o)

    Répondre
    • Salut 🙂

      Merci pour ces informations intéressantes, je vais compléter l’article.

      Bonne soirée et bonne année !
      Florian

      Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.