Applications
📚 Nextcloud Installation Debian 12 — Guide Complet
Guide pas-à-pas pour installer Nextcloud (cloud personnel open-source) sur Debian 12 avec Apache, PHP 8.2, MariaDB et Redis. Stockage de fichiers, calendrier, contacts et bien plus.
Prérequis
Nextcloud est une plateforme de cloud personnel open-source — stockage de fichiers, calendrier, contacts, visioconférence et bien plus. Ce guide couvre l'installation sur Debian 12 avec Apache, PHP 8.2 et MariaDB.
| Composant | Requis | Recommandé |
|---|---|---|
| OS | Debian 11+ | Debian 12 Bookworm |
| RAM | 512 Mo | 2 Go+ |
| Disque | /var : 10 Go | SSD, selon stockage |
| PHP | 8.1 ou 8.2 | 8.2 |
| Base de données | MariaDB 10.6+ / MySQL 8 | MariaDB 10.11+ |
| Serveur web | Apache 2.4 / Nginx | Apache 2.4 (recommandé Nextcloud) |
| Nextcloud | 27.x ou 28.x | Dernière version stable |
Étape 1 — Mise à jour et dépendances système
01-preparation.sh
# Mise à jour complète apt update && apt upgrade -y # Dépendances de base apt install -y curl wget unzip git apt-transport-https \ ca-certificates gnupg lsb-release # Vérifier la version de Debian lsb_release -a
Étape 2 — Apache + PHP 8.2 + toutes les extensions Nextcloud
02-apache-php.sh
# Apache apt install -y apache2 # PHP 8.2 + toutes les extensions requises et recommandées par Nextcloud apt install -y php8.2 php8.2-common php8.2-cli \ php8.2-mysql php8.2-mbstring php8.2-gd php8.2-xml \ php8.2-curl php8.2-zip php8.2-intl php8.2-bz2 \ php8.2-ldap php8.2-imap php8.2-apcu php8.2-redis \ php8.2-imagick php8.2-bcmath php8.2-gmp php8.2-smbclient \ libapache2-mod-php8.2 # Activer les modules Apache nécessaires a2enmod rewrite headers env dir mime ssl systemctl enable --now apache2 # Vérifier php -v && apache2ctl -v
Étape 3 — Optimisation PHP pour Nextcloud
03-php-config.sh
PHP_INI=/etc/php/8.2/apache2/php.ini # Paramètres obligatoires sed -i 's/memory_limit = .*/memory_limit = 512M/' $PHP_INI sed -i 's/upload_max_filesize = .*/upload_max_filesize = 16G/' $PHP_INI sed -i 's/post_max_size = .*/post_max_size = 16G/' $PHP_INI sed -i 's/max_execution_time = .*/max_execution_time = 3600/' $PHP_INI sed -i 's/max_input_time = .*/max_input_time = 3600/' $PHP_INI sed -i 's/output_buffering = .*/output_buffering = Off/' $PHP_INI sed -i 's|;date.timezone.*|date.timezone = Europe/Paris|' $PHP_INI # OPcache (performances PHP) cat >> $PHP_INI << 'EOF' [opcache] opcache.enable=1 opcache.memory_consumption=128 opcache.interned_strings_buffer=16 opcache.max_accelerated_files=10000 opcache.revalidate_freq=1 opcache.save_comments=1 EOF # APCu (cache en mémoire) cat > /etc/php/8.2/mods-available/apcu.ini << 'EOF' extension=apcu.so apc.enable_cli=1 EOF systemctl restart apache2 echo "PHP configuré."
Étape 4 — Installation et sécurisation MariaDB
04-mariadb.sh
apt install -y mariadb-server mariadb-client # Sécuriser l'installation MariaDB mysql_secure_installation # Connexion root pour créer la base mysql -u root -p << 'SQL' CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; CREATE USER 'nextcloud_user'@'localhost' IDENTIFIED BY 'NC_P@ssw0rd!'; GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud_user'@'localhost'; FLUSH PRIVILEGES; EXIT; SQL # Tuning MariaDB pour Nextcloud cat >> /etc/mysql/mariadb.conf.d/50-server.cnf << 'EOF' [mysqld] innodb_buffer_pool_size = 512M innodb_io_capacity = 4000 innodb_io_capacity_max = 8000 innodb_flush_log_at_trx_commit = 2 transaction_isolation = READ-COMMITTED binlog_format = ROW EOF systemctl restart mariadb echo "MariaDB prêt."
Étape 5 — Installation de Redis (cache sessions)
Redis améliore considérablement les performances de Nextcloud en gérant le cache des sessions et le verrou de fichiers distribué.
05-redis.sh
apt install -y redis-server php8.2-redis # Configurer Redis pour Nextcloud (socket Unix = plus rapide) sed -i 's/^# unixsocket /unixsocket /' /etc/redis/redis.conf sed -i 's/^# unixsocketperm .*/unixsocketperm 770/' /etc/redis/redis.conf # Ajouter www-data au groupe redis usermod -aG redis www-data systemctl enable --now redis-server echo "Redis configuré."
Étape 6 — Téléchargement et déploiement Nextcloud
06-nextcloud-deploy.sh
# Télécharger la dernière version stable
# Vérifier sur nextcloud.com/install la version actuelle
NC_VERSION=29.0.3
wget https://download.nextcloud.com/server/releases/nextcloud-${NC_VERSION}.zip -O /tmp/nextcloud.zip
wget https://download.nextcloud.com/server/releases/nextcloud-${NC_VERSION}.zip.sha256 -O /tmp/nextcloud.zip.sha256
# Vérifier l'intégrité du fichier téléchargé
cd /tmp && sha256sum -c nextcloud.zip.sha256
# Extraire dans le répertoire web
unzip -q /tmp/nextcloud.zip -d /var/www/html/
mv /var/www/html/nextcloud /var/www/html/nextcloud
# Répertoire de données HORS du webroot (sécurité)
mkdir -p /var/lib/nextcloud/data
chown -R www-data:www-data /var/www/html/nextcloud
chown -R www-data:www-data /var/lib/nextcloud
chmod -R 750 /var/www/html/nextcloud
chmod -R 750 /var/lib/nextcloud
echo "Nextcloud extrait."
Étape 7 — VirtualHost Apache pour Nextcloud
/etc/apache2/sites-available/nextcloud.conf
<VirtualHost *:80>
ServerName cloud.entreprise.local
Redirect permanent / https://cloud.entreprise.local/
</VirtualHost>
<VirtualHost *:443>
ServerName cloud.entreprise.local
DocumentRoot /var/www/html/nextcloud
SSLEngine on
SSLCertificateFile /etc/ssl/certs/nextcloud.crt
SSLCertificateKeyFile /etc/ssl/private/nextcloud.key
<Directory /var/www/html/nextcloud>
Options +FollowSymlinks -Indexes
AllowOverride All
Require all granted
<IfModule mod_dav.c>
Dav off
</IfModule>
SetEnv HOME /var/www/html/nextcloud
SetEnv HTTP_HOME /var/www/html/nextcloud
</Directory>
# Headers de sécurité recommandés par Nextcloud
Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
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"
ErrorLog ${APACHE_LOG_DIR}/nextcloud_error.log
CustomLog ${APACHE_LOG_DIR}/nextcloud_access.log combined
</VirtualHost>
07-ssl-et-activation.sh
# Générer un certificat auto-signé (pour usage interne) openssl req -x509 -nodes -days 3650 -newkey rsa:4096 \ -keyout /etc/ssl/private/nextcloud.key \ -out /etc/ssl/certs/nextcloud.crt \ -subj "/CN=cloud.entreprise.local/O=Entreprise/C=FR" # OU utiliser Let's Encrypt (si accessible depuis internet) # apt install -y certbot python3-certbot-apache # certbot --apache -d cloud.exemple.fr # Activer le site a2ensite nextcloud.conf a2dissite 000-default.conf apache2ctl configtest systemctl reload apache2 echo "Apache configuré pour Nextcloud."
Étape 8 — Installation via ligne de commande (occ)
L'outil occ (Nextcloud console) permet d'administrer Nextcloud entièrement en CLI, sans passer par l'assistant web.
08-nextcloud-install-occ.sh
# Installation via occ (recommandé pour serveurs de production) cd /var/www/html/nextcloud sudo -u www-data php occ maintenance:install \ --database "mysql" \ --database-host "localhost" \ --database-name "nextcloud" \ --database-user "nextcloud_user" \ --database-pass "NC_P@ssw0rd!" \ --database-port "3306" \ --admin-user "admin" \ --admin-pass "AdminNC_P@ss!" \ --data-dir "/var/lib/nextcloud/data" echo "Nextcloud installé !" # OU via l'assistant web (navigateur) : # Ouvrir https://cloud.entreprise.local # et remplir le formulaire d'installation
Étape 9 — Configuration post-installation
09-post-install.sh
cd /var/www/html/nextcloud # Configurer le domaine de confiance sudo -u www-data php occ config:system:set trusted_domains 0 --value="cloud.entreprise.local" sudo -u www-data php occ config:system:set trusted_domains 1 --value="192.168.1.50" # Configurer Redis comme cache sudo -u www-data php occ config:system:set memcache.local --value="\\OC\\Memcache\\APCu" sudo -u www-data php occ config:system:set memcache.distributed --value="\\OC\\Memcache\\Redis" sudo -u www-data php occ config:system:set memcache.locking --value="\\OC\\Memcache\\Redis" sudo -u www-data php occ config:system:set redis host --value="/var/run/redis/redis-server.sock" sudo -u www-data php occ config:system:set redis port --value=0 --type=integer # Définir le fuseau horaire et la langue sudo -u www-data php occ config:system:set default_locale --value="fr_FR" sudo -u www-data php occ config:system:set default_phone_region --value="FR" sudo -u www-data php occ config:system:set logtimezone --value="Europe/Paris" # Activer les tâches de fond via cron (plus efficace qu'AJAX) sudo -u www-data php occ background:cron echo "*/5 * * * * www-data php -f /var/www/html/nextcloud/cron.php" > /etc/cron.d/nextcloud echo "Configuration post-install terminée."
Étape 10 — Optimisations et maintenance
10-optimisation.sh
cd /var/www/html/nextcloud # Convertir les anciens indices de base (à faire après install) sudo -u www-data php occ db:add-missing-indices sudo -u www-data php occ db:convert-filecache-bigint # Vérifier l'état général de Nextcloud sudo -u www-data php occ status sudo -u www-data php occ check # Lister les applications installées sudo -u www-data php occ app:list # Installer des applications utiles sudo -u www-data php occ app:install calendar sudo -u www-data php occ app:install contacts sudo -u www-data php occ app:install tasks sudo -u www-data php occ app:install onlyoffice # Suite bureautique # Passer en mode maintenance (avant une mise à jour) sudo -u www-data php occ maintenance:mode --on # Mettre à jour Nextcloud sudo -u www-data php occ upgrade # Désactiver le mode maintenance sudo -u www-data php occ maintenance:mode --off
Sauvegarde et restauration
11-backup-nextcloud.sh
#!/bin/bash
set -euo pipefail
NC_DIR="/var/www/html/nextcloud"
DATA_DIR="/var/lib/nextcloud/data"
BACKUP_DIR="/backup/nextcloud"
DATE=$(date +%Y%m%d_%H%M)
LOG="/var/log/backup-nextcloud.log"
log() { echo "[$(date)] $*" | tee -a $LOG; }
log "=== Sauvegarde Nextcloud $DATE ==="
# 1. Activer le mode maintenance
sudo -u www-data php $NC_DIR/occ maintenance:mode --on
log "Mode maintenance activé"
# 2. Sauvegarde de la base de données
mysqldump -u nextcloud_user -p'NC_P@ssw0rd!' nextcloud | \
gzip > "$BACKUP_DIR/db_$DATE.sql.gz"
log "Base de données sauvegardée"
# 3. Sauvegarde du répertoire de données
rsync -az --link-dest="$BACKUP_DIR/data_latest" \
"$DATA_DIR/" "$BACKUP_DIR/data_$DATE/"
ln -snf "$BACKUP_DIR/data_$DATE" "$BACKUP_DIR/data_latest"
log "Données sauvegardées"
# 4. Sauvegarde de la config
cp "$NC_DIR/config/config.php" "$BACKUP_DIR/config_$DATE.php"
log "Config sauvegardée"
# 5. Désactiver le mode maintenance
sudo -u www-data php $NC_DIR/occ maintenance:mode --off
log "Mode maintenance désactivé"
# 6. Purger les sauvegardes > 30 jours
find "$BACKUP_DIR" -name "db_*.sql.gz" -mtime +30 -delete
find "$BACKUP_DIR" -name "config_*.php" -mtime +30 -delete
log "=== Sauvegarde terminée ==="
# Cron : 0 2 * * * root /usr/local/bin/backup-nextcloud.sh
Toujours activer le mode maintenance (
occ maintenance:mode --on) avant toute sauvegarde ou mise à jour. Cela empêche les modifications pendant l'opération et garantit la cohérence des données.Après installation, aller dans Administration → Vue d'ensemble dans l'interface Nextcloud pour vérifier les avertissements de sécurité et de performance. Nextcloud signale lui-même ce qui doit être corrigé.
Commandes occ utiles — Référence
| Commande occ | Description |
|---|---|
| Administration générale | |
| occ status | État général de Nextcloud (version, maintenance...) |
| occ check | Vérification de l'environnement |
| occ maintenance:mode --on/off | Activer/désactiver le mode maintenance |
| occ upgrade | Lancer la mise à jour Nextcloud |
| Utilisateurs | |
| occ user:list | Lister tous les utilisateurs |
| occ user:add --display-name "Jean Dupont" jdupont | Créer un utilisateur |
| occ user:resetpassword jdupont | Réinitialiser un mot de passe |
| occ group:list | Lister les groupes |
| Fichiers et base de données | |
| occ files:scan --all | Rescanner tous les fichiers |
| occ db:add-missing-indices | Ajouter les indices manquants |
| occ db:convert-filecache-bigint | Convertir le cache en entiers 64 bits |
| occ files:cleanup | Nettoyer les fichiers orphelins |
| Applications | |
| occ app:list | Lister les apps installées/désactivées |
| occ app:install <nom> | Installer une application |
| occ app:enable/disable <nom> | Activer/désactiver une app |
| occ app:update --all | Mettre à jour toutes les applications |
| Configuration | |
| occ config:system:get version | Lire un paramètre de config |
| occ config:system:set log_level --value=1 | Définir un paramètre |
| occ log:tail | Suivre les logs Nextcloud en temps réel |
Ressources officielles Nextcloud
Nextcloud.com
Site officiel et téléchargement
Nextcloud Releases
Dernières versions sur GitHub
Documentation Admin
Guide d'administration serveur complet
Nextcloud Apps
Catalogue des applications officielles
Nextcloud occ CLI
Référence complète des commandes occ
Forum Nextcloud
Communauté d'entraide et support
Ajouter Les Fibrés à mes sources préférées
Retrouvez plus souvent nos guides dans vos résultats Google