From ade9ed8a249978957c539f9a563493c10a29948a Mon Sep 17 00:00:00 2001 From: Willy Date: Thu, 28 May 2026 17:52:40 +0200 Subject: [PATCH] Add deployment/Nextcloud.md --- deployment/Nextcloud.md | 400 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 400 insertions(+) create mode 100644 deployment/Nextcloud.md diff --git a/deployment/Nextcloud.md b/deployment/Nextcloud.md new file mode 100644 index 0000000..0c1e113 --- /dev/null +++ b/deployment/Nextcloud.md @@ -0,0 +1,400 @@ +# 🔽 Nextcloud — Plateforme open source auto-hébergée de stockage, partage de fichiers et collaboration. + +# :one: Installation Nextcloud sur Debian 12 + +## Notes de versions : +- Debian 12 +- MariaDB 11.8 +- Apache 2.4.66 +- PHP 8.4 + +> ⚠️ Attention les credentials inscrit dans la procédure sont seulement à titre d'exemple, pensez à les modifier !! + +## 1. Installation des paquets + +1.1 Mise à jour liste des paquets et paquets +``` +apt update && apt upgrade +``` + + +1.2 Installation des paquets préalable (*non nécessaire depuis Debian 13*) +``` +apt install ca-certificates apt-transport-https curl +``` + + +1.3 Inscription du dépot pour MariaDB 11.8 (*non nécessaire depuis Debian 13*) +``` +curl -LsS https://r.mariadb.com/downloads/mariadb_repo_setup | sudo bash -s -- --mariadb-server-version="mariadb-11.8" +``` + + +1.4 Inscription du dépot pour PHP 8.4 (*non nécessaire depuis Debian 13*) +``` +wget -O /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg` +sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" \ + > /etc/apt/sources.list.d/php.list' && apt update +``` + + +1.5 Installation paquets (Apache2, MariaDB et PHP 8.4) +``` +apt install apache2 mariadb-server php8.4 php8.4-common php8.4-curl php8.4-gd php8.4-intl php8.4-mbstring php8.4-xmlrpc php8.4-mysql php8.4-xml php8.4-cli php8.4-zip +``` + + +1.6 Redémarrer le service apache +``` +systemctl restart apache2 +``` + + +1.7 Contrôler que PHP 8.4 soit bien actif dans Apache2 +``` +a2enmod php8.4` résultat attendu `Module php8.4 already enabled +``` + + +1.8 Activer l'extension PHP gd +``` +phpenmod gd +``` + + +1.9 Installation paquets (wget et unzip) +``` +apt install wget unzip +``` + + +## 2. Mise en place des sources + +2.1 Télécharger la dernière version de Nextcloud depuis la source officielle +``` +wget https://download.nextcloud.com/server/releases/latest.zip +``` + + +2.2 Décompresser l'archive +``` +unzip latest.zip +``` + + +2.3 Déplacer le dossier extrait dans le répertoire "html" +``` +mv nextcloud /var/www/html/ +``` + + +2.4 Définir Apache2 comme propriétaire du dossier nextcloud +``` +chown -R www-data:www-data /var/www/html/nextcloud +``` + + +## 3. Création de la base de données + +3.1 Exécuter la procédure d'installation +``` +mariadb-secure-installation +``` +- Enter current password for root (enter for none): `taper touche entrée` +- Switch to unix_socket authentication [Y/n] `n` +- Change the root password? [Y/n] `Y` +- New password: `DefinePassword` +- Re-enter new password: `DefinePassword` +- Remove anonymous users? [Y/n] `y` +- Disallow root login remotely? [Y/n] `y` +- Remove test database and access to it? [Y/n] `y` +- Reload privilege tables now? [Y/n] `y` +Résultat attendu : All done! ... Thanks for using MariaDB! + + +3.2 Contrôler la version de MariaDB +``` +mariadb -V +``` + + +3.3 Se connecter à la db (pass root défini plus tôt DefinePassword) +``` +mariadb -u root -p +``` + + +3.4 Créer base de données (nom = dbnextcloud) +``` +CREATE DATABASE dbnextcloud; +``` + + +3.5 Créer utilisateur et lui octroyer les droits (user = usrnextcloud ; pass = Nextcloud13) +``` +GRANT ALL ON dbnextcloud.* TO 'usrnextcloud'@'localhost' IDENTIFIED BY 'Nextcloud13'; +``` + + +3.6 Mise à jour des droits +``` +FLUSH PRIVILEGES; +``` + + +3.7 Quitter l'instance MariaDB +``` +EXIT; +``` + + +3.8 Contrôler la db +- Se connecter à MariaDB +``` +mariadb -u root -p +``` +- Afficher la db +``` +show databases; +``` +- Quitter +``` +exit +``` + + +## 4. Configuration de Nextcloud + +4.1 Accéder à l'interface web de Nextcloud +``` +http://ip.address.of.server/nextcloud +``` + + +4.2 Créer l'utilisateur principal de Nextcloud +- User admin `AdminPrincipal` +- Pass admin `PassAdminPrincipal` +- User db `usrnextcloud` +- Pass db `Nextcloud13` +- Nom db `dbnextcloud` +- Hote db `localhost` +- Cliquer sur Install + + +4.3 Configurer le nom de domaine +> Par défaut Nextcloud permet d'accéder à sa webui uniquement via l'adresse ip du serveur +- Editer le fichier `/var/www/html/nextcloud/config/config.php` afin d'y renseigner le domaine associé (voir exemple `config/config.sample.php`) +``` + 'trusted_domains' => + array ( + 0 => 'localhost', + 1 => 'ip.address.of.server', + 2 => 'my-domain.com', + 3 => 'hostname' + ), +``` + + +## 5. Sécurité & renforcement + +5.1 Connexion HTTPS +5.1.1 Déplacer les éléments de certificats +- Certificat public signé `/etc/ssl/certs/hostname.crt` +- Clé privé secrète `/etc/ssl/private/hostname.key` +- Conteneur texte base64 `/etc/ssl/certs/hostname.pem` (obsolète à partir de Apache 2.4.8) + + +5.1.2 Configurer les droits +``` +chmod 600 /etc/ssl/private/hostname.key +chown root:root /etc/ssl/private/hostname.key +``` + + +5.1.3 Editer le fichier `/etc/apache2/sites-available/nextcloud.conf` +``` + + DocumentRoot /var/www/html/nextcloud + ServerName hostname.domain.com + SSLEngine on + SSLCertificateFile /etc/ssl/certs/hostname.crt + SSLCertificateKeyFile /etc/ssl/private/hostname.key + SSLCertificateChainFile /etc/ssl/certs/hostname.pem + +``` + + +5.1.4 Appliquer la configuration +``` +a2enmod ssl rewrite headers +a2dissite 000-default.conf +a2ensite nextcloud.conf +apache2ctl configtest +systemctl restart apache2 +``` + + +5.2 Optimisations performance +Editer `/etc/php/8.4/cli/php.ini` et `/etc/php/8.4/apache2/php.ini` +- Limite de mémoire RAM pour PHP ![ℹ️](https://www.php.net/manual/en/ini.core.php#ini.memory-limit) +``` +memory_limit = 512M +``` + +- Cache PHP de sortie ![ℹ️](https://www.php.net/manual/en/outcontrol.output-buffering.php) +``` +output_buffering = off +``` + +- Taille du stockage des chaines internées ![ℹ️](https://www.php.net/manual/en/opcache.configuration.php#ini.opcache.interned-strings-buffer) +``` +opcache.interned_strings_buffer=10 +``` + +## 6. Personnalisation des settings + +6.1 Modifier les presets de quota utilisateurs +``` +sudo -u www-data php /var/www/html/nextcloud/occ config:app:set files quota_preset --value="2 GB, 5 GB, 10 GB, 50 GB, 100 GB, 500 GB, 1 TB" +``` + +6.2 Réglage de la rétention du versionning `auto = gestion auto. par Nextcloud ; 7 = suppression après 7 jours` +``` +sudo -u www-data php /var/www/html/nextcloud/occ config:system:set versions_retention_obligation --value="auto, 7" +``` + +6.3 Réglage de la rétention de la corbeille `7 = garder min. 7 jours ; 30 = garder max. 30 jours` +``` +sudo -u www-data php /var/www/html/nextcloud/occ config:system:set trashbin_retention_obligation --value="7, 30" + +``` + +## 7. Maintenance + +7.1 Purger les versions et élément dans la corbeille déjà existant avec les nouvelles règles +``` +sudo -u www-data php /var/www/html/nextcloud/occ versions:expire +sudo -u www-data php /var/www/html/nextcloud/occ trashbin:expire +``` + +7.2 Vider la corbeille `--all-users / NameUser / NameUser1 NameUser2` +``` +sudo -u www-data php /var/www/html/nextcloud/occ trashbin:cleanup --all-users +``` + +7.3 Afficher la config occ active, ajouter `--private` pour afficher en clair les id/pass +``` +sudo -u www-data php /var/www/html/nextcloud/occ config:list system +``` + +--- +--- + +# :two: Montage des volumes + +## 1. Dossier partagé SMB/CIFS + +1.1 Installer les paquets necessaires +``` +sudo apt update +sudo apt install cifs-utils +``` + +1.2 Créer le point de montage +``` +sudo mkdir -p /mnt/files_versions +``` + +1.3 Montage manuel (test rapide) +``` +sudo mount -t cifs //ip.address.of.server/files_versions /mnt/files_versions -o username=utilisateur,uid=33,gid=33 +``` + +1.4 Stocker les identifiants de façon sécurisée +``` +sudo nano /etc/smb/credentials +``` +``` +username=NameUser +password=PassUser +``` + +1.5 Sécuriser le fichier credentials +``` +sudo chmod 600 /etc/smb/credentials +sudo chown root:root /etc/smb/credentials +``` + +1.6 Montage automatique au démarrage via `fstab` +``` +sudo nano /etc/fstab +``` +``` +//ip.address.of.server/files_versions /mnt/files_versions cifs credentials=/etc/smb/credentials,uid=33,gid=33,iocharset=utf8,_netdev,nofail,rw 0 0 +# Possibilité d'ajouter les options `file_mode=0777,dir_mode=0777` pour débogage +# uid et gid de "www-data" +``` + +1.7 Appliquer la configuration +``` +sudo systemctl daemon-reload +sudo mount -a +``` + +1.8 Contrôles +``` +dh -h +``` + +1.9 Test d'écriture dans le dossier partagé avec l'utilisateur www-data +``` +sudo -u www-data touch /mnt/files_versions/test.tmp +``` + +## 2. Bind du dossier de versionning + +2.1 Définir le versionning à partager `/var/www/html/nextcloud/data//files_versions` + +2.2 Définir le répertoire de montage `/mnt/files_versions/` + +2.3 Mettre les droits sur le repertoire de montage +``` +chown -R www-data:www-data /mnt/files_versions/ +chmod -R 750 /mnt/files_versions/ +``` + +2.4 Montage manuel (test rapide) +``` +mount --bind /mnt/files_versions/ /var/www/html/nextcloud/data//files_versions +``` + +2.5 Editer le fstab +``` +/mnt/files_versions/ /var/www/html/nextcloud/data//files_versions none bind,nofail,x-systemd.requires=/mnt/file_versions 0 0 +``` + + + + +## 🚧 Diagnostic +- Afficher la version de PHP utilisée +``` +sudo -u www-data php --version +``` + +- Afficher l'emplacement du fichier de configuration utilisé +``` +sudo -u www-data php -i | grep "Loaded Configuration File" +``` + +- Afficher la version de Nextcloud +``` +sudo -u www-data php /var/www/html/nextcloud/occ -V +``` + +- Redémarrer le service apache2 +``` +systemctl restart apache2 && apache2ctl restart +``` + +