Fiche Installation Nextcloud HTTPS et Apache2

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

  1. Introduction
  2. Sommaire
  3. Prérequis réseau et système
  4. Installation des paquets nécessaires
  5. Configuration de MariaDB
  6. Téléchargement et installation de Nextcloud
  7. Configuration Apache2
  8. Activation du HTTPS avec Let’s Encrypt
  9. Configuration du pare-feu UFW
  10. Finalisation de l’installation web
  11. Gestion des fichiers importants
  12. Commandes utiles et dépannage
  13. Logs et analyse des erreurs
  14. Bonnes pratiques de sécurité
  15. Pour aller plus loin
  16. Liens utiles et documentation officielle
  17. 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 a affiche les interfaces réseau ;
  • ip route montre la passerelle par défaut ;
  • ping 8.8.8.8 vérifie l’accès Internet.

Mets le système à jour avant toute installation :

sudo apt update && sudo apt full-upgrade -y
  • apt update met à jour la liste des paquets ;
  • full-upgrade installe les nouvelles dépendances et supprime les paquets obsolètes si nécessaire ;
  • -y valide 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

  • utf8mb4 permet de gérer tous les caractères Unicode ;
  • GRANT attribue les droits ;
  • FLUSH PRIVILEGES recharge 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-data correspond à l’utilisateur Apache ;
  • 750 autorise 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

ServicePortProtocole
HTTP80TCP
HTTPS443TCP

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

ChampValeur
Basenextcloud
Utilisateurnextclouduser
Hôtelocalhost

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

https://certbot.eff.org/

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.
Retour en haut