Installer Nextcloud sur Ubuntu 24.04 LTS
Ce guide explique en détail comment installer Nextcloud sur Ubuntu 24.04 LTS. Il s’agit d’un guide pas à pas détaillé. Lors de l’installation, nous avons veillé à optimiser les performances et la sécurité du système.
Qu’est-ce que Nextcloud?
Nextcloud est une plateforme collaborative auto-hébergée conçue pour améliorer la productivité grâce à des services intégrés tels que Fichiers, Talk, et Office. Elle offre des fonctionnalités similaires à Dropbox, Office 365 ou Google Drive lorsqu’elle est utilisée avec des suites bureautiques comme OnlyOffice.
Nextcloud peut être hébergé dans le cloud ou sur site, offrant ainsi des options de déploiement flexibles. Il permet de stocker des documents sur des serveurs privés ou des centres de données sécurisés, garantissant un contrôle et une sécurité accrus.
Étape 1 : Mise à jour et mise à niveau du système.
sudo apt update && sudo apt upgrade -y
Étape 2 : Installez Apache2 et les modules PHP.
sudo apt install apache2 libapache2-mod-php unzip \
php php-common php-bz2 bzip2 php-gd php-mysql \
php-curl php-mbstring php-imagick php-zip php-xml \
php-json php-bcmath php-intl php-gmp \
php-cli php-apcu imagemagick imagemagick-6.q16 librsvg2-bin php8.3-imagick wget -y
4. Activez les modules Apache requis
sudo a2enmod env rewrite dir mime headers setenvif ssl
5. Maintenant, redémarrez, activez et vérifiez qu’Apache fonctionne correctement.
sudo systemctl restart apache2
sudo systemctl enable apache2
Étape 3 : Installation et Configuration du serveur MariaDB
1. Installez le paquet mariadb-server
sudo apt install mariadb-server -y
2. Ensuite la configuration initiale.
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


3. Connectez-vous à MariaDB, il suffit de taper la commande ci-dessous ; vous accéderez ainsi à l’invite de commandes MySQL.
sudo mysql -u root -p
4. Créer une base de données et un utilisateur pour Nextcloud et attribuer les autorisations à l’utilisateur. Vous pouvez changer les noms et le mot de passe.
Assurez-vous de l’écrire dans un bloc de texte avant de la coller dans votre serveur pour éviter les erreurs.
- Nom de la base de données – nextcloud
- Nom d’utilisateur de la base de données – nextclouduser
- Mot de passe – MOTDEPASSE
CREATE DATABASE nextcloud;
CREATE USER ‘nextclouduser‘@’localhost’ IDENTIFIED BY ‘MOTDEPASSE‘;
GRANT ALL PRIVILEGES ON nextcloud.* TO ‘nextclouduser‘@’localhost’;
FLUSH PRIVILEGES;
EXIT;
5. Maintenant, redémarrez et activez le service MariaDB.
sudo systemctl restart mariadb
sudo systemctl enable mariadb
Étape 4 : Télécharger Nextcloud, décompresser et autoriser
1. Placez-vous dans le bon répertoire
cd /var/www/
2. Téléchargez l’archive.
sudo wget https://download.nextcloud.com/server/releases/latest.tar.bz2
3. Extraire l’archive.
sudo tar -xvjf latest.tar.bz2
4. Ajoutez votre utilisateur au groupe www-data.
Changez votreutilisateur par votre nom d’utilisateur Ubuntu.
sudo usermod -aG www-data votreutilisateur
5. Attribution des droits sur le dossier Nextcloud.
sudo chown -R www-data:www-data /var/www/nextcloud
Étape 5 : Configuration d’Apache Création du Virtual Host.
Nous allons créer un Virtual Host pour Nextcloud dans Apache. Notez bien son nom car nous le modifierons plus tard pour améliorer ses performances et la configuration SSL.
1. Création du Virtual Host.
sudo nano /etc/apache2/sites-available/nextcloud.conf
- Modifiez les champs votresiteweb en fonction de votre domaine.
- Les champs commentés d’un # servent à désactiver temporairement. Nous les activerons plus tard.
<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>
<VirtualHost *:443>
# Protocols h2 http/1.1
ServerName cloud.votresiteweb.com
ServerAlias www.votresiteweb.com
DocumentRoot /var/www/nextcloud
<Directory /var/www/nextcloud>
Require all granted
AllowOverride All
Options FollowSymLinks MultiViews
</Directory>
# <FilesMatch "\.php$">
# SetHandler "proxy:unix:/run/php/php8.3-fpm.sock|fcgi://localhost/"
#</FilesMatch>
ErrorLog ${APACHE_LOG_DIR}/nextcloud_error.log
CustomLog ${APACHE_LOG_DIR}/nextcloud_access.log combined
<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>
</VirtualHost>
2. Activation du Virtual Host
sudo a2ensite nextcloud.conf
sudo systemctl reload apache2
systemctl restart apache2

