[Tuto] Installation de Nextcloud + MariaDB + Redis + ClamAV en Docker

EVO

Administreur
Membre du personnel
25 Novembre 2019
8 342
1 608
278
/var/run/docker.sock
Installation de Nextcloud + MariaDB + Redis + ClamAV en Docker

Bonjour,
Nous allons ici utiliser docker-compose ( mais il est possible de passer par Portainer également ) pour installer nextcloud.

9ikFGtd.png

Nextcloud ? C'est quoi ?
Nextcloud est un logiciel libre, de site d'hébergement de fichiers et une plateforme de collaboration. À l'origine accessible via WebDAV, n'importe quel navigateur web, ou des clients spécialisés, son architecture ouverte a permis de voir ses fonctionnalités s'étendre depuis ses origines. En 2020, il propose de nombreux services.

Pré-requis :
Avoir un accès SSH à la machine
Avoir installer docker et docker-compose , docker-compose
Connaitre le PUID/GUID de l'utilisateur, voir tuto


Sommaire :
1/ Créer les dossiers nécessaires
2/ Création de la configuration et des conteneurs
2.1/ Création du fichier "docker-compose.yml"
2.2/ Création des conteneurs
3/ Configuration de Nextcloud
3.1/ Accès a l'interface de Nextcloud
3.2/ Configuration
4/ Mise en place de Redis ( Optionnel )
4.1/ Modification de la configuration de Nextcloud
4.2/ Modification de la configuration de PHP
4.3/ Activation & Création du conteneur
5/ Mise en place de l'antivirus ( Optionnel )
5.1 Activation & Création du conteneur
5.2 Configuration dans Nextcloud
5.3 Essai de fonctionnement

C'est parti ! :giggle:



1/ Créer les dossiers nécessaires
Pour mon tuto, je vais placer tous les dossiers ( mariadb , nextcloud et redis dans le dossier /home/nom_dutilisateur/docker )

Je me place donc dans /home/nom_dutilisateur/docker: cd /home/nom_dutilisateur/docker
- Nextcloud a besoin d'un dossier /config et d'un dossier /data
- MariaDB a besoin d'un dossier /mariadb
- Redis a besoin d'un dossier /redis
avec cette commande, on créer les 4 dossiers, dans un dossier /nextcloud :

Code:
sudo mkdir -p nextcloud/{mariadb,config,data,redis}

Note : Même si vous ne souhaitez pas configurer le conteneur Redis, cela n'est pas dérangeant d'avoir le dossier /redis de créé.

Utiliser la commande cd nextcloud pour acceder au dossier nextcloud.



2/ Création de la configuration et des conteneurs
2.1/ Création du fichier "docker-compose.yml"


A partir de maintenant, tout le tuto va sur poursuivre en prenant pour base que vous êtes depuis le terminal dans le dossier nextcloud créé a l'étape 1.

Pour créer le fichier :
Code:
nano docker-compose.yml

Ensuite vous copier/coller ceci dedans :
Code:
version: "2"
services:
  nextcloud:
    image: lscr.io/linuxserver/nextcloud:latest
    container_name: nextcloud
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Paris
    volumes:
      - ./config:/config
      - ./data:/data
    ports:
      - 443:443
    depends_on:
      - mariadb
#      - cache
    restart: unless-stopped

  mariadb:
    image: lscr.io/linuxserver/mariadb:latest
    container_name: nextcloud-mariadb
    environment:
      - PUID=1000
      - PGID=1000
      - MYSQL_ROOT_PASSWORD=123456789
      - TZ=Europe/Paris
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_PASSWORD=ABCDEF
    volumes:
      - ./mariadb:/config
    restart: unless-stopped

#  cache:
#    container_name: nextcloud-redis
#    image: redis:7-alpine
#    restart: unless-stopped
#    command: redis-server --save 20 1 --loglevel warning --requirepass MOT_DE_PASSE_BALEZE
#    volumes:
#      - ./redis:/data

