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.

NextcloudDebian 12ApachePHP 8.2MariaDBRedisSSLocc

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.

ComposantRequisRecommandé
OSDebian 11+Debian 12 Bookworm
RAM512 Mo2 Go+
Disque/var : 10 GoSSD, selon stockage
PHP8.1 ou 8.28.2
Base de donnéesMariaDB 10.6+ / MySQL 8MariaDB 10.11+
Serveur webApache 2.4 / NginxApache 2.4 (recommandé Nextcloud)
Nextcloud27.x ou 28.xDerniè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 occDescription
Administration générale
occ statusÉtat général de Nextcloud (version, maintenance...)
occ checkVérification de l'environnement
occ maintenance:mode --on/offActiver/désactiver le mode maintenance
occ upgradeLancer la mise à jour Nextcloud
Utilisateurs
occ user:listLister tous les utilisateurs
occ user:add --display-name "Jean Dupont" jdupontCréer un utilisateur
occ user:resetpassword jdupontRéinitialiser un mot de passe
occ group:listLister les groupes
Fichiers et base de données
occ files:scan --allRescanner tous les fichiers
occ db:add-missing-indicesAjouter les indices manquants
occ db:convert-filecache-bigintConvertir le cache en entiers 64 bits
occ files:cleanupNettoyer les fichiers orphelins
Applications
occ app:listLister 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 --allMettre à jour toutes les applications
Configuration
occ config:system:get versionLire un paramètre de config
occ config:system:set log_level --value=1Définir un paramètre
occ log:tailSuivre les logs Nextcloud en temps réel
Ajouter Les Fibrés à mes sources préférées
Retrouvez plus souvent nos guides dans vos résultats Google