Installer Nextcloud

Obligatoire avant de commencer

  • Pour pouvoir utiliser Nextcloud, vous devez impérativement avoir obtenu un nom de domaine. Il existe des alternatives gratuites. Personnellement, j'utilise Cloudflare. (Voir tuto sur configuration de Cloudflare). ➡️ Comment configurer son domaine pour Nextcloud

  • Vous devez avoir un serveur Ubuntu fonctionnel. Toutes les dépendances et fichiers d'installation se feront dans Ubuntu Server. J'utilise une machine virtuelle qui tourne sur le même ordinateur Windows, lequel partage les disques durs qui me seront nécessaires pour stocker tous mes fichiers.

  • Vous devez penser à l'endroit où vous stockerez vos fichiers : un NAS, sur votre machine native, sur votre machine virtuelle, etc.

  • Vous devez avoir une adresse IP statique sur votre serveur Ubuntu et votre natif Windows.

  • Vous devez mettre en place le script pour mettre à jour votre adresse ip publique automatiquement. ➡️ Comment mettre à jour son ip publique avec son domaine

Section 1. Préparation du NAS (sur le serveur Nextcloud)

Dans ce tutoriel, j'utiliserai un disque dur partagé sur une machine Windows (mon ordinateur natif), qui me sert principalement de NAS sur mon réseau local.

Partagez votre dossier sur votre NAS

Dans mon cas, j'ai choisi de créer le dossier Nextcloud dans mon lecteur (E:). Je partagerai ce dossier avec moi-même en ayant les autorisations maximales.

aperçu (E:)

aperçu (E:)

aperçu (E:)

Dans Ubuntu Server

aperçuUbuntu

1.1 Créer le dossier de montage

C'est à cet endroit que vous allez monter votre NAS ou votre disque dur.

sudo mkdir -p /mnt/nextcloud

1.2 Créer le fichier d'identifiants

C'est l'identifiant et le mot de passe nécessaires pour se connecter à votre lecteur réseau ou votre NAS. Par exemple, si votre nom d'utilisateur sur Windows est votre identifiant Microsoft, il s'agit donc de votre adresse courriel (exemple : [email protected]).

Si vous utilisez un autre type de disque dur, vous pouvez adapter cette partie à votre installation. Le but ici est de pouvoir se connecter au NAS sous Windows, et nous avons besoin des identifiants de connexion. Nous créons donc un fichier protégé contenant les identifiants de connexion, que nous utiliserons pour éviter d’entrer les identifiants en texte clair dans /etc/fstab.

sudo nano /root/.smbcredentials

aperçuCredentials

Contenu

[email protected]
password=TON_MOT_DE_PASSE_DE_SESSION_WINDOWS

1.3 Restreindre les permissions

Nous allons restreindre les permissions à ce fichier pour empêcher un utilisateur de voir son contenu.

sudo chmod 600 /root/.smbcredentials

1.4 Installer cifs-utils

Pour permettre le montage d'un disque dur sous Windows dans notre serveur Ubuntu, nous devons installer cifs-utils.

sudo apt update && sudo apt upgrade -y
sudo apt install cifs-utils -y

1.5 Modifier /etc/fstab

Nous devons nous assurer que le NAS soit monté automatiquement à chaque fois que le serveur Ubuntu démarre. Pour cela, nous allons modifier le fichier fstab.

sudo nano /etc/fstab

La première partie de cette ligne comprend l'adresse IP et le chemin vers le dossier à utiliser pour Nextcloud. Exemple : //192.168.2.4/E/Nextcloud — à adapter selon votre propre cas.

apreçufstab

Attention aux permissions Nextcloud a besoin que l'utilisateur www-data puisse lire et écrire dans ce répertoire. Pour cela, nous devons obtenir son identifiant (UID et GID).

id www-data

Exemple : uid=33 et gid=33 (à adapter dans la ligne ci-dessous)

aperçuuid Dans mon cas le uid est 33 et le gid est 33.

apreçufstab

N'oubliez pas de modifier les 2 parties mentionnées précédemment.

Ligne à ajouter dans /etc/fstab