ÉTAPE 6 : Certification SSL.
1. Installation de certbot.
sudo apt install certbot python3-certbot-apache -y
2. Obtention du certificat.
Remplacez votresiteweb par votre nom de domaine.
sudo certbot --apache -d votresiteweb.com
ÉTAPE 7: Optimisation des performances.
1.Installer PHP-FPM
sudo apt install php8.3-fpm
sudo a2dismod php8.3
sudo a2dismod mpm_prefork
sudo a2enmod mpm_event proxy_fcgi setenvif
sudo a2enconf php8.3-fpm
2. Intégration FPM et HTTP/2 dans votre Virtual Host
sudo nano /etc/apache2/sites-available/nextcloud.conf
Supprimez le commentaire # aux 4 lignes suivantes
# Protocols h2 http/1.1
# <FilesMatch "\.php$">
# SetHandler "proxy:unix:/run/php/php8.3-fpm.sock|fcgi://localhost/"
#</FilesMatch>
3. Activer le module HTTP/2 d’Apache
sudo a2enmod http2
systemctl restart apache2
Pour optimiser la taille et les performances du chargement de fichiers, il est nécessaire de modifier certains paramètres du fichier php.ini (/etc/php/8.3/fpm/php.ini) listés ci-dessous. Vous pouvez adapter ces valeurs à votre environnement.
sudo nano /etc/php/8.3/fpm/php.ini
upload_max_filesize = 64M
post_max_size = 96M
memory_limit = 512M
max_execution_time = 600
max_input_vars = 3000
max_input_time = 1000
Il faut maintenant mettre à jour la configuration du pool PHP-FPM dans /etc/php/8.3/fpm/pool.d/www.conf. Vous trouverez ci-dessous quelques valeurs optimales, mais vous devez leur attribuer vos propres valeurs.
sudo nano /etc/php/8.3/fpm/pool.d/www.conf
pm.max_children = 64
pm.start_servers = 16
pm.min_spare_servers = 16
pm.max_spare_servers = 32
Redémarrez maintenant PHP-FPM pour appliquer toutes les modifications.
service php8.3-fpm restart
4. Ajustez maintenant la mémoire opcache.
sudo nano /etc/php/8.3/fpm/php.ini
Pour activer les paramètres ci-bas, supprimez le point-virgule (;) devant chaque ligne requise.
[opcache]
; Décommenter et Activer l'OPcache
opcache.enable=1
; Important pour les commandes 'occ'
opcache.enable_cli=1
; Mémoire de cache (en Mo)
opcache.memory_consumption=128
; Correction de l'avertissement Nextcloud
opcache.interned_strings_buffer=16
; Nombre maximal de fichiers (scripts) à mettre en cache
opcache.max_accelerated_files=10000
; Intervalle de vérification des fichiers (en secondes)
; 1 ou 0 est souvent recommandé sur les serveurs de développement/test.
; Sur un serveur de production stable, vous pouvez mettre 0.
opcache.revalidate_freq=1
sudo systemctl restart php8.3-fpm
5. Compilation JIT (Just-In-Time) d’Opcache
La compilation JIT (Just-In-Time) d’Opcache est une fonctionnalité importante. Elle améliore les performances de PHP en compilant le code en langage machine à l’exécution, au lieu de l’interpréter à chaque fois. Cela peut considérablement améliorer les performances des tâches gourmandes en ressources CPU. L’activer serait donc très efficace pour optimiser les performances de Nextcloud.
sudo nano /etc/php/8.3/fpm/conf.d/10-opcache.ini
zend_extension=opcache.so
opcache.enable_cli=1
opcache.jit=on
opcache.jit = 1255
opcache.jit_buffer_size = 128M
sudo service php8.3-fpm restart
6. Activer APCu dans PHP
APCu est un système de cache de données utilisateur. Il s’agit d’un cache local pour le système. Nextcloud l’utilise pour la mise en cache en mémoire. Il est nécessaire d’activer APCu via l’interface de ligne de commande (CLI), car il est désactivé par défaut, ce qui peut entraîner des problèmes avec les tâches cron de Nextcloud.
sudo apt install php8.3-apcu
6. Activer APCu via l’interface de ligne de commande.
sudo nano /etc/php/8.3/fpm/conf.d/20-apcu.ini
extension=apcu.so
apc.enable_cli=1
sudo systemctl restart php8.3-fpm
sudo systemctl restart apache2
7. Configurer le cache Redis
Dans Nextcloud, Redis est utilisé pour la mise en cache locale et distribuée, ainsi que pour le verrouillage transactionnel des fichiers. Nous utilisons APCu pour la mise en cache locale, car il est plus rapide que Redis. Nous utiliserons Redis pour le verrouillage des fichiers. Le mécanisme de verrouillage transactionnel de Nextcloud verrouille les fichiers afin d’éviter leur corruption lors du fonctionnement normal.
sudo apt install redis-server php-redis -y
8. Démarrer et activer le service Redis
sudo systemctl start redis-server
sudo systemctl enable redis-server
9. Configurez Redis pour utiliser un socket Unix plutôt que des ports
Nous devons trouver quel est le nom du socket utilisé par notre système. Voici trois exemples.
- /var/run/redis/redis-server.sock
- /run/redis/redis-server.sock
- /tmp/redis.sock
Ouvrez le fichier et cherchez
unixsocket
sudo nano /etc/redis/redis.conf
Notez le socket utilisé vous en aurez besoin plus tard.
Voici les valeurs à changer. Le nom de socket peut être différent pour vous.Supprimez le commentaire (#) devant chaque ligne requise ci -bas.
port 0
unixsocket /var/run/redis/redis-server.sock
unixsocketperm 770
10. Activer le verrouillage de session Redis dans PHP
Naviguer dans le dossier fpm et identifiez le fichier redis.ini.
cd /etc/php/8.3/fpm/conf.d/ && ls

Une fois son numéros et son nom identifié nous allons le modifier pour ajouter les valeurs suivante :
sudo nano 25-redis.ini
redis.session.locking_enabled=1
redis.session.lock_retries=-1
redis.session.lock_wait_time=10000
11. Ajouter l’utilisateur Apache au groupe Redis
sudo usermod -a -G redis www-data
12. Redémarrez Redis, PHP-FPM et Apache
sudo systemctl restart redis-server
sudo systemctl restart php8.3-fpm
sudo systemctl restart apache2
ÉTAPE 8 : Installation de Nextcloud.
Ouvrez une page de navigation privée et rendez-vous sur https://votresiteweb.com
Dans les deux premiers champs créez votre compte administrateur pour votre instance Nextcloud.
Remplissez la section base de données en fonction de ce que vous avez rempli à l’étape 3.4.

Vous pouvez ignorer et décocher toutes ces cases pour installer manuellement ces applications plus tard si vous le souhaitez.

Ajustement du fichier config.php
sudo nano /var/www/nextcloud/config/config.php
Ajoutez cette section avant la fin en prenant garde à ne pas supprimer la dernière parenthèse suivie du deux-points ); . Pour ‘default_phone_region’ => ‘XX’, Allez-y en fonction de votre région selon la norme Code ISO 3166-1 alpha-2.
- Canada
'CA' - France
'FR' - États-Unis
'US' - Royaume-Uni
'GB' - Allemagne
'DE' - Belgique
'BE' - Suisse
'CH'
'htaccess.RewriteBase' => '/',
'default_phone_region' => 'CA',
'maintenance_window_start' => 2,
'memcache.local' => '\\OC\\Memcache\\APCu',
'memcache.locking' => '\\OC\\Memcache\\Redis',
'redis' =>
array (
'host' => '/run/redis/redis-server.sock',
'port' => 0,
'dbindex' => 0,
'timeout' => 1.5,
),
sudo -u www-data php --define apc.enable_cli=1 /var/www/nextcloud/occ maintenance:update:htaccess
sudo systemctl restart php8.3-fpm
sudo -u www-data php /var/www/nextcloud/occ db:add-missing-indices
cd /var/www/nextcloud
sudo -u www-data php /var/www/nextcloud/occ maintenance:repair --include-expensive
ÉTAPE 9 : configuration du pare-feu.
Vous avez l’option d’utiliser soit Uncomplcated firewall (UFW) ou, pour une gestion plus fine, les règles iptables. Choisissez l’option qui vous convient le mieux.
9-1 Uncomplicated firewall (UFW).
1. Installation.
sudo apt install ufw
2. Application des règles et activation.
# 1. Définir les règles par défaut
sudo ufw default deny incoming
sudo ufw default allow outgoing
# 2. Autoriser les ports essentiels (HTTP, HTTPS, SSH)
# Si votre port SSH est différent, modifiez en conséquence.
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# 4. Autoriser les services locaux (Loopback, essentiel pour PHP-FPM)
# L'accès à Redis (port 0) est géré par les permissions de fichier Unix, non par UFW.
sudo ufw allow in on lo
# 5. Activer UFW et vérifier les règles
sudo ufw enable
sudo ufw status verbose
9-2 Règles iptables
1. Application des règles.
# 1. NETTOYAGE ET DÉFINITION DES POLITIQUES
# Flush toutes les règles existantes et supprimer les chaînes
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
# Définir la politique par défaut sur DROP pour l'INPUT
# Tout ce qui n'est pas explicitement autorisé sera bloqué.
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# 2. AUTORISER LE TRAFIC CRITIQUE
# Loopback (trafic interne)
iptables -A INPUT -i lo -j ACCEPT
# Trafic de connexion existante et reliée (ESSENTIEL !)
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# Autoriser ICMP (Ping) - Limité
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s --limit-burst 3 -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
# 3. AUTORISER LES PORTS DE NEXTCLOUD
# SSH (22)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# HTTP (80)
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# HTTPS (443)
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# 4. DURCISSEMENT DE SÉCURITÉ (HARDENING)
# Protéger contre les paquets mal formés et SYN floods
iptables -A INPUT -p tcp ! --syn -m conntrack --ctstate NEW -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
# 5. RÈGLE FINALE (Déjà gérée par le '-P INPUT DROP' au début, mais gardons la pour la clarté)
# iptables -A INPUT -j DROP
2. Installer l’outil de persistance des règles iptables
sudo apt install iptables-persistent netfilter-persistent -y
sudo systemctl enable netfilter-persistent
sudo systemctl start netfilter-persistent
3. Sauvegarde des règles.
sudo iptables-save > /etc/iptables/rules.v4
Nous avons finalisé notre guide complet sur l’installation de Nextcloud sur Ubuntu 24.04 LTS.