#  av:
#    image: mkodockx/docker-clamav:alpine
#    container_name: nextcloud-clamav
#    restart: unless-stopped


PUID et GUID sont à modifier suivant les ID de votre utilisateur ( voir pré-requis )
Ici nextcloud utilise le port par défaut, soit 443 en HTTPS. Si vous souhaitez modifier le port pour x raisons, choisissez un port encore 1000 et 65000 pour remplacer le 1er 443 de la ligne - 443:443. Exemple pour choisir 9000 : - 9000:443
A modifier également : MYSQL_ROOT_PASSWORD et MYSQL_PASSWORD, choisissez des mots de passe fort.

On quitte le fichier Ctrl+X et on valide les modifications.



2.2/ Création des conteneurs

Toujours dans notre dossier nextcloud avec notre fichier docker-compose.yml, lancer la commande suivante pour lancer la création des conteneurs :
Code:
docker compose up -d

Une fois fini, la commande renvoi "done" :
YYMmoAW.png


Cela peut prendre quelques minutes avant que l'interface de Nextcloud soit disponible !


3/ Configuration de Nextcloud
3.1/ Accès a l'interface de Nextcloud

Si vous avez laisser le port par défaut, alors l’accès a Nextcloud se fait via l'adresse https://adresse-ip-locale, par exemple si votre machine a l'adresse 192.168.1.210 alors l’accès se fait a https://192.168.1.210, si vous avez modifier le port, alors il faut le préciser, par exemple pour le port 9000, l'adresse sera https://192.168.1.210:9000

Il est possible de rencontrer ce genre d'avertissement, il est normal, car nous sommes en HTTPS, mais il n'y a pas de certificat de généré. il vous suffit "d'accepter le risque" pour continuer.
5AhXg01.png


3.2/ Configuration
A la 1ere connexion à l'interface il vous sera demander de choisir un pseudo et un mot de passe, cela sera le compte administrateur ! Choisissez un mot de passe fort, et éviter les pseudo comme "admin, root, ... ).

Pour la base de donnée on choisi "Mariadb", puis dans :
"Utilisateur de la base" on indique : nextcloud
"Mot de passe" : par defaut : ABCDEF, mais vous l'avez normalement modifié !
"Nom de la base de donnée" : nextcloud
"Hôte" : mariadb:3306

vzwFcIe.png


Je vous conseil de décocher " installer les applications recommandé ", Nextcloud vous proposera par la suite d'installer ces applications et vous permettra de choisir celle que vous souhaitez, ou non.

Puis on valide en cliquant sur Terminer l'installation

Une fois l'installation fini, on se retrouve sur la page de connexion ! On se connecte et nous voila dans notre Nextcloud :D

Note : En cas d'erreur 504 pendant la fin de l’installation patienter quelques minutes le temps que le serveur finisse la configuration du cloud.




4/ Mise en place de Redis ( Optionnel )
4.1/ Modification de la configuration de Nextcloud


Modifier le fichier de configuration de Nextcloud :

Code:
nano config/www/nextcloud/config/config.php

Rajouter les lignes suivantes :

PHP:
  'filelocking.enabled' => true,
  'memcache.locking' => '\\OC\\Memcache\\Redis',
  'memcache.distributed' => '\\OC\\Memcache\\Redis',
  'memcache.local' => '\\OC\\Memcache\\APCu',
  'redis' => 
  array (
    'host' => 'cache',
    'port' => 6379,
    'password' => 'MOT_DE_PASSE_BALEZE',
  ),

Remplacer MOT_DE_PASSE_BALEZE, par un mot de passe de votre choix.

Sauvegarder les modifications ( Ctrl+X et on valide les modifications )


4.2/ Modification de la configuration de PHP

Nous allons aussi modifier

Code:
nano config/php/php-local.ini

Sur une nouvelle ligne, rajouter simplement :

Code:
apc.enable_cli = 1

4.3/ Activation & Création du conteneur


Nous allons maintenant créer le conteneur Redis, pour cela modifions notre compose :

