Nextcloud est un fork du célèbre ownCloud, solution vous permettant de créer votre propre cloud auto-hébergé et ainsi de stocker et synchroniser vos fichiers, vos contacts, votre agenda et vos contenus multimédias directement sur votre serveur. Vous pourrez alors accéder à toutes ces informations directement depuis votre navigateur web ou votre mobile via une application dédiée.
Des services comme Dropbox, Microsoft OneDrive ou l’iCloud d’Apple offrent une alternative attractive et pratique au stockage local sur votre propre appareil : ordinateur, tablette ou smartphone, grâce à une accessibilité permanente et globale via Internet. Cependant, le volume de stockage gratuit n'est pas illimité et avec des données sensibles, la question de la sécurité des fichiers stockés se pose alors. Si vous désirez profiter des avantages du Cloud tout en conservant un contrôle total de l’ensemble de vos données, il est alors nécessaire d’héberger et de gérer votre propre service de stockage en ligne.
Fin avril 2016, Frank Karlitschek, cofondateur de ownCloud Inc, a annoncé son départ de la société, en mettant en cause, des dissensions internes, liées en partie à la stratégie de la société, mais également à la double licence du projet, qui ne favorise guère la participation de la communauté. Frank Karlitschek et Niels Mache, patron de Struktur AG (connu pour l’offre collaborative Spreed.ME), rebootent aujourd’hui cette initiative sous la forme d’une nouvelle société et d’un nouveau projet : Nextcloud. Alors que les utilisateurs de ownCloud peuvent utiliser certaines fonctionnalités exclusivement dans l’édition Entreprise sous licence commerciale, tous les composants Nextcloud sont eux disponibles gratuitement sous la licence libre AGPLv3. Nextcloud offre une assistance professionnelle payante en cas de besoin.
Les principales fonctionnalités de Nextcloud :- Synchronisation de fichiers entre différents ordinateurs (clients dédiés multi-plateformes)
- Stockage sécurisé (chiffrage des fichiers) et ajout de services externes (Amazon, Google, Dropbox, NFS, FTP, SFTP, WebDAV...)
- Authentification LDAP/Active Directory, Kerberos et Shibboleth/SAML 2.0
- Partage de fichiers entre utilisateurs ou publiquement
- Éditeur de documents en ligne avec la suite Collabora Online (basée sur OpenOffice)
- Visionneuse de documents en ligne (PDF, Open document...)
- Gestion de différents workflows
- Calendrier (CalDAV) et gestionnaire de contacts (CardDAV)
- Conférences audio et vidéo sécurisées (WebRTC) avec possibilité de partage d'écran
- Galerie d'images
- ... et de nombreuses fonctionnalités supplémentaires grâce aux applications Nextcloud.
Nextcloud peut être installé sur n'importe quel serveur supportant une version récente de PHP et supportant MariaDB (base de données par défaut), MySQL ou PostgreSQL.
1 - Prérequis
- Vous devez disposer d'Ubuntu 22.04. Si vous disposez d'une version antérieure, vous pouvez mettre à jour votre système en suivant cette procédure.
- Vos dépôts APT doivent être à jour. Dans le doute, tapez la commande suivante :
sudo apt-get update
- Votre utilisateur doit avoir accès à sudo.
2 - Nginx
Notre choix se portera sur le serveur HTTP Nginx pour une question de performances. Nginx est reconnu pour ses hautes performances, sa stabilité, son ensemble de fonctionnalités, sa configuration simple ainsi que sa faible consommation en ressources.
2.1 - Installation
Installez le paquet nginx :sudo apt-get -y install nginx
2.2 - Configuration
Modifiez les directives suivantes du fichier de configuration Nginx /etc/nginx/nginx.conf :user www-data;
worker_processes 8;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 768;
# multi_accept on;
}
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
...
-
worker_processes : pour profiter pleinement de la puissance de votre serveur, il est recommandé de mettre autant de worker_processes que de cœurs disponibles sur votre serveur. Pour connaître le nombre de cœurs sur votre serveur, il suffit de lancer la commande :
grep processor /proc/cpuinfo | wc -l 8
- server_tokens : pour des raisons de sécurité, il est recommandé de désactiver l'envoi d'informations telles que le numéro de version de votre Nginx. Pour cela, décommentez cette directive dans le bloc http.
3 - Installation et téléchargement de Nextcloud
-
Téléchargez la dernière version de Nextcloud :
cd /var/www sudo wget https://download.nextcloud.com/server/releases/latest.tar.bz2
-
Téléchargez le SHA256 :
sudo wget https://download.nextcloud.com/server/releases/latest.tar.bz2.sha256
-
Vérifiez l'intégrité de l'archive téléchargée :
La commande doit retourner sur la sortie standard :sha256sum -c latest.tar.bz2.sha256 < latest.tar.bz2
latest.tar.bz2: OK
-
Vérifiez la signature PGP et la provenance de l'archive téléchargée :
La dernière commande doit retourner sur la sortie standard :sudo wget https://download.nextcloud.com/server/releases/latest.tar.bz2.asc sudo wget https://nextcloud.com/nextcloud.asc gpg --import nextcloud.asc gpg --verify latest.tar.bz2.asc latest.tar.bz2
gpg: Signature made Mon May 2 14:36:13 2022 UTC gpg: using RSA key ************ gpg: Good signature from "Nextcloud Security <[email protected]>" [unknown] gpg: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. Primary key fingerprint: **** **** **** **** **** **** **** **** **** ****
-
Décompressez l'archive Nextcloud :
sudo tar -xvf latest.tar.bz2
-
Supprimez les fichiers et signatures téléchargés :
sudo rm latest.tar.bz2* nextcloud.asc
4 - Droits Unix
Lors du déploiement basique d’un serveur HTTP, l’utilisateur sous lequel fonctionne ce serveur (Apache, Nginx...) est la plupart du temps www-data, nobody ou apache. Cela signifie que si plusieurs sites existent sous la même instance de Nginx, tous utilisent le même utilisateur. Or si l’un des sites s’avère corrompu par un utilisateur malveillant alors l’assaillant peut profiter pleinement de tous les droits de l’utilisateur sous lequel tourne le serveur web. Tous les sites s'avèrent donc vulnérables.
Pour des raisons évidentes de sécurité, il est donc recommandé de cloisonner ces utilisateurs et d'avoir un utilisateur dédié à la gestion du dossier nextcloud. Cet utilisateur aura des droits aussi restreints que possible à ce répertoire.
Par défaut, les fichiers de Nextcloud possèdent les permissions suivantes :- répertoires : 755 (permission de lecture, d'écriture et d'exécution pour le propriétaire et permission de lecture et d'exécution pour le groupe et les autres)
- fichiers : 644 (permission de lecture et d'écriture pour le propriétaire et permission de lecture uniquement pour le groupe et les autres).
Nous allons donc modifier le propriétaire du répertoire /var/www/nextcloud et l'attribuer à un nouvel utilisateur dédié : nextcloud.
Par ailleurs, Nginx est lancé sous l'utilisateur www-data et doit avoir accès en lecture au répertoire /var/www/nextcloud pour lire les ressources statiques (HTML, CSS, JS, etc.). Nous allons donc attribuer le répertoire /var/www/nextcloud au groupe www-data. Enfin nous retirerons toutes les permissions de ce répertoire aux autres utilisateurs.
-
Créez un utilisateur nextcloud :
sudo adduser nextcloud
-
Modifiez le propriétaire et le groupe du répertoire /var/www/nextcloud :
sudo chown -R nextcloud:www-data /var/www/nextcloud
-
Retirez toutes les permissions aux autres utilisateurs :
sudo chmod -R o-rwx /var/www/nextcloud
5 - Les modules PHP
Nextcloud nécessite certains modules PHP pour fonctionner :- Modules obligatoires : PHP ctype, PHP dom, PHP GD, PHP iconv, PHP JSON, PHP libxml, PHP mb multibyte, PHP posix, PHP SimpleXML, PHP XMLWriter, PHP zip, PHP zlib, PHP bcmath, PHP gmp, PHP pdomysql (connecteur pour MySQL/MariaDB).
-
Modules hautement recommandés :
- PHP curl : nécessaire pour certaines fonctionnalités de Nextcloud comme l'authentification HTTP
- PHP fileinfo : améliore les performances d'analyse des fichiers
- PHP bz2 : nécessaire pour l'installation et l'extraction des applications Nextcloud
- PHP intl : améliore les performances sur l'internationalisation et les opérations sur caractères non ASCII
- PHP openssl : nécessaire pour accéder aux ressources HTTPS.
sudo apt-get -y install php-cli php-json php-curl php-imap php-gd php-mysql php-xml php-zip php-intl php-imagick php-mbstring php-bcmath php-gmp imagemagick
6 - PHP-FPM
Le module PHP-FPM permet la communication entre le serveur Nginx et PHP, basée sur le protocole FastCGI. Ce module, écoutant sur le port 9000 par défaut ou sur un socket UNIX, permet notamment l'exécution de scripts PHP dans un processus indépendant de Nginx avec des UID et GID différents. Il sera alors possible, dans le cas de la gestion de plusieurs sites web sur un même serveur, de créer et configurer un groupe de processus PHP (appelé aussi pool) par application. Un pool définit notamment le UID/GID des processus PHP et le nombre de processus PHP à dédier à votre site, en fonction des ressources de votre serveur. De ce fait, il est possible d'atteindre un niveau d'isolation des applications PHP intéressant.
6.1 - Installation
Installez le paquet php-fpm :sudo apt-get install -y php-fpm
6.2 - Création du pool nextcloud
Créez le pool dédié à Nextcloud en créant le fichier de configuration suivant : /etc/php/8.1/fpm/pool.d/nextcloud.conf[nextcloud]
listen = /var/run/nextcloud.sock
listen.owner = nextcloud
listen.group = www-data
user = nextcloud
group = www-data
pm = ondemand
pm.max_children = 30
pm.process_idle_timeout = 60s
pm.max_requests = 500
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
Certaines valeurs sont très arbitraires et seront, en fonction des ressources disponibles sur votre serveur et celles que vous souhaiterez dédier à votre Nextcloud, différentes d'une configuration à l'autre. Cependant ces différentes directives respectent certaines conditions :
- [nextcloud] : nom du pool. Il est possible de créer plusieurs pools par fichier. Chaque pool doit commencer par cette directive.
-
listen : interface d'écoute des requêtes. Les syntaxes acceptées sont ADRESSE_IP:PORT (exemple :
listen = 127.0.0.1:9000
) et /path/to/unix/socket (exemple :listen = /var/run/nextcloud.sock
). Le socket est représenté comme un simple fichier sur le système et permet d’interfacer des processus entre eux sans passer par la couche réseau du système, ce qui est inutile lorsque Nginx et PHP-FPM sont hébergés sur le même serveur. Je vous conseille donc d'utiliser un socket. - listen.owner & listen.group : affecte l'utilisateur et le groupe au socket Unix si utilisé. Ces deux paramètres peuvent être associés au paramètre listen.mode qui définit les permissions du socket (660 par défaut). Il est important que Nginx ait les droits de lecture sur le socket Unix.
- user & group : utilisateur et groupe sous lesquels le pool de processus sera exécuté. Cet utilisateur et ce groupe doivent bien sûr exister sur votre système et surtout accéder aux fichiers PHP de votre Nextcloud. Cela veut dire aussi que chaque fichier et répertoire créé dans Nextcloud appartiendra à cet utilisateur et à ce groupe. Comme nous l'avons vu dans le chapitre dédié aux droits Unix, chaque fichier devra appartenir à l'utilisateur nextcloud et au groupe www-data.
-
pm : directive acceptant les 3 valeurs suivantes : static, dynamic et ondemand.
- static : les processus, au nombre de pm.max_children, sont continuellement actifs (quelle que soit la charge et l'affluence de votre Nextcloud) et sont susceptibles de consommer de la mémoire inutilement. En revanche, cette directive assure le meilleur temps de réponse pour votre Nextcloud et reste recommandée si Nextcloud est l'unique application de votre serveur.
- dynamic : le nombre de processus fils pourra varier suivant la charge. Cependant, nous gardons le contrôle sur le nombre de processus fils à créer au démarrage du serveur, le nombre de processus maximum, en attente de requêtes, etc. Les directives suivantes deviennent obligatoires : pm.max_children, pm.start_servers, pm.min_spare_servers, pm.max_spare_servers. Cette directive est recommandée si vous avez plusieurs pools avec un fort trafic (plus de 10 000 requêtes/jour).
- ondemand : aucun processus fils n'est lancé au démarrage du serveur, les processus s'activent à la demande et auront une durée de vie définie par la directive pm.process_idle_timeout. L'intérêt de cette directive est de libérer de la mémoire en cas de faible charge mais celle-ci peut légèrement augmenter le temps de réponse de votre Nextcloud. Cette directive est recommandée si vous avez plusieurs pools avec potentiellement une faible affluence.
Sachant que l'utilisation de Nextcloud est personnelle et souvent limitée à quelques utilisateurs, nous choisirons et détaillerons ici la directive ondemand.
-
pm.max_children : nombre maximum de processus fils. La valeur du paramètre pm.max_children varie d'un système à l'autre. Voici la procédure à réaliser pour déterminer la valeur de ce paramètre :
-
Arrêtez le service php-fpm :
sudo systemctl stop php8.1-fpm.service
-
Affichez la mémoire disponible (colonne available) sur votre système :
free -m total used free shared buff/cache available Mem: 3913 58 2532 39 1322 3539 Swap: 1048 0 1048
Sur cet exemple, le système dispose de 3539Mo de RAM disponible. La quantité de RAM que vous souhaitez allouer au maximum à Nextcloud dépend de vous et des autres services actifs que vous disposez sur ce même système. Dans notre exemple, nous partirons du principe que nous souhaitons allouer au maximum 1024Mo de RAM à Nextcloud.
-
Affichez la mémoire utilisée par un processus fils php-fpm :
sudo systemctl start php8.1-fpm.service && ps --no-headers -o "rss,cmd" -C php-fpm8.1 | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"M") }' 18M
-
Déterminez le nombre de pm.max_children en appliquant la méthode de calcul suivante :
pm.max_children = mémoire allouée (en Mo) / mémoire utilisée par un processus fils
Dans notre exemple : 1024 / 18 = 56 -
Éditez à nouveau le fichier /etc/php/8.1/fpm/pool.d/nextcloud.conf et ajustez la valeur du paramètre pm.max_children :
[nextcloud] listen = /var/run/nextcloud.sock listen.owner = nextcloud listen.group = www-data user = nextcloud group = www-data pm = ondemand pm.max_children = 56 pm.process_idle_timeout = 60s pm.max_requests = 500 env[HOSTNAME] = $HOSTNAME env[PATH] = /usr/local/bin:/usr/bin:/bin env[TMP] = /tmp env[TMPDIR] = /tmp env[TEMP] = /tmp
-
Arrêtez le service php-fpm :
- pm.process_idle_timeout : durée en secondes avant qu'un processus fils inactif soit détruit.
- pm.max_requests : nombre de requêtes que chaque processus fils devra exécuter avant d'être détruit. Cette valeur ne doit pas être trop élevée afin de contourner d'éventuelles fuites mémoires, ni trop faible pour ne pas solliciter régulièrement le CPU à chaque création de processus fils. 500 reste une valeur recommandée.
- env[*] : variables d'environnement nécessaires à PHP-FPM.
sudo systemctl start php8.1-fpm.service
6.3 - Configuration du service php-fpm
Enfin, il est nécessaire de spécifier à PHP-FPM les permissions de chaque fichier ou répertoire nouvellement créé dans votre Nextcloud et ainsi respecter les permissions que nous avions spécifiées dans le chapitre des droits Unix. Pour cela :-
Tapez la commande suivante :
Il se peut que l'éditeur de texte par défaut de votre système ne soit pas celui que vous avez l'habitude d'utiliser. Si c'est le cas, tapez la commande suivante et choisissez l'éditeur par défaut de votre système :sudo systemctl edit php8.1-fpm.service
sudo update-alternatives --config editor
-
Ajoutez les lignes suivantes :
[Service] UMask=0027
-
Réactivez le service php8.1-fpm :
sudo systemctl reenable php8.1-fpm.service
7 - Création de la base de données sous MariaDB
Nous allons maintenant créer la base de données et configurer l'accès externe de votre Nextcloud via un nom de domaine sécurisé par le protocole SSL/TLS et un certificat Let's Encrypt. Nous verrons ensuite comment améliorer les performances et la sécurité votre Nextcloud. Enfin, nous détaillerons la procédure pour vous permettre d'éditer vos fichiers directement en ligne avec Collabora Online.
Ubuntu Server 22.04 LTS
Edouard WATTECAMPS
Bonjour,
Merci pour cette documentation sur Nextcloud. Elle est claire, précise et surtout opérationnelle !!!!
Cordialement,
Super taf, je ne regrette pas l’inscription! un NC aux petits oignons avec une conf bien plus optimisée que ma précédente plus « classique ».
Pour info j’ai opté pour un CT Ubuntu sous Proxmox qui accroit d’avantage la fluidité même si je compromets un peu la sécurité.
Perfect tuto qui m’a permis de passer de la location d’un vps ovh au self hosted, avec une config propre, fluide et beaucoup plus rapide (plus de ram, meilleur processeur).
Merci
Bonjour !
Un grand merci pour ce travail ! J’ai installé Nextcloud sur un VPS sans aucun soucis et en apprenant beaucoup 🙂
Juste une petite coquille : au point 13 – Améliorer la sécurité de votre Nextcloud dans la modif du fichier /var/www/nextcloud/config/config.php, il manque une virgule après « ‘log_rotate_size’ => ‘104857600’ » ce qui entraine une Internal Server Error.
Cordialement.
Merci pour votre commentaire, c’est corrigé 🙂
Excellent travail!!
Super tuto d’installation de NC. Ca fonctionne super bien du premier coup mais sous Debian 10 😉
Le seul soucis c’est que NC ne voir que mon premier disk sda mais pas le second sdb. C’est un serveur dédié avec 2 x 1TB.
Merci pur ce tuto super clair et bien détaillé. Je l’ai suivi pour installer Nextcloud sur mon serveur perso sous debian buster et tout s’est bien passé. Je ne regrette pas l’inscription non plus.
Bonjour,
Après l’installation mon Nextcloud fonctionnait correctement alors que j’vais des soucis avec Piwigo. J’ai réglé le problème Piwigo qui provenait d’une mauvaise version de php-fpm (Piwigo n’accepte pas encore la version 8.0). Tout est réglé maintenant mais je n’arrive plus à me connecter à Nextcloud (502 Bad gateway). Encore un problème de socket, nextcloud.sock n’existe pas dans /var/run.
A quel moment est créé ce socket? Mes connaissances en PHP étant assez limitées, une aide serait la bienvenue.
Merci par avance.
Jean Claude
Bonjour,
Suite à divers problèmes, j’ai décidé de changer l’OS de mon serveur. J’ai donc installé Ubuntu server 20.04 LTS qui fonctionne parfaitement. J’ai installé Nextcloud en suivant votre tuto, par ailleurs très bien fait. Aucun problème si ce n’est au moment de l’installation du cache. En effectuant les modifications que vous indiquez dans /var/www/nextcloud/config/config.php, j’obtenais à chaque fois un message d’erreur lors du rafraîchissement du GUI Nextcloud (Internal server error), erreur qui disparaissait quand j’enlevais les modifs. J’ai finalement réussi à corriger l’incident en doublant les caractères \, donc en codant par exemple \\OC\\Memcache\\Redis, et ce pour toutes les lignes . Et je n’ai plus eu d’erreur serveur et dans les avertissements, la ligne signalant l’absence de mémoire cache a bien disparu.
Je vous livre l’info pour éventuellement corriger la partie du tuto concernée, si vous le jugez utile.
Cordialement
Jean Claude Gourdon
Merci Jean-Claude de nous avoir remonté ce problème ! L’article a été corrigé.
Bonsoir,
je viens de procéder a la création en suivant de A a Z votre procédure, cependant lors de l’utilisation de Collabora online, je me retrouve avec le message suivant :
impossible d’établir une connexion au serveur Collabora Online. Cette erreur peut-être due à une erreur de configuration de votre serveur web
Avez vous une idée ?
Bien à vous
Bonjour Richard,
Avez-vous remplacé la ligne 87 par celle indiquée dans la procédure et redémarré votre nginx ?
W.
Bonjour,
concernant la vérification du filesystem à chaque requête, il ne faudra pas mettre la commande « filesystem_check_changes » à 1 plutot que à 0 ?
Cordialement
Bonjour,
Vous avez raison ! Merci pour votre commentaire, l’article a été corrigé.
Bonjour,
j’ai un souci/question concernant le UMask, j’ai l’impression que le paramètre n’est pas prit en compte.
Avec un UMask 0027, les droits devraient être en 640 (rw-r—–) – 750 (rwxr-x—) mais quand Nextcloud crée des dossiers et/ou fichiers, les droits sont en 644 (rw-r–r–) – 755 (rwxr-xr-x) (0022). Idéalement, j’aimerai un UMask en 0007.
Cordialement