//192.168.2.4/E/Nextcloud /mnt/nextcloud cifs credentials=/root/.smbcredentials,iocharset=utf8,vers=3.0,uid=33,gid=33,file_mode=0770,dir_mode=0770,nofail 0 0

1.6 Monter

sudo systemctl daemon-reexec  
sudo mount -a

1.7 Test de permissions

sudo -u www-data touch /mnt/nextcloud/testfile && echo OK || echo FAIL

Si tout s'est bien passé, vous verrez OK. Un fichier testfile apparaîtra dans le dossier Nextcloud. Vous pouvez le supprimer sans danger.

apreçuechook

apreçutestfile

Section 2. Installation de la pile LAMP

2.1 Mise à jour

On commence par s’assurer que tous les paquets sont à jour.

sudo apt update && sudo apt upgrade -y

2.2 Installation Apache, PHP, MariaDB et extensions

On installe maintenant le serveur web Apache, le serveur de base de données MariaDB, PHP, ainsi que toutes les extensions nécessaires pour Nextcloud.

sudo apt install apache2 mariadb-server libapache2-mod-php php php-mysql php-gd php-xml php-curl php-zip php-mbstring php-intl php-bcmath php-gmp php-imagick php-apcu unzip -y

Section 3. Configuration de MariaDB

3.1 Sécuriser MariaDB

On lance l’utilitaire de configuration sécurisée de MariaDB

sudo mysql_secure_installation

Vous verrez une série de questions. Voici les réponses recommandées.

Mot de passe root : entrez votre mot de passe Ubuntu Server si demandé apreçumariadb

Basculer vers unix_socket authentication : Non apreçumariadb2

Supprimer les utilisateurs anonymes : Oui apreçumariadb3

Désactiver l’accès distant du compte root : Oui (sauf si vous en avez besoin via VPN ou réseau sécurisé) apreçumariadb4

Supprimer la base de test : Oui apreçumariadb5

Recharger les privilèges maintenant : Oui Cela applique immédiatement tous les changements (suppression des utilisateurs anonymes, base de test, etc.) apreçumariadb6

apreçumariadb7

Et voila vous avez fini l'installation de MariaDB. Il ne nous reste plus qu'à configurer notre base de données.

3.2 Créer base et utilisateur Nextcloud

Lancez le shell MySQL

sudo mysql -u root -p

Vous arriverez dans le shell MySQL. apreçumariadb8