Code:
nano docker-compose.yml

et décommenter cette partie : ( Cela signifie supprimer les # présents sur chaque ligne )

Code:
#  cache:
#    container_name: nextcloud-redis
#    image: redis:7-alpine
#    restart: unless-stopped
#    command: redis-server --save 20 1 --loglevel warning --requirepass MOT_DE_PASSE_BALEZE
#    volumes:
#      - ./redis:/data

Remplacer MOT_DE_PASSE_BALEZE, par le mot de passe que vous avez choisi à l'étape 4.1

Dans la partie nextcloud au début, il faut également décommenter ceci :
Code:
#      - cache

Sauvegarder les modifications ( Ctrl+X et on valide les modifications )

Puis on lance la re-création des conteneurs :
Code:
docker compose up -d




5/ Mise en place de l'antivirus ( Optionnel )
5.1 Activation & Création du conteneur
Nous allons maintenant créer le conteneur ClamAV, pour cela modifions notre compose :

Code:
nano docker-compose.yml

et décommenter cette partie : ( Cela signifie supprimer les # présents sur chaque ligne )

Code:
#  av:
#    image: mkodockx/docker-clamav:alpine
#    container_name: nextcloud-clamav
#    restart: unless-stopped

On quitte le fichier Ctrl+X et on valide les modifications.

Maintenant nous allons re-lancer la création des conteneurs afin de prendre en compte les modifications, pour cela, on execute la commande :

docker compose up -d


5.2 Configuration dans Nextcloud

Dans votre Nextcloud, rendez-vous dans les applications, télécharger et activer : Antivirus for files
f2dfVzy.png


Maintenant, dans Paramètres > Sécurité, ce panneau de configuration est disponible :
hXBnAYe.png

Indiquer les mêmes paramètres que sur l'image, soit :
Mode : Processus ClamAV
Hôté : av
Port : 3310
Taille du flux : 26214400
File size limit : -1
et Journaux seulement pour l'action en cas de fichiers infectés durant le scan en arrière plan

Cliquer sur Enregistrer pour valider, si tout est correct, alors "Enregistré" apparait en vers a coté.
enTkbAh.png



5.3 Essai de fonctionnement

Si vous souhaitez un fichier de test afin de voir si votre antivirus fonctionne correctement, vous pouvez trouver un malware de test ici : https://www.eicar.org/?page_id=3950

Si vous placez ce fichier dans un dossier synchroniser par Nextcloud, alors celui-ci refusera de l'uploader et vous aurez ce type de message dans l'onglet de Journalisation de Nextcloud :
2w9eIpk.png



2023-06-19 - Réorganisation du tuto, remise en page, rajout d'explication sur la mise en place d'un conteneur redis dédié
2023-06-03 - MAJ du compose, changement des liens pour les images, tag latest, suppression du point 2.2 qui n'est plus nécessaire.
2021-12-03 - MAJ pour expliquer la mise en place d'un antivirus ( ClamAV )
2021-10-24 - Création du sommaire, correction dépot dans le docker-compose, mise en page
 
Dernière édition:
  • J'aime
Réactions: Minuit
Hello,
Pour information, si certains comme moi utilisent l'app preview-generator, cela fait quelques jours que j'ai eu une erreur du type
PHP Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 36864 bytes) in /config/www/nextcloud/lib/private/legacy/OC_Image.php on line 511
Pour info, cette app permet de pré-générer les preview/vignettes (thumbnails) des photos dans différents formats, ça permet de gagner un peu de temps à l'affichage des photos. Par contre, si vous avez un paquet de photos c'est assez "espacovore".
Bref, après avoir fait une génération initiale, il est conseillé de mettre en place un CRON qui tournera tous les jours (ou selon votre convenance) afin de générer les vignettes des nouvelles photos.
Or c'est ce cron qui me remontait l'erreur ci-dessus.

Pour remédier à ça, il convient d'aller modifier le fichier 'php-local.ini' qui se trouve dans votre volume docker 'config' attribué à nextcloud, sous le dossier php.
Exemple chez moi (en omv) : /srv/dev-disk-by-label-super_hdd/Docker/configs/nextcloud/php/php-local.ini
Vous ajoutez donc dans ce fichier apc.enable_cli=1 et le tour est joué!

Pour les impatients:
cd /srv/dev-disk-by-label-super_hdd/Docker/configs/nextcloud/php/
nano php-local.ini
apc.enable_cli=1 Ajouter cette ligne à la fin du fichier puis CTRL+X pour quitter et Y ou O pour sauvegarder (selon si votre système est en anglais ou français)
docker restart Nextcloud (remplacer Nextcloud par le nom de votre container nextcloud si vous ne l'avez pas appelé ainsi)

Check!
 
  • J'aime
Réactions: EVO
Hello @EVOTk
Peut-être as-tu des infos là-dessus et cela pourrait intéresser d'autres personnes...
Sais-tu comment mettre en place une whitelist avec l'antivirus ClamAV intégré ? J'ai cherché un peu partout sans succès.
 
Sais-tu comment mettre en place une whitelist avec l'antivirus ClamAV intégré ? J'ai cherché un peu partout sans succès.
Salut,

Dans le dossier /etc/clamav tu trouvera clamd.conf et freshclam.conf

Il te faut les mapper sur ton hote, et les modifier.

Je sais que par exemple, c'est dans clamd.conf qu'on désactive la surveillance PUA ( DetectPUA ).
Je ne connais pas asser ClamAV, mais c'est peut etre aussi dans ses fichiers de configuration que ce fait des Whitelist, en tout cas, c'est pas ici que je regarderai en 1er.
 
Bonjour et merci pour ce tuto.
J'essaye désespérément d'installer Nextcloud sur mon syno, via Docker et Portainer, il y a pas mal de tutos (assez ancien et pas avec DSM 7 par exemple)
J'ai l'impression que je fais tout bien, installation et config et mariadb, nextcloud, mais dès que j'arrive sur la page de config initiale de Nextcloud (avec tous les identifiants, base de données etc...) j'ai toujours un soucis, avec, selon les tutos, soit un problème de time out, soit de connexion refusée. à chaque fois, je recommence tout et rebelotte...
J'ai l'impression que c'est une histoire de bridge qui coince...

Désolé si je ne pose pas la question au bon endroit, dites moi et je crée un sujet.
 
Salut,
Pourrai tu nous en dire plus ?
N'hésite pas a faire des imprim écran,...
En fait, je suis ce tuto principalement: mariushosting.com/synology-how-to-install-nextcloud-using-docker/ (j'espère qu'on peut mettre un lien externe)
Si je suis à la lettre le tuto, je me retrouve avec ça:
Capture d’écran 2022-03-22 à 12.37.54.png

J'ai peur que dans le fichier, ça bloque ici:

Capture d’écran 2022-03-22 à 12.41.52.png

On est bien d'accord que dans les 3 champs en bleu on met ce que l'on veut? Pas besoin de bidouiller dans phpmyadmin? ça créé tout seul la base de données avec ces identifiants là?
Et le MYSQL_ROOT_PASSWORD, que met-on?

J'ai bien changé mon PUID et PGID et la TZ.

Si vous avez d'autres tutos plus explicite ou explications, ou autre, je suis preneur!

Merci.
 
Hello.
alors en tuto tu as le tuto du présent sujet qui te permettra de faire les choses correctement.
Sinon si tu n'es pas allergique à l'anglais: tuto omv nextcloud
Si tu te prends des "connection refused", penses à vérifier tes réglages pare feu, que tu puisses bien interroger sur le port de la base de données.

Tel que je lis ta config de container, le MYSQL_ROOT_PASSWORD serait le mot de passe de l'administrateur de ton instance mysql.
Le MYSQL_PASSWORD correspondrait au mot de passe du user que tu as attribué à nextcloud (donc ici nextclouduser)
Le MYSQL_DATABASE correspond au nom de la base de données dédiée à nextcloud.
Le MYSQL_USER correspond au user dédié à nextcloud.

EDIT: mes deux paragraphes suivant concernant la sécurité sont à relativiser en fonction du niveau de sécurité que tu veux te donner, et aussi si ton instance nextcloud est exposée à l'exérieur ou uniquement à ton réseau local.

Par contre ce qui me chagrine dans ce type de config, c'est que tu balances en toutes lettres ton mot de passe administrateur MYSQL directement dans les variables d'un container. C'est un peu dégueu je trouve point de vue sécurité.
Je présume que le container en a besoin pour se connecter à l'instance MYSQL et le user nextcloud et la base de données correspondante à nextcloud en utilisant les trois champs MYSQL_PASSWORD, MYSQL_DATABASE, MYSQL_USER que tu as précisé en variable d'environnement.

Il vaut mieux garder son mot de passe root (administrateur) pour soi, créer soi même la base dédiée à nextcloud, créer le user dédié à nextcloud, et ne communiquer au container nextcloud que ce qui le concerne directement (donc le host, la db, le user, le password, le port).
 
Dernière édition:
Merci Nincha

Bon, j'ai tout repris de zéro.

Je suis parti du tutoriel ci-dessus. J'ai changé toutes les adresses puisque je suis sur un Syno.
J'ai créé mon .yml, modifié toutes les variables GUID, PUID, mots de passe etc... J'ai aussi modifié le paquet nextcloud, pour prendre le latest

J'ai eu une erreur de port, j'ai du changer le port par défaut et mettre 8082:80 (comme je l'avais vu sur un autre tutoriel)
J'ai posté en PJ mon résultat de terminal.

J'ai l'impression que tout est bon, mais quand je veux accéder à ma page en local par exemple 192.168.1.1:8082. Je tombe sur la page webstation....
Pourtant, tous les fichiers (nextloud et mariadb) ont l'air d'être à leur place dans le dossier docker, et avec tous les fichiers de config des uns et des autres...
 

Pièces jointes

  • Résultat de Terminal.txt
    1.9 KB · Affichages: 5
On est bien d'accord que dans les 3 champs en bleu on met ce que l'on veut? Pas besoin de bidouiller dans phpmyadmin? ça créé tout seul la base de données avec ces identifiants là?
Et le MYSQL_ROOT_PASSWORD, que met-on?
Dans les 4 champs c'est a toi de choisir.

Par contre ce qui me chagrine dans ce type de config, c'est que tu balances en toutes lettres ton mot de passe administrateur MYSQL directement dans les variables d'un container. C'est un peu dégueu je trouve point de vue sécurité.
C'est le principe de Docker, il est possible de les stocker dans un fichier .env accessible que a root également mais dans tout els cas, ils seront visiblement dans les variables du conteneur, il est aussi possible d'utiliser les docker secret mais c'est hors de mes compétences ;)

Il vaut mieux garder son mot de passe root (administrateur) pour soi, créer soi même la base dédiée à nextcloud, créer le user dédié à nextcloud, et ne communiquer au container nextcloud que ce qui le concerne directement (donc le host, la db, le user, le password, le port).
La base de donnée est un conteneur créer UNIQUEMENT pour la base de donnée mysql de nextcloud. Au final il n'y a pas grand différence entre l'utilisateur root de mariadb et l'user puisque la base de données mariadb, ne contient que une seule base de donnée, celle de nextcloud.

J'ai eu une erreur de port, j'ai du changer le port par défaut et mettre 8082:80 (comme je l'avais vu sur un autre tutoriel)
Dans ton logs, je vois surtout un erreur sur le port 443
Attention avec le chemin d'acces , port 80 = http , port 443 = https
Si tu modifie 80 en 8082 cela reste du http://. Si tu modifie 443 en 8082 cela reste du https://
Pourrai tu communiquer ton .yml ? ( tu enleve les mots de passe bien sur )
 
La base de donnée est un conteneur créer UNIQUEMENT pour la base de donnée mysql de nextcloud. Au final il n'y a pas grand différence entre l'utilisateur root de mariadb et l'user puisque la base de données mariadb, ne contient que une seule base de donnée, celle de nextcloud.
J'ai pas voulu remettre en cause ton tuto, je voulais juste donner mon avis sur la sécurité.
Certainement la déformation professionnelle aussi, où les bases de données sont requêtées par de multiples utilisateurs/produits, donc le mot de passe root y reste le graal inaccessible?
 
  • J'aime
Réactions: EVO
Merci pour la réponse et de votre aide.

Alors j'ai changé les ports, alors par contre, j'ai tout un tas de lignes (pour mariadb et nextcloud qui s'affichent) Et pour nextcloud, ça ne se termine pas. Si je teste l'adresse IP et le port pour lancer la config, rien ne se passe sous Brave, je suis obligé de passer par Safari.

Mais là, j'ai l'erreur en PJ.
 

Pièces jointes

  • Résultat de Terminal.txt
    10.5 KB · Affichages: 3
  • docker-compose (1).yml
    1 KB · Affichages: 6
  • Capture d’écran 2022-03-22 à 18.52.39.png
    Capture d’écran 2022-03-22 à 18.52.39.png
    111.1 KB · Affichages: 2
J'ai pas voulu remettre en cause ton tuto, je voulais juste donner mon avis sur la sécurité.
Certainement la déformation professionnelle aussi, où les bases de données sont requêtées par de multiples utilisateurs/produits, donc le mot de passe root y reste le graal inaccessible?
Je ne l'ai pas mal pris du tout, pas de soucis.


Alors j'ai changé les ports, alors par contre, j'ai tout un tas de lignes (pour mariadb et nextcloud qui s'affichent) Et pour nextcloud, ça ne se termine pas. Si je teste l'adresse IP et le port pour lancer la config, rien ne se passe sous Brave, je suis obligé de passer par Safari.
Alors je vois que tu as changé le port HTTPS , attention a bien préciser https:// dans l'adresse d'acces + 8082

N'a tu pas essayer la version php8 avant ? Car la je vois que tu est en latest.
Si oui alors supprime tes conteneurs , mais vide également le dossier /config !
 
Alors je vois que tu as changé le port HTTPS , attention a bien préciser https:// dans l'adresse d'acces + 8082

N'a tu pas essayer la version php8 avant ? Car la je vois que tu est en latest.
Si oui alors supprime tes conteneurs , mais vide également le dossier /config !
Oui, j'avais tout effacé pour repartir sur du propre. Et j'ai bien lancé le HTTPS, mais j'arrive avec l'erreur 'Name does not resolve'
 
As tu vidé le cache de ton navigateur entre chaque test ?

Jette aussi un oeil à ton fichier de config.php qui se trouve dans ton volume de config (celui précisé dans les volumes de ton docker-compose).
Chez moi il est donc dans /chemin/vers/mon/volume_config_nextcloud/www/nextcloud/config/config.php

Verifie dans l'ensemble que les différentes informations correspondent à ce que tu as paramétré (notamment 'trusted_domains')
Je ne l'ai pas mal pris du tout, pas de soucis.
:love:
 
Dernière édition:
Bonjour, je vous reviens ce matin.

J'ai enfin réussi. J'ai remis mes identifiants et ça a fonctionné sans que je ne touche rien...
Par contre, en HTTPS, je ne peux me connecter qu'avec Safari, Brave me bloque...
Hier soir, j'ai donc réussi à faire la config de base (connexion avec les identifiants de base de données etc..., l'installation des logiciels de base), mais c'était très lent, et j'ai eu une erreur 504... J'ai redémarré le Syno et ça a fonctionné...

Donc je suis en découverte.

Merci pour vos réponses et conseils précieux. (y)
 
  • J'aime
Réactions: EVO