Bonjour,
J'aimerais monter un cloud privé grâce à Nextcloud sous Docker. J'aimerais l'utiliser avec Redis et une BDD MariaDB (sauf s'il y a mieux je ne suis pas fermé), j'ai regardé la doc officielle de Nextcloud mais j'ai du mal à comprendre la commande rajoutée sur le container MariaDB :
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW

Je ne sais pas si j'ai bien compris mais ça parle d'une utilité quand il y a beaucoup de requêtes, mais si quelqu'un a une explication je suis preneur 😉

Au passage si quelqu'un l'a déjà mis en place et qu'il a un docker-compose en exemple je suis preneur 🙂 merci !

Salut,

https://www.postgresql.org/docs/9.5/transaction-iso.html

Read Committed is the default isolation level in PostgreSQL. When a transaction uses this isolation level, a SELECT query (without a FOR UPDATE/SHARE clause) sees only data committed before the query began; it never sees either uncommitted data or changes committed during query execution by concurrent transactions

Ton interprétation est plutôt bonne en effet.

Merci 😉
Du coup est-ce que tu penses que c'est à utiliser si on a 4 ou 5 utilisateurs max et quelques fichiers modifiés par jour ? Je ne vois pas l'impact de l'utiliser ou non en fait.
Et tu penses que c'est à utiliser systématiquement quand on utilise MariaDB ?
Merci.

Dans ce contexte je doute que ce soit utile. Faudrait vraiment que plusieurs personnes travaillent sur le même fichier en même temps. Si c'est dans un cadre pro, pour du dév par exemple, alors autant utiliser un outil de versionning type Gitlab lui aussi disponible en Docker.

C'est pas forcément utile en mono-utilisateur, mais ça coûte pas plus cher à la mise en place.
Personnellement je n'ai pas de redis en plus (et j'avoue que je suis sceptique sur l'idée en tant que telle s'il y a déjà un SGBD derrière et que le système n'est pas très sollicité).

Tu veux le monter comment ?
Sur mon compose il est derrière un reverse-proxy nginx avec son certificat let's encrypt (et il y a des petites subtilités en configuration de base pour éviter des soucis de http vs https)

@Aerya Merci, tu parles de l'utilisation du READ-COMMITTED ? Ou du Redis ? C'est pour une utilisation personnelle, j'aurais peut-être 3 ou 4 comptes maxi sur mon Nextcloud et chacun aura son stockage, je ne pense pas pour le moment faire d'utilisation de fichiers inter-utilisateurs. En tout cas ce n'est pas prévu.

@Tintwo Merci aussi. C'est un peu la question que je me posais, si ça ne coûte pas plus cher pourquoi ne pas l'avoir mis par défaut ? Il doit bien y avoir du pour et du contre, sinon ce serait pas défaut ? C'est juste pour ma compréhension 😉
Effectivement pour Redis ce n'est peut-être pas utile à faible charge mais c'est dans les recommandations Nextcloud et ça ne coûte pas trop cher non plus à la mise en place, à part peut-être de la RAM, donc je me dis autant le mettre. Tu ne pense pas ?
Pour ma part il sera derrière un reverse Traefik (qui gère mes certificats LE), tout est déjà quasi prêt il me reste juste cette histoire de BDD à définir 🙂

Merci !

Je rejoins @Tintwo, ni Redis ni le READ-COMMITED ne seront utiles dans ton cas d'utilisation. Ça ne peut pas faire de mal mais ça fera un peu plus travailler le serveur et SQL, j'ai pour principe de ne pas surcharger inutilement une machine.

Merci pour les infos et les avis 😉
Donc en gros dans mon cas c'est inutile, même si dans le futur j'ai une croissance disons du double donc une dizaine d'utilisateurs ? Au pire je peux l'activer plus tard si besoin ou une fois la BDD en place il n'est plus possible de changer, que ce soit pour MariaDB ou Redis ?
Mais si je veux quand même l'activer, c'est un petit plus mais une surchage en ressources. C'est noté !

