1. Introduction
Nextcloud permet de créer un cloud privé pour stocker, synchroniser et partager des fichiers. De nombreuses entreprises, administrations et établissements scolaires utilisent cette solution pour garder la maîtrise des données.
Dans un BTS CIEL ou SIO, Nextcloud permet de travailler plusieurs compétences importantes :
- administration Linux ;
- configuration d’Apache2 ;
- gestion des bases de données ;
- sécurisation HTTPS ;
- gestion des droits ;
- configuration réseau et pare-feu.
Dans cette fiche, tu vas installer un serveur Nextcloud complet sur Debian 13 ou Ubuntu 26.04 avec :
- Apache2 ;
- PHP ;
- MariaDB ;
- HTTPS avec Let’s Encrypt ;
- pare-feu UFW.
L’objectif consiste à obtenir une instance sécurisée et exploitable en production.
2. Sommaire
- Introduction
- Sommaire
- Prérequis réseau et système
- Installation des paquets nécessaires
- Configuration de MariaDB
- Téléchargement et installation de Nextcloud
- Configuration Apache2
- Activation du HTTPS avec Let’s Encrypt
- Configuration du pare-feu UFW
- Finalisation de l’installation web
- Gestion des fichiers importants
- Commandes utiles et dépannage
- Logs et analyse des erreurs
- Bonnes pratiques de sécurité
- Pour aller plus loin
- Liens utiles et documentation officielle
- Propositions de TP
3. Prérequis réseau et système
Avant de commencer, prépare :
- un serveur Debian 13 ou Ubuntu Server 26.04 ;
- un accès sudo ;
- un nom de domaine ;
- une adresse IP fixe ;
- les ports 80 et 443 accessibles depuis Internet.
Exemple :
cloud.example.local
Vérifie la configuration réseau :
ip a
ip route
ping 8.8.8.8
Explication
ip aaffiche les interfaces réseau ;ip routemontre la passerelle par défaut ;ping 8.8.8.8vérifie l’accès Internet.
Mets le système à jour avant toute installation :
sudo apt update && sudo apt full-upgrade -y
apt updatemet à jour la liste des paquets ;full-upgradeinstalle les nouvelles dépendances et supprime les paquets obsolètes si nécessaire ;-yvalide automatiquement.
4. Installation des paquets nécessaires
Installe Apache2, MariaDB, PHP et les extensions nécessaires à Nextcloud.
5. Synthèse Markdown pour ta fiche bristol
# Installation Nextcloud HTTPS Apache2
## Installation des paquets
```bash
sudo apt update
sudo apt install apache2 mariadb-server unzip wget certbot python3-certbot-apache \
php php-cli php-fpm php-mysql php-gd php-curl php-xml php-zip php-mbstring \
php-intl php-bz2 php-imagick php-gmp libapache2-mod-php -y
```
## Sécurisation MariaDB
```bash
sudo mysql_secure_installation
```
## Création de la base
```sql
CREATE DATABASE nextcloud;
CREATE USER 'nextclouduser'@'localhost' IDENTIFIED BY 'MotDePasseFort';
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextclouduser'@'localhost';
FLUSH PRIVILEGES;
```
## Téléchargement
```bash
cd /tmp
wget https://download.nextcloud.com/server/releases/latest.zip
unzip latest.zip
sudo mv nextcloud /var/www/
```
## Droits
```bash
sudo chown -R www-data:www-data /var/www/nextcloud
sudo chmod -R 750 /var/www/nextcloud
```
## Activation Apache
```bash
sudo a2enmod rewrite headers env dir mime ssl
sudo systemctl restart apache2
```
## HTTPS
```bash
sudo certbot --apache
```
## Pare-feu
```bash
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
```
6. Fichiers importants
/etc/apache2/sites-available/nextcloud.conf
/etc/php/8.4/apache2/php.ini
/etc/mysql/mariadb.conf.d/50-server.cnf
/var/www/nextcloud/config/config.php
/var/log/apache2/access.log
/var/log/apache2/error.log
/var/log/nextcloud/nextcloud.log
Arborescence simplifiée :
/var/www/nextcloud/
├── config/
├── data/
├── apps/
├── themes/
├── custom_apps/
└── core/
7. Bloc de configuration complet
<VirtualHost *:80>
ServerName cloud.example.local
Redirect permanent / https://cloud.example.local/
</VirtualHost>
<VirtualHost *:443>
ServerName cloud.example.local
DocumentRoot /var/www/nextcloud
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/cloud.example.local/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/cloud.example.local/privkey.pem
<Directory /var/www/nextcloud>
Require all granted
AllowOverride All
Options FollowSymLinks MultiViews
<IfModule mod_dav.c>
Dav off
</IfModule>
</Directory>
Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
ErrorLog ${APACHE_LOG_DIR}/nextcloud-error.log
CustomLog ${APACHE_LOG_DIR}/nextcloud-access.log combined
</VirtualHost>
8. Installation des paquets et configuration système
Installe tous les composants :
sudo apt install apache2 mariadb-server unzip wget certbot python3-certbot-apache \
php php-cli php-fpm php-mysql php-gd php-curl php-xml php-zip php-mbstring \
php-intl php-bz2 php-imagick php-gmp libapache2-mod-php -y
Pourquoi ces paquets ?
apache2: serveur web ;mariadb-server: base de données ;certbot: génération des certificats HTTPS ;php-*: modules PHP utilisés par Nextcloud.
Vérifie les services :
sudo systemctl status apache2
sudo systemctl status mariadb
9. Configuration de MariaDB
Lance la sécurisation initiale :
sudo mysql_secure_installation
Cette commande permet :
- de définir un mot de passe root ;
- de supprimer les comptes anonymes ;
- d’interdire les connexions root distantes ;
- de supprimer la base de test.
Connecte-toi ensuite à MariaDB :
sudo mysql
Crée la base :
CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE USER 'nextclouduser'@'localhost'
IDENTIFIED BY 'MotDePasseFort';
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextclouduser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Explication
utf8mb4permet de gérer tous les caractères Unicode ;GRANTattribue les droits ;FLUSH PRIVILEGESrecharge les permissions.
10. Téléchargement et installation de Nextcloud
Télécharge la dernière version :
cd /tmp
wget https://download.nextcloud.com/server/releases/latest.zip
unzip latest.zip
sudo mv nextcloud /var/www/
Configure les droits :
sudo chown -R www-data:www-data /var/www/nextcloud
sudo chmod -R 750 /var/www/nextcloud
Explication
www-datacorrespond à l’utilisateur Apache ;750autorise uniquement les accès nécessaires.
11. Configuration Apache2
Active les modules nécessaires :
sudo a2enmod rewrite headers env dir mime ssl
Crée le fichier :
sudo nano /etc/apache2/sites-available/nextcloud.conf
Ajoute la configuration Apache vue précédemment.
Active le site :
sudo a2ensite nextcloud.conf
sudo systemctl reload apache2
Vérification syntaxique
sudo apache2ctl configtest
Résultat attendu :
Syntax OK
12. Activation du HTTPS avec Let’s Encrypt
Génère le certificat :
sudo certbot --apache
Le programme :
- détecte Apache ;
- configure automatiquement SSL ;
- ajoute la redirection HTTPS.
Teste le renouvellement :
sudo certbot renew --dry-run
Ports utilisés
| Service | Port | Protocole |
|---|---|---|
| HTTP | 80 | TCP |
| HTTPS | 443 | TCP |
13. Configuration du pare-feu UFW
Autorise uniquement les ports nécessaires :
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
Vérifie les règles :
sudo ufw status verbose
Cas d’un accès SSH
Si tu administres le serveur à distance :
sudo ufw allow 22/tcp
Sans cette règle, tu risques de perdre l’accès SSH.
14. Finalisation de l’installation web
Ouvre le navigateur :
https://cloud.example.local
Renseigne :
- le compte administrateur ;
- le mot de passe ;
- la base MariaDB ;
- l’utilisateur SQL ;
- le mot de passe SQL.
Paramètres base de données
| Champ | Valeur |
|---|---|
| Base | nextcloud |
| Utilisateur | nextclouduser |
| Hôte | localhost |
15. Commandes utiles et dépannage
Vérifier Apache
sudo systemctl status apache2
Redémarrer Apache
sudo systemctl restart apache2
Vérifier PHP
php -v
Vérifier les modules PHP
php -m
Vérifier MariaDB
sudo systemctl status mariadb
Vérifier les ports ouverts
ss -tulpn
-t: TCP ;-u: UDP ;-l: sockets en écoute ;-p: processus associés ;-n: affichage numérique.
Vérifier les certificats HTTPS
openssl s_client -connect cloud.example.local:443
16. Logs et analyse des erreurs
Logs Apache
/var/log/apache2/access.log
/var/log/apache2/error.log
Lecture temps réel :
sudo tail -f /var/log/apache2/error.log
Logs Nextcloud
/var/www/nextcloud/data/nextcloud.log
Lecture :
sudo tail -f /var/www/nextcloud/data/nextcloud.log
Que peut-on voir dedans ?
- erreurs PHP ;
- problèmes de droits ;
- erreurs SQL ;
- connexions utilisateurs ;
- erreurs HTTPS ;
- modules manquants.
Activer des logs PHP plus détaillés
Fichier :
/etc/php/8.4/apache2/php.ini
Paramètres utiles :
log_errors = On
display_errors = Off
error_reporting = E_ALL
Redémarre Apache :
sudo systemctl restart apache2
17. Bonnes pratiques de sécurité
Utilise toujours HTTPS.
N’expose jamais MariaDB directement sur Internet.
Choisis des mots de passe longs et uniques.
Mets régulièrement Debian et Nextcloud à jour.
Sauvegarde :
- la base MariaDB ;
- le dossier
config/; - le dossier
data/.
Évite d’utiliser le compte root pour l’administration quotidienne.
Active également Fail2ban si le serveur reste exposé sur Internet.
18. Pour aller plus loin
Tu peux ensuite :
- connecter Nextcloud à LDAP ;
- utiliser Redis pour améliorer les performances ;
- installer OnlyOffice ;
- mettre en place une authentification MFA ;
- utiliser un stockage S3 ;
- déployer Docker ou Kubernetes ;
- configurer un reverse proxy Nginx.
19. Liens vers les sites officiels et contenus pédagogiques
Documentation officielle Nextcloud
https://docs.nextcloud.com/server/latest/admin_manual/
Documentation complète d’administration et de sécurisation.
Installation Apache Debian
https://wiki.debian.org/Apache
Documentation Debian officielle pour Apache2.
Documentation Apache SSL
https://httpd.apache.org/docs/current/ssl/
Documentation officielle TLS/SSL Apache.
Documentation UFW Ubuntu
https://ubuntu.com/server/docs/security-firewall
Documentation officielle du pare-feu UFW.
Documentation Certbot
Guide officiel Let’s Encrypt.
OpenClassrooms — Administrez un système Linux
https://openclassrooms.com/fr/courses/7170491-administrez-un-systeme-linux
Très bon cours pour comprendre Linux serveur.
OpenClassrooms — Découvrez le fonctionnement des réseaux TCP/IP
https://openclassrooms.com/fr/courses/7172076-decouvrez-le-fonctionnement-des-reseaux-tcp-ip
Permet de comprendre les ports, protocoles et échanges réseau.
RFC HTTPS / TLS
https://datatracker.ietf.org/doc/html/rfc8446
RFC officielle TLS 1.3.
20. Propositions de TP pour s’exercer
TP 1 — Installation complète
Objectif :
- installer Nextcloud ;
- configurer HTTPS ;
- vérifier le pare-feu.
TP 2 — Analyse des logs
Objectif :
- provoquer une erreur PHP ;
- analyser
error.log; - corriger le problème.
TP 3 — Sauvegarde et restauration
Objectif :
- sauvegarder MariaDB ;
- sauvegarder les fichiers ;
- restaurer une instance complète.
TP 4 — Sécurisation avancée
Objectif :
- installer Fail2ban ;
- limiter les accès SSH ;
- désactiver HTTP simple.
TP 5 — Supervision
Objectif :
- surveiller Apache avec
journalctl; - analyser les connexions HTTPS ;
- détecter des erreurs de certificats.
