Projet PAINS : Installation de Nextcloud | Partie 5

Projet PAINS : Installation de Nextcloud | Partie 5

La partie la plus importante pour moi du projet, mais aussi la plus compliqué. Pas nécessairement difficile mais assez volumineux : Nextcloud.
Au début je pensais qu'il fallait juste installer un paquet à coup de apt install, ou juste mettre une ISO donnée gentiment. Et c'est pas ça. Enfin presque...

Pour fonctionner nextcloud a besoin d'autres services : une base de données, un serveur WEB, PHP et un OS. On peut utiliser nextcloud AIO pour docker ou une VM pré-faites qui fonctionne avec docker. Sauf que je ne veux pas utiliser docker. Donc la plupart des solutions préfaites ne fonctionnent pas dans mon cas.
Mais c'est pas grave, nous allons juste tout installer manuellement. L'avantage c'est que je peux choisir quels services je veux mettre pour nextcloud ( que je vais appeler NC, c'est plus court ) au lieu de ceux choisis. Et sur la documentation de NC, on nous indique si les alternatives sont de bonnes idées ou non ( par exemple SQlite n'est pas adapté et ils le précisent ). 

 

Mon NextCloud sera entouré des services suivants : 
- Debian 13 : Il est recommandé d'utiliser Ubuntu, mais j'aime pas. Debian 13 n'est pas officiellement supporté par nextcloud, mais il le sera prochainement, donc autant prendre de l'avance.
- Apache2 : souvent, on recommande Nginx mais j'ai une préférence pour Apache2.
- PostgreSQL : C'est le service de DB le plus recommandé pour NC. N'aimant pas la base de données, même si je connais mieux MariaDB et MySQL, je pars du principe que je n'aurais pas besoin de toucher à la DB, et donc de mettre le service le plus apprécié par NC.
- PHP 8.4 : il faut en mettre un sinon ça ne marche pas. Je précise la version car parfois nextcloud n'est pas compatible avec les versions plus récentes. Actuellement ils recommandent la 8.4 donc on va les écouter. Il ne faudra pas oublier de nombreux modules
cron : Pour qu'il puisse effectuer certaines tâches en arrière plan, car c'est un exécuteur de script.
- REDIS : je le cite car parfois je le vois passer dans les tutoriels d'installation pour l'intégrité des fichiers. A voir si je le mettrai par la suite.
- Et un certificat pour avoir le HTTPS . On va utiliser Let's Encrypt, ça sera amplement suffisant. 

Du côté physique, NC sera sur une VM qui sera stocké dans le SSD principal, mais tout le stockage sera sur 3 HDD de 2TO avec l'envie de les mettre en RAID 5 ( ou l'équivalent moderne ZFS ). Donc je ferais un passthrough de ces HDD sur la VM. 

Pour faire tout ça, je vais m'aider de ce tutoriel, et de la documentation officiel. Et au pire, google est mon ami. 

On commence par installer Apache2. Le temps qu'il s'installe, nous allons faire la redirection de port sur OPNsense. En théorie, la box internet et proxmox ont retenu leur redirection de port respective, donc cela devrait marcher dès la mise en place des règles sur OPNsense. 

On rajoute une règle dans la NAT / redirection de port et une règle sur le WAN
Pour celle du NAT :

Interface : WAN
Version TCP/IP : IPv4
Protocle : TCP
Destination : WAN adresse
Plage de port de destination : de 2500 à 2500
rediriger l'IP de destination : Hôte unique ou réseau : 192.168.15.100
Rediriger le port cible : HTTP
Reflexion NAT : Utiliser les paramètres système par défaut
Association de règle de filtrage : autoriser

Pour celle du WAN :

interface : WAN
direction : in
Version TCP/IP : IPv4
Protocole : TCP
Source : any
Destination : WAN adresse
plage de ports de destination : de (autres ) 2500 à (autres) 2500
passerelle : défaut


La deuxième est normalement générée par défaut du fait de la création de la règle NAT. Mais je l'écris ici au cas où.

C'est vrai que faire les règles maintenant est un peu stupide, puisqu'on se base sur le port 80, soit le HTTP, soit non-sécurisé. Mais c'est pour voir si les nombreuses redirections précédentes fonctionnent correctement. Et puis ce ne sera qu'un chiffre à changer dans la règle. Je désactive la règle le temps de la configuration, on ne sait jamais, si un petit filou passe par là pendant la configuration.

Apache2 à l'air d'être installé avec cette page d'accueil.  Heureusement, il a eu l'après midi pour s'installer, les règles étaient un poil dures à configurer .
Il faut aussi activer des modules pour un meilleur fonctionnement de NC. Elles sont répertoriées sur la documentation officielle. 
on execute la commande : a2enmod rewrite headers env dir mime ssl pour tous les activer en même temps.
Rewrite est obligatoire pour que NC fonctionne.
headers env dir mime sont recommandés pour que ça fonctionne mieux 
SSL est pour pouvoir faire du SSL/TLS et se passer du http. 