Merci je vais déjà tester ça alors, je ne vais pas activer les options de MariaDB et sans doute pas activer Redis non plus. Même chose pour Redis, ça peut s'activer et se désactiver sans forcément recréer la DB ? Merci !

Merci, oui tu as raison, je l'ai deja utilisé à plusieurs reprises mais c'est la mise en application sur Docker qui me faisait hésiter. Mais après tout ça ne change pas le fonctionnement de l'appli, Docker ou non 😅
Bon il me reste à tester tout ça et à regarder ce qu'il se fait en sauvegarde de BDD sur Docker

4 jours plus tard

Ta trouvé NicCo ?

Sinon je m'y prendrai comme ça :

mkdir -p /srv/docker.app/nextcloud
cd /srv/docker.app/nextcloud

nano db.env

MYSQL_PASSWORD=supersecurepassword
MYSQL_DATABASE=nextcloud
MYSQL_USER=nextcloud

nano docker-compose.yml

version: '3'

services:
  db:
    image: mariadb
    command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
    restart: always
    volumes:
      - db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=supersecuremysqlrootpassworddifferentthanmysqlpassword
    env_file:
      - db.env

  redis:
    image: redis
    restart: always

  app:
    build: ./app
    restart: always
    ports:
      - 127.0.0.1:5678:80
    volumes:
      - nextcloud:/var/www/html
    environment:
      - MYSQL_HOST=db
    env_file:
      - db.env
    depends_on:
      - db
      - redis

  cron:
    build: ./app
    restart: always
    volumes:
      - nextcloud:/var/www/html
    entrypoint: /cron.sh
    depends_on:
      - db
      - redis

volumes:
  db:
  nextcloud:

mkdir app ; cd app ; nano Dockerfile

FROM nextcloud:apache

COPY redis.config.php /usr/src/nextcloud/config/redis.config.php

nano redis.config.php

<?php
$CONFIG = array (
  'memcache.locking' => '\OC\Memcache\Redis',
  'redis' => array(
    'host' => 'redis',
    'port' => 6379,
  ),
);

cd /srv/docker.app/nextcloud
docker-compose up -d

Et pour finir, le vhost nginx :

server {
    server_name nextcloud.domain.tld;
	
    root /var/www/html;
    index index.html;

    location / {
        proxy_pass http://localhost:5678/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";
        client_max_body_size 0;

    access_log /var/log/nginx/nextcloud-access.log combined;
    error_log /var/log/nginx/nextcloud-error.log error;
    }

    location /.well-known/carddav {
      return 301 $scheme://$host/remote.php/dav;
    }

    location /.well-known/caldav {
      return 301 $scheme://$host/remote.php/dav;
    }

    listen 443 ssl http2;
	
    ssl on;
    ssl_dhparam /etc/nginx/ssl/dhparams.pem;
    ssl_certificate /etc/nginx/ssl/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/privkey.pem;
}

server {
    if ($host = nextcloud.domain.tld) {
        return 301 https://$host$request_uri;
    }

        listen 80;
        listen [::]:80;

        server_name nextcloud.domain.tld;
    return 404;
}

nginx -t -> si tout ok -> /etc/init.d/nginx restart

Pour update nextcloud :
/usr/local/bin/docker-compose stop ; /usr/local/bin/docker-compose rm --force ; /usr/local/bin/docker-compose pull ; /usr/local/bin/docker-compose build --pull ; /usr/local/bin/docker-compose up -d

Merci NOT-FOUND 😉 j'ai finalement réussi à monter quelque chose avec Traefik, MariaDB, Redis et Nextcloud. J'en ai profité pour utiliser les secrets aussi, et pour Redis je suis passé par la variable d'environnement REDIS_HOST=xxx.xxx.xxx.xxx
Je vais finir de tester mais ça à l'air correct, il faudrait aussi que je teste si je peux utiliser Authelia en plus de l'authentification Nextcloud, mais je ne sais pas si ce sera compatible avec les applis multiplateformes Nextcloud

Répondre…