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.
Dans Ubuntu Server
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
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.
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)
Dans mon cas le uid est 33 et le gid est 33.
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.
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é
Basculer vers unix_socket authentication : Non
Supprimer les utilisateurs anonymes : Oui
Désactiver l’accès distant du compte root : Oui (sauf si vous en avez besoin via VPN ou réseau sécurisé)
Supprimer la base de test : Oui
Recharger les privilèges maintenant : Oui
Cela applique immédiatement tous les changements (suppression des utilisateurs anonymes, base de test, etc.)
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.
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.
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
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
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
Vérifiez qu’il a bien été créé
sudo -u www-data cat /mnt/nextcloud/.ocdata
Vous devriez voir s’afficher # Nextcloud data directory
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
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 :
-
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.
Il est possible qu’on vous propose d’installer des applications recommandées. Vous pouvez cliquer sur Ignorer à cette étape si vous le souhaitez.
Lorsque le processus est terminé, vous serez redirigé vers votre tableau de bord Nextcloud.
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
Le processus vous demandera
Une adresse courriel (pour être averti en cas de problème ou pour récupérer la clé)
D’accepter les conditions d’utilisation : tapez Y
Si vous souhaitez recevoir des courriels de la part de Let’s Encrypt (facultatif)
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.
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”,
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
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.
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
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
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
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
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.
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
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(); ?>
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
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,
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
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,
),
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',
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>
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+
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é.
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