Ensuite on installe PHP.  La version 8.4 puis quelques dépendances demandées par NC : php8.4-curl \ php8.4-gd \ php8.4-mbstring \ php8.4-intl \ php8.4-xml \ php8.4-zip \ php8.4-pgsql \ php8.4-bcmath \ php8.4-apcu \ php8.4-imagick

On revient sur Apache2 en configurant le fichier /sites-available/nextcloud.conf. Il n'existe pas, c'est normal, nous allons le créer. Dedans on met ça pour créer un virtualHost: 

<VirtualHost *:2500> #dans /etc/apache2/ports.conf faudra rajouter "Listen 2500"
    ServerAdmin une@adresse@mail
    DocumentRoot /var/www/nextcloud #endroit où sera mis tout les fichiers de fonctionnement de nextcloud
    ServerName NAS.icila.com #le nom de domaine ou sous-domaine de nextcloud. 

    <Directory /var/www/nextcloud/>
        Options FollowSymlinks MultiViews
        AllowOverride All
        Require all granted

        <IfModule mod_dav.c>
            Dav off 
        </IfModule> # NC à le sien, pas besoin de celui de Apache2
     <IfModule mod_headers.c>
        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"
     </IfModule> # tous ça c'est pour pas que le navigateur internet comprenne mal un truc de nextcloud
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/nextcloud_error.log
    CustomLog ${APACHE_LOG_DIR}/nextcloud_access.log combined

</VirtualHost>

Ensuite on fait un a2enmod php8.4 et un a2ensite nextcloud.conf . on peut ensuite redémarrer apache2. Il peut ne pas être content car il ne trouve pas les fichiers nextcloud, ce qui est normal, il ne sont pas encore DL.
Ce qu'on va faire maintenant, c'est donc télécharger et dezipper le fichier nextcloud. 
On va donc faire un wget https://download.nextcloud.com/server/releases/latest.zip , de préférence dans le dossier où il sera stocké. Dans mon cas, dans /var/www/nextcloud.
Ensuite on le dezippe avec unzip latest.zip ( peut être un paquet à installer en fonction de la distribution choisie ).

Et pour terminer, il faut lui donner les permissions. Il faut que le dossier ait au minimum la permission 750. Mais à qui donner la permission ? Il faut le donner à Apache. Pour connaître son nom d'utilisateur, on fait un ps aux |grep apache2. ça nous donne son nom. Dans mon cas ( et ça doit être la même partout ) c'est www-data.
Donc on rentre la commande : chown -R www-data:www-data /var/www/nextcloud .

Et après ça, on peut voir sur une VM graphique en LAN, un premier résultat :


On va maintenant installer notre base de données : PostgreSQL

on l'installe, on la démarre puis on se connecte avec son propre user. Donc sur debian : su - postgres
Ensuite on écrit psql .
Il nous fait rentrer dans le système de la base de données. 
Et puis on va rentrer des commandes SQL. Juste de quoi créer une base de données, un utilisateur et lui donner tout les droit sur la db juste créée. 

CREATE DATABASE nextcloud; #vous pouvez l'appeler comme vous voulez
CREATE USER ncuser WITH PASSWORD 'motDEpasse' ; #le nom d'utilisateur vous le nommez comme vous voulez. par contre les apostrophe sont obligatoire.
GRANT ALL PRIVILEGES ON DATABASE nextcloud TO ncuser;

Et on peut quitter la DB avec /q