Une fois dans le shell, copiez et adaptez les lignes suivantes (remplacez MOTDEPASSE par votre mot de passe choisi.

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

Petit conseil copiez le texte dans le bloc ci-bas et collez le dans un editeur de texte comme notepad++ pour y modifier son contenu avant de le coller dans le shell MySQL. Lorsque vous arriverez sur EXIT, appuyez simplement sur enter pour sortir du shell.

apreçumariadbexit

Vous avez fait une erreur ? Pas de panique. Vous pouvez supprimer la base et l’utilisateur en entrant de nouveau dans MariaDB

sudo mysql -u root -p

Ensuite vous tapez

DROP DATABASE IF EXISTS nextcloud;
DROP USER IF EXISTS 'nextcloud'@'localhost';
FLUSH PRIVILEGES;

Section 4. Téléchargement et configuration de Nextcloud

Placez-vous dans le bon répertoire

cd /var/www

Téléchargez l’archive.

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

Assurez-vous que bzip2 est installé pour extraire l’archive.

sudo apt install bzip2

Extraire l'archive.

sudo tar -xvjf latest.tar.bz2

Donnez les bonnes permisions à Nextcloud.

sudo chown -R www-data:www-data nextcloud

Section 5. Configuration d’Apache

5.1 Créer la configuration du site

Nous allons créer un fichier de configuration spécifique pour Nextcloud dans Apache.

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

Voici le contenu à adapter à votre propre domaine (votresiteweb.com)

<VirtualHost *:80>
    ServerName votresiteweb.com
    ServerAlias www.votresiteweb.com
    DocumentRoot /var/www/nextcloud

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

    ErrorLog ${APACHE_LOG_DIR}/nextcloud_error.log
    CustomLog ${APACHE_LOG_DIR}/nextcloud_access.log combined
</VirtualHost>

Note importante :

La redirection HTTPS n’est pas incluse ici volontairement, car Certbot s’en occupera automatiquement à l’étape 7. Cela évite des problèmes d’accès si aucun certificat SSL n’a encore été généré.

5.2 Activer le site et les modules requis

Activez le fichier de configuration et les modules Apache nécessaires

sudo a2ensite nextcloud.conf  
sudo a2enmod rewrite headers env dir mime ssl  
sudo systemctl reload apache2
systemctl restart apache2

Entrez votre mot de passe et appuyez sur Enter

apreçuapache2

Section 6. Configuration initiale via navigateur

Accéder à l’interface d’installation Pour accéder à votre site Nextcloud, vous devez d’abord rediriger les ports 80 (HTTP) et 443 (HTTPS) dans votre routeur vers l’adresse IP de votre serveur Ubuntu. Comme chaque modèle de routeur est différent, nous ne couvrons pas cette étape en détail ici. Recherchez les options nommées « redirection de ports » ou « port forwarding » dans l’interface de votre routeur.

Trouver l’adresse IP du serveur.

Sur votre serveur Ubuntu, exécutez la commande suivante pour obtenir l’adresse IP

ip addr

apreçuipaddr

Puisque vous utilisez un NAS (monté via CIFS), le dossier de données de Nextcloud ne contient pas automatiquement le fichier .ocdata, qui est pourtant essentiel au bon fonctionnement de Nextcloud.

Créez-le manuellement

sudo -u www-data touch /mnt/nextcloud/.ocdata
echo "# Nextcloud data directory" | sudo -u www-data tee /mnt/nextcloud/.ocdata > /dev/null

apreçuocdata

Vérifiez qu’il a bien été créé

sudo -u www-data cat /mnt/nextcloud/.ocdata

Vous devriez voir s’afficher # Nextcloud data directory

apreçudata

Compléter l’installation dans le navigateur Ouvrez une fenêtre de navigation privée dans votre navigateur pour éviter d’éventuels problèmes liés au cache. Dans la barre d’adresse, tapez (en remplaçant par votre adresse réelle).

http://votresiteweb.com

apreçuhttp

Un avertissement de sécurité s’affichera : c’est normal puisque le site n’est pas encore sécurisé. Cliquez sur « Continuer vers le site » pour poursuivre.

Vous arriverez à la page de configuration de Nextcloud.

Remplissez les champs comme suit : apreçuinstallation

  • Nom d’utilisateur: Votre nom d’administrateur Nextcloud

  • Mot de passe: Le mot de passe associé au compte administrateur

  • Répertoire des données /mnt/nextcloud

  • Compte de basse de données: nextcloud

  • Mot de passe de base de données: Le mot de passe que vous avez défini dans MariaDB

  • Nom de la base de données: nextcloud

  • Hôtes de la base de données: localhost

Une fois les champs complétés, cliquez sur Installer.

apreçuclick

apreçuapplis1

Il est possible qu’on vous propose d’installer des applications recommandées. Vous pouvez cliquer sur Ignorer à cette étape si vous le souhaitez.

apreçuapplis2

Lorsque le processus est terminé, vous serez redirigé vers votre tableau de bord Nextcloud.

apreçuFinal

Section 7. Activation du HTTPS avec Certbot

7.1 Installer Certbot et le module Apache

Certbot est un outil qui permet de générer et d’installer un certificat SSL gratuit émis par Let’s Encrypt. Installez Certbot avec les modules nécessaires pour Apache.

sudo apt install certbot python3-certbot-apache -y

7.2 Générer le certificat SSL

Assurez-vous que votre nom de domaine est bien configuré et qu’il pointe vers l’adresse IP publique de votre serveur. Vous devez également rediriger les ports 80 et 443 vers votre serveur dans votre routeur.

Lancez ensuite la commande suivante. (Vous remplacez votresiteweb par votre adresse réelle).

sudo certbot --apache -d votresiteweb.com -d www.votresiteweb.com

apreçucertbotsites

Le processus vous demandera

Une adresse courriel (pour être averti en cas de problème ou pour récupérer la clé)

apreçucertbot1

D’accepter les conditions d’utilisation : tapez Y

apreçucertbot2

Si vous souhaitez recevoir des courriels de la part de Let’s Encrypt (facultatif)

apreçucertbot3

Si vous souhaitez rediriger automatiquement le trafic HTTP vers HTTPS (sélectionnez cette option) À ce stade, Certbot va automatiquement modifier votre configuration Apache pour inclure la redirection HTTPS.

Si tout se passe bien, vous verrez un message de confirmation indiquant que le certificat SSL a été installé avec succès.

apreçucertbot4

7.3 Ajout du site www aux domaines autorisés

Si vous essayez de visiter votre site en utilisant le préfixe www. et que vous voyez une erreur de type :

“Le domaine www.votresiteweb.com n’est pas dans la liste des domaines de confiance”,

apreçunon_approve1

vous devez l’ajouter manuellement dans le fichier de configuration Nextcloud.

Éditez le fichier config.php

sudo nano /var/www/nextcloud/config/config.php

Repérez la section trusted_domains et ajoutez votre domaine avec les www

apreçunon_approve2

Enregistrez, puis redémarrez Apache

sudo systemctl restart apache2

Une fois fait, fermez votre fenêtre privée de votre navigateur et ouvrez en une nouvelle. Cette fois-ci vous devriez atteindre votre page web sans problème.

apreçunon_approve3

Section 8. Vérification du renouvellement automatique

Certbot renouvelle automatiquement votre certificat Après avoir installé le certificat SSL avec Certbot, un timer systemd est automatiquement mis en place. Il vérifie quotidiennement si votre certificat est proche de son expiration (à moins de 30 jours) et le renouvelle si nécessaire.

Vérifier la présence du timer certbot Utilisez cette commande pour confirmer que le timer est actif

sudo systemctl list-timers | grep certbot

Vous verrez un résultat similaire à celui-ci

apreçucertbotrenewal

Explication du résultat Fri 2025-06-13 06:52:57 - Prochaine exécution planifiée du renouvellement 16h left - Temps restant avant la prochaine vérification certbot.timer - Le timer qui déclenche l’exécution certbot.service - Le service qui exécute réellement le renouvellement

Certbot ne renouvellera rien si ce n’est pas nécessaire. Il attend toujours que le certificat soit à 30 jours ou moins de son expiration.

Vérifier l’intervalle d’exécution. Vous pouvez également vérifier quand le timer est censé s’exécuter

systemctl cat certbot.timer

Vous verrez une section comme celle-ci

[Timer]
OnBootSec=5min
OnUnitActiveSec=1d
RandomizedDelaySec=12h

Cela signifie

OnBootSec=5min : le timer s’exécute 5 minutes après le démarrage du système

OnUnitActiveSec=1d : il est répété tous les jours

RandomizedDelaySec=12h : une variation aléatoire pour éviter une surcharge des serveurs de Let’s Encrypt

Vous n’avez donc rien à faire : le renouvellement est automatique tant que votre serveur est en ligne au moins une fois par jour.

Section 9. Activation du firewall sur Ubuntu

Vérifier l’état du pare-feu Par défaut, sur une installation neuve d’Ubuntu Server, le pare-feu (UFW) est généralement désactivé.

Pour vérifier son statut

sudo ufw status verbose

Activer UFW et autoriser les connexions nécessaires OpenSSH est nécessaire si vous souhaitez vous connecter à distance (ex. : via PuTTY ou une autre machine en SSH). Selon la commande suivante votre serveur sera ouvert et accessible sur internet pour une connexion en SSH.

Je ne le recommande pas.

sudo ufw allow OpenSSH

Autoriser OpenSSH seulement depuis votre réseau local (ex. : 192.168.2.0/24)

Je le recommande

sudo ufw allow from 192.168.2.0/24 to any port 22 proto tcp comment 'SSH local only'

Autoriser le web HTTP et HTTPS

sudo ufw allow 'Apache Full'

Autoriser le partage de fichiers depuis Windows (port 445) Si vous utilisez un NAS Windows (comme dans ce tutoriel), vous devez également autoriser les connexions SMB/CIFS à partir de l'adresse IP de la machine Windows.

Admettons que votre PC Windows ait l’IP suivante : 192.168.2.4

Alors vous devez exécuter :

sudo ufw allow from 192.168.2.4 to any port 445 proto tcp

Activer le pare-feu Une fois les règles en place, activez UFW :

sudo ufw enable

apreçuufw

apreçuufw2

Votre pare-feu est maintenant activé avec les ports essentiels autorisés

SSH

HTTP & HTTPS (Apache)

Partage Windows si applicable

Section 10. Ajouts des fichiers à votre serveur Nextcloud

Maintenant que votre serveur est fonctionnel, vous pouvez commencer à y déposer vos fichiers. Si vous copiez des fichiers directement dans le dossier Nextcloud depuis Windows ou un autre système, Nextcloud ne les reconnaîtra pas automatiquement dans l'interface web ou mobile.

Ces fichiers doivent être indexés pour apparaître dans votre compte Nextcloud.

Localisation du répertoire utilisateur

Dans votre NAS, les fichiers doivent être placés dans \Nextcloud\votre_nom_d_utilisateur\files

apreçufichiers

Scanner tous les fichiers avec OCC Une fois les fichiers ajoutés manuellement, exécutez la commande suivante pour forcer Nextcloud à les indexer.

sudo -u www-data php /var/www/nextcloud/occ files:scan --all

apreçuscan

Cette étape est uniquement nécessaire si vous ajoutez des fichiers manuellement via le système de fichiers.

Si vous utilisez l’interface Web ou mobile, le scan est automatique : aucune commande n’est requise.

Ajustements recommandés pour Nextcloud

Voici une compilation complète des correctifs et optimisations à apporter à une instance Nextcloud auto-hébergée.

apreçuajustement

Important !

Obtenir le version de php

Chaque extension PHP (plugin comme php-redis, php-imagick, php-apcu, etc.) doit être installée pour la version exacte de PHP qui fait rouler Nextcloud (ou l'application web).

Ex : si vous utilisez PHP 8.3, il faut :

php8.3-redis

php8.3-apcu

php8.3-imagick

etc.

Mélanger les versions (ex. PHP 8.2 et PHP 8.3) = des extensions risquent de ne pas être chargées. Problèmes, erreurs, fonctionnalités manquantes.

Bonnes pratiques

Toujours vérifier la version de PHP utilisée par Apache avant d’installer ou de migrer des extensions.

Après chaque mise à jour de PHP (EX: 8.2 → 8.3), réinstaller toutes les extensions nécessaires pour la nouvelle version.

Redémarrer le service web après ajout d’une extension :

Vérifier la version PHP utilisée par défaut

Affiche la version CLI

php -v

apreçuphp

Pour Apache, créons un fichier temporaire que nous devons supprimer par la suite pour des raisons de sécurité /var/www/html/info.php

céer le fichier

sudo nano /var/www/html/info.php

coller le texte suivant dedans

<?php phpinfo(); ?>

apreçuphp

Aller sur votresiteweb.com/info.php

Confirmer la version de php installé

supprimer le fichier

sudo rm /var/www/html/info.php

1 Augmenter la limite de mémoire PHP

Message d'erreur : La limite de mémoire de PHP est inférieure à la valeur recommandée de 512 MB.

sudo nano /etc/php/8.3/apache2/php.ini

Changer la ligne memory_limit = 128M Par memory_limit = 512M

apreçu1-memorylimit

Puis redémarrer Apache

sudo systemctl restart apache2

2 Planification de la fenêtre de maintenance

Message : Aucune heure de début de fenêtre de maintenance n'est configurée.

Solution

sudo nano /var/www/nextcloud/config/config.php

Ajouter avant la fin du tableau

 'maintenance_window_start' => 2,

apreçu1-maintenance

Puis redémarrer Apache

sudo systemctl restart apache2

3 Ajouter la région téléphonique par défaut

Message : Aucun préfixe de région par défaut n'est configuré.

Solution

sudo nano /var/www/nextcloud/config/config.php

Ajouter avant la fin du tableau

  'default_phone_region' => 'CA',

Puis redémarrer Apache

sudo systemctl restart apache2

apreçu1-region

4 Migrer les nouveaux mimetypes

Message : One or more mimetype migrations are available.

Solution

Se déplacer dans le bon répertoire

cd /var/www/nextcloud

Entrez la commande

sudo -u www-data php occ maintenance:repair --include-expensive

Puis redémarrer Apache

sudo systemctl restart apache2

5 Améliorer la gestion des verrous avec Redis

Message : La base de données est actuellement utilisée pour les verrous.

Solution. Installer la version de l'extension php -redis en fonction de la version de php installée

sudo apt install redis-server php8.3-redis -y

Ajouter dans config.php

sudo nano /var/www/nextcloud/config/config.php
  'memcache.locking' => '\\OC\\Memcache\\Redis',
  'redis' => array (
    'host' => 'localhost',
    'port' => 6379,
  ),

apreçu1-verrous

Puis redémarrer Apache

sudo systemctl restart apache2

6 Ajouter un cache mémoire local avec APCu

Message : Aucun cache mémoire n'a été configuré.

Solution Installer la version de l'extension php -apcu en fonction de la version de php installée

sudo apt install php8.3-apcu -y

Dans config.php

sudo nano /var/www/nextcloud/config/config.php

Ajouter

  'memcache.local' => '\\OC\\Memcache\\APCu',

apreçu1-memecache

Puis redémarrer Apache

sudo systemctl restart apache2

7 Activer le support SVG pour Imagick

Message : Le module PHP « imagick » n’a aucun support SVG.

Solution

sudo apt install imagemagick imagemagick-6.q16 librsvg2-bin php8.3-imagick -y

Puis redémarrer Apache

sudo systemctl restart apache2

8 Ajouter les en-têtes de sécurité HTTP

Message : L'en-tête Strict-Transport-Security n'est pas configuré.

Solution : Ajouter dans le fichier /etc/apache2/sites-available/nextcloud-le-ssl.conf

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

Le bloc suivant

<IfModule mod_headers.c>
    Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains; preload"
    Header always set X-Content-Type-Options "nosniff"
    Header always set X-Frame-Options "SAMEORIGIN"
    Header always set X-XSS-Protection "1; mode=block"
    Header always set Referrer-Policy "no-referrer"
    Header always set Permissions-Policy "geolocation=(), microphone=(), camera=()"
</IfModule>

apreçulessl

Puis redémarrer Apache

sudo systemctl restart apache2

Tester la configuration

https://securityheaders.com : Note de sécurité A ou A+

https://www.ssllabs.com/ssltest/ : Note SSL A ou A+

apreçuheaders

apreçulessl

Note SSL Labs avec Cloudflare pourquoi vous voyez un B ?

Si vous testez votre domaine avec SSL Labs et que vous avez activé le proxy Cloudflare (le petit nuage orange), vous pourriez obtenir une note B au lieu de A ou A+.

C’est normal. Ce n’est pas un problème de sécurité.

Explication : SSL Labs teste la connexion HTTPS vue de l’extérieur, donc celle présentée par Cloudflare, pas directement par votre serveur. Cloudflare autorise certains vieux protocoles (comme TLS 1.0/1.1) ou des chiffrements pour rester compatible avec de vieux navigateurs. Ça fait baisser la note.

Tant que vous avez activé le mode Full (strict) dans Cloudflare, un certificat SSL valide (ex. : Let’s Encrypt) sur votre serveur et vos en-têtes de sécurité bien configurés (HSTS, etc.), vous êtes sécurisé.

apreçuleDNS1

apreçuleDNS2

apreçuleDNS3

Vous pouvez laisser comme ça. Il vaut mieux une compatibilité large qu’un A+ artificiel qui bloque des visiteurs.

Fin du tutoriel

Vous avez maintenant un serveur Nextcloud

Auto-hébergé

Sécurisé avec HTTPS

Connecté à un NAS

Prêt à accueillir vos fichiers et à être synchronisé sur vos appareils