Je coupe ensuite la VM nextcloud. Il faut rajouter les 3 HDD. pour ce faire, je sors un nouveau tuto vidéo (qui se base sur le tutoriel officiel de proxmox ). Il fait le Passthrough pour trueNAS mais le système reste le même.
Avant toute manipulation, il faut installer lshw sur notre hôte proxmox ( il faut sortir son CLI ). Cela nous permettra de récupérer les numéros de séries de chaque HDD ( à noter à coté pour la suite ). Il suffit de rentrer lshw et de chercher la section sur les disks (oui on peut filtrer le résultat mais comme ça, on peut voir tout des composants, c'est sympa ). 
Ensuite, encore des informations à récupérer : celle sur leurs identifiants dans proxmox. Pour cela on rentre la commande : 

lsblk |awk 'NR==1{print $0" DEVICE-ID(S)"}NR>1{dev=$1;printf $0" ";system("find /dev/disk/by-id -lname \"*"dev"\" -printf \" %p\"");print "";}'|grep -v -E 'part|lvm'

Et on récupère juste la partie de chaque sd qui contient ata. 
Dans mon cas par exemple : sda                             8:0    0   1.8T  0 disk   /dev/disk/by-id/ata-WDC_WD20EZBX-00AYRA0_WD-WX45673K8ASJ /dev/disk/by-id/wwn-0x50014ee2c0a1b1c9
Je récupère l'information " ata-WDC_WD20EZBX-00AYRA0_WD-WX45673K8ASJ "

On peut maintenant relier les HDD à la VM. Pour cela on va utiliser cette commande : 

qm set ID-de-la-VM -scsi1 /dev/disk/by-id/ata-leResteDel'idDUhdd

-scsi1 est l'emplacement virtuel où sera notre HDD sur la VM. En théorie scsi0 est pris pour le disque principal de la VM. On peut mettre le chiffre qu'on veut.

Et on fait de même pour les deux autres HDD. ( ça marche pareil pour un SSD ) 

On peut même voir le résultat en direct sur la VM 

Une recommandation vue à plusieurs endroits sur internet, c'est de rajouter le "serial" dans le fichier /etc/pve/qemu-server/IDdeLAvm.conf

De cette manière, proxmox sera "obligé" de mettre le même HDD au même endroit.

On peut maintenant démarrer la VM NC, et voir que tout fonctionne.

Pour en arriver là, il vous a suffit de peut-être 10 minutes de lecture. Pour moi c'était 3 jours. Mais ça m'a permis de réfléchir à mon système de stockage. Partir sur du RAID5 ou du ZFS. Pour des habitués du domaine, la question ne se pose pas, mais pour moi qui ne connais que le RAID, je voulais comprendre pourquoi prendre le ZFS. Et après quelques minutes sur internet, C'est vrai que le ZFS a de bons avantages : l'autoréparation, les snapshots. Et je vais partir sur le ZFS. Le RAIDZ1 pour être précis. Même si il consomme un peu plus en ram et en vitesse E/S, la vérification de corruption me parait un plutôt bon point, surtout que mes disques sont des recertifiés, donc neuf mais pas trop. 
Aussi, je n'ai pas de système de backup, donc si les données pouvaient ne pas se corrompre, ça serait chouette.

Mais je vais d'abord créer une autre partition pour cette VM. De 20go avec l'option cache : Write back. Un autre avantage de ZFS est sa flexibilité avec de nombreuses options disponibles. Je vais faire de cette partition une sorte de cache DRAM, un L2ARC dans le jargon du ZFS.  Je voulais au départ retirer 30go de la partition principale, mais c'était trop risqué, et je ne manque pas de stockage sur mon proxmox.



J'ai monté la partition sde mais faut pas le faire


Maintenant on attaque vraiment le ZFS et le RAIDZ1. 
Nos 3 disques sont actuellement sur sdb,sdc et sdd.

Sur debian faut installer le paquet zfsutils-linux en rajoutant des lignes dans le sources.list

deb http://deb.debian.org/debian trixie-backports main contrib non-free-firmware
deb-src http://deb.debian.org/debian trixie-backports main contrib non-free-firmware

Ensuite on peut faire un zpool create -f nomdupool raidz1 /dev/sdb /dev/sdc /dev/sdd 
-f va forcer la création du pool, même si il y a des données dedans, car la création du pool, supprime les données contenues dans le disque.

en faisant un lsblk on peut voir ça : 

C'est que c'est bon. 

Deux commandes nous indiquent des détails sur ce RAIDz1 

Passer de 6 to à 3.5to ça pique

 

On génère maintenant un dataset pour nc. Pour simplifier, au lieu qu'il soit directement dans le dossier /bighddd, il sera dans /bighddd/nextcloud (je l'appelle comme ça mais on peut l'appeler comme on veut. Au moment de la configuration par web, on indiquera le chemin /bighddd/nextcloud ). ça sera plus propre pour gérer le pool de disques.

zfs create bighddd/nextcloud

Et on ajoute notre volume de cache à notre pool :

zpool add bighddd cache /dev/sde

bighddd est le nom de mon pool

On donne les permissions du dossier nextcloud à apache2 : chown -R www-data:www-data /bighddd/nextcloud
Et on peut enfin passer côté navigateur.

 

On rentre toutes les informations qu'on nous demande et on appuie sur installer

Et là, vous avez sûrement une erreur SQL car il a pas les droits pour le schéma public. Si non, bravo ,vous y avez pensé avant, si oui, voici la solution :

Retourner sur la VM nextcloud, connectez vous à votre DB ( su - postgres, psql ) puis rentrez les commandes suivantes : (oubliez pas de changer les noms de la db et du user

ALTER DATABASE nextcloud OWNER TO ncuser;
\c nextcloud
ALTER SCHEMA public OWNER TO ncuser;
GRANT ALL ON SCHEMA public TO ncuser;

et puis vous pouvez retourner sur le site et recliquer sur "install". Et là ça marche. 

Maintenant on attends puis on arrive ici : 

Selectionnez ceux qui vous interessent. Perso, je prends juste le talk, car je n'aime pas l'interface collabora Online, donc j'en mettrai un autre. Et je voudrais bien tester le messagerie instantannée, et le truc de partage d'écran. Au pire je le supprimerai si c'est nul.

Et voilà, on est sur nextcloud !
Pour le HTTPS, on verra ça la prochaine fois, ainsi que la configuration interne de nextcloud.
Allez, je fais un temps mort sur NC, à plus !


Posté le 29 décembre 2025 par _Antonin_