Docker - nextcloud oder linuxserver/nextcloud

Alter Thread Feb. 21: SWAG - Nextcloud mit Docker und Container von linuxserver.io - Nextcloud - MariaDB - SWAG - #3 by nc-kay
Alter Thread Feb. 22: [gelöst] Nextcloud mit Docker - hub.docker.com versus linuxserver.io

https://hub.docker.com/_/nextcloud

docker-compose - MYSQL_PASSWORD ist zu vergeben.

version: '2'

volumes:
  nextcloud:
  db:

services:
  db:
    image: mariadb:10.6
    restart: always
    command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW
    volumes:
      - db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=
      - MYSQL_PASSWORD=
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud

  app:
    image: nextcloud
    restart: always
    ports:
      - 8080:80
    links:
      - db
    volumes:
      - nextcloud:/var/www/html
    environment:
      - MYSQL_PASSWORD=
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_HOST=db

docker-compose - yaml funktioniert

version: '2'

services:
  db:
    image: mariadb:10.5
    restart: always
    command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
    volumes:
      - /var/lib/docker/volumes/Nextcloud_Database:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=password
      - MYSQL_PASSWORD=password
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud

  app:
    image: nextcloud
    restart: always
    ports:
      - 8080:80
    links:
      - db
    volumes:
      - /var/lib/docker/volumes/Nextcloud_Application:/var/www/html
    environment:
      - MYSQL_PASSWORD=password
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_HOST=db

oder

:hot_face: :hot_face: :hot_face: linuxserver.io :hot_face: :hot_face: :hot_face:

https://hub.docker.com/r/linuxserver/nextcloud
https://github.com/linuxserver/docker-nextcloud/blob/master/Dockerfile

https://docs.linuxserver.io/images/docker-nextcloud

docker-compose (recommended…)

---
version: "2.1"
services:
  nextcloud:
    image: lscr.io/linuxserver/nextcloud:latest
    container_name: nextcloud
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Etc/UTC
    volumes:
      - /path/to/appdata:/config
      - /path/to/data:/data
    ports:
      - 443:443
    restart: unless-stopped

Hallo Forum und Docker-User,

welche Vorteile hat linuxserver/nextcloud gegenüber nextcloud?

https://hub.docker.com/r/linuxserver/swag

Kann ich swag auch mit nextcloud benutzen?

https://www.reddit.com/r/selfhosted/comments/g7xqux/whats_the_difference_between_the_official/?rdt=55657

@wwe
Hast Du, als Docker-Nextcloud-LTS-User Hinweise für mich?

MfG
nc-kay

hi @nc-kay ich bin mit dem “standard” docker zufrieden. Ich kann das gut verwalten, das läuft und ich habe backup/restore/logs im Griff.

linuxserver hat ein eigenes Ökosystem mit vielen Applikatione, die sie nach ihrer Methodik konfigurieren. Sie sind schneller/pragmatischer als die “normale” Docker Variante… z.B. hatten sie schon lange das PUID/PGID implementiert… “standard” hat erst neulich nachgezogen. Gleichzeitig hat linuxserver zuminsdest früher “Todsünden” begangen indem sie die Applikation im Container aktualisiert haben statt ein neues Image zu bauen. ich kann nicht sagen ob es heute noch stimmt weil ich das nicht verfolge.

Es gibt unzählige Ansätze Nextcloud (und andere Applikationen) zu betreiben und ich sie existieren weil Menschen ein bestimmtes Bedürfnis haben. Es ist eben unterschiedlich ob du ein RasPi, Desktop, NAS für die Familie oder ein HA-System mit Tausenden von Benutzern im Unternehmen betreibst. Je nach Umgebung kann das eine oder andere besser sein.

Ich finde jeder sollte eine für sich passende Technologie aussuchen und diese länger verfolgen weil im Zweifel der Unterschied zwischen “standard” Docker und linuxserver oder Docker und podman weniger wichtig ist als dass der Admin in der Lage ist das System korrekt zu administrieren, die logs zu finden und die Werkzeuge kennt mit der Applikation zu interagieren.

1 Like

Hast Du evtl. irgendwo eine Anleitung verfasst oder kannst eine Empfehlen?
Nutzt Du evtl. SWAG, Traefik, CrowdSec?

ich habe viele Anleitungen verwendet aber keine hat mich überzeugt. meistens endet das Ding dort wo es interessant wird - Backup restore monitoring ist nie drin! ich habe auch angefangen ein “Buch” zu schreiben das anders wäre als die gängigen Tutorials mit Erklärungen warum ich das so mache und nicht anders… statt einfach zu sagen klicke hier und dort und du bist fertig! das Ding ist aber nie “fertig genug” gewesen damit ich das veröffentlichen kann…

1 Like

Wäre es dann nicht mal an der Zeit dein akuelles Setup zu pulizieren?

Wie sehen deine yaml docker-compose Dateien für die Container aus?

haha das ist genau das Problem… ich habe ein über mehrere compose files verteiltes Setup mit unterschiedlichen Diensten traefik, 2 Nextclouds, CODE, restic backup. In den compose files sind zT domains und credencials drin. Das verständlich runterzubrechen und auch einfach verständlich zu machen braucht ein Paar Tage und gewisse Motivation - die ich bisher nicht aufgebracht habe und kurzfristig wohl auch nicht aufbringen werde. Ich habe mein Setup schon mal recht detailliert beschrieben… im Moment sieht es nicht viel anders aus…

Das ist was ich aktuell im dev habe - mittlereweile würde ich einiges anders machen… könnte sein das einige Parameter nicht notwendig sind… non-root UID/PID habe angefangen aber noch nicht abgeschlossen. Aber wenn es dir hilft

cat compose.yml

version: "3.3"

services:
  dev-nextcloud-db:
    image: mariadb:10.5
    container_name: dev-nextcloud-db
    command: --transaction-isolation=READ-COMMITTED --log-bin=ROW
    restart: unless-stopped
    volumes:
      #- /etc/localtime:/etc/localtime:ro
      #- /etc/timezone:/etc/timezone:ro
      - ./db:/var/lib/mysql
      - ./db-config/my.cnf:/etc/mysql/conf.d/my.cnf
      - ./db-backup:/mnt/db-backup
    env_file:
      - ./db.env

  dev-nextcloud-redis:
    image: redis:alpine
    container_name: dev-nextcloud-redis
    command: redis-server --requirepass ${REDIS_HOST_PASSWORD}
    env_file:
      - ./redis.env
    restart: unless-stopped

  dev-nextcloud-app:
    image: nextcloud:${NEXTCLOUD_VERSION}
    #build:
    #  context: .
    #  dockerfile: ./nextcloud_with_smb
    container_name: dev-nextcloud-app
    restart: unless-stopped
    # untested with cron and push
    # user: 1004:1004
    depends_on:
      - dev-nextcloud-db
      - dev-nextcloud-redis
    env_file:
      - ./nextcloud.env
      - ./db.env
    volumes:
      - ./app:/var/www/html
      - ./files:/var/www/html/data
      - ./config:/var/www/html/config
      # https://github.com/nextcloud/docker/issues/182
      - ./php/conf.d/custom.ini:/usr/local/etc/php/conf.d/custom.ini
      - ./remoteip.conf:/etc/apache2/conf-enabled/remoteip.conf:ro
      - ./redis-session.ini:/usr/local/etc/php/conf.d/redis-session.ini
    networks:
      proxy:
      default:
    labels:
      - traefik.enable=true
      - traefik.http.routers.dev-nextcloud.entrypoints=web-secure
      - traefik.http.routers.dev-nextcloud.priority=1                     # for notify_push
      - traefik.http.routers.dev-nextcloud.rule=Host(`${NEXTCLOUD_FQDN}`) #Domain anpassen
      - traefik.http.routers.dev-nextcloud.tls=true
      - traefik.http.routers.dev-nextcloud.tls.certresolver=letsencryptresolver
      - traefik.http.routers.dev-nextcloud.middlewares=secHeaders4@file,nextcloud-redirect@file
      - traefik.http.services.dev-nextcloud.loadbalancer.server.port=80
      - traefik.docker.network=proxy

  dev-nextcloud-cron:
    image: nextcloud:${NEXTCLOUD_VERSION}
    container_name: dev-nextcloud-cron
    restart: unless-stopped
    env_file:
      - ./nextcloud.env
      - ./db.env
    volumes:
      - ./app:/var/www/html
      - ./files:/var/www/html/data
      - ./config:/var/www/html/config
    entrypoint: /cron.sh
    depends_on:
      - dev-nextcloud-app

  dev-nextcloud-notify_push:
    image: nextcloud:${NEXTCLOUD_VERSION}
    container_name: dev-nextcloud-notify_push
    restart: unless-stopped
    environment:
      - PORT=7867
      - NEXTCLOUD_URL=http://dev-nextcloud-app # don't go through the proxy to contact the nextcloud server
    entrypoint: /var/www/html/custom_apps/notify_push/bin/x86_64/notify_push /var/www/html/config/config.php
    depends_on:
      - dev-nextcloud-db
      - dev-nextcloud-redis
      - dev-nextcloud-app
    volumes:
      - ./app:/var/www/html
      - ./config:/var/www/html/config:ro
    networks:
      proxy:
      default:
    labels:
      - traefik.enable=true
      - traefik.http.routers.dev-nextcloud_push.entryPoints=web-secure
      - traefik.http.routers.dev-nextcloud_push.priority=2
      - traefik.http.routers.dev-nextcloud_push.middlewares=nextcloud_strip_push
      - traefik.http.routers.dev-nextcloud_push.tls.certresolver=letsencryptresolver
      # necessary for the notify_push app to work:
      - traefik.http.routers.dev-nextcloud_push.rule=Host(`${NEXTCLOUD_FQDN}`) && PathPrefix(`/push`)
      - traefik.http.routers.dev-nextcloud_push.middlewares=nextcloud_striprefix_push@file
      - traefik.http.services.dev-nextcloud_push.loadbalancer.server.port=7867
      - traefik.docker.network=proxy

networks:
  proxy:
    external: true

cat .env

 cat ../dev-nextcloud/.env
# this is the ENV file for docker-compose
# nextcloud FQDN - public DNS (for traefik labels)
NEXTCLOUD_FQDN=dev-nc.mydomain.tld
NEXTCLOUD_VERSION=27

cat .nextcloud.env

# nextcloud FQDN - public DNS
NEXTCLOUD_FQDN=dev-nc.mydomain.tld
NEXTCLOUD_TRUSTED_DOMAINS=dev-nc.mydomain.tld
NEXTCLOUD_ADMIN_USER=root
NEXTCLOUD_ADMIN_PASSWORD=**sensitive value**
# SMTP config
SMTP_HOST=**sensitive value**
SMTP_SECURE=ssl
SMTP_PORT=465
SMTP_NAME=**sensitive value**
SMTP_PASSWORD=**sensitive value**
# reverse proxy config
OVERWRITEHOST=dev-nc.mydomain.tld
OVERWRITEPROTOCOL=https
overwrite.cli.url=https://dev-nc.mydomain.tld
# from NC25 ? notify_push requires this setting!
OVERWRITECLIURL=https://dev-nc.mydomain.tld
COLLABORA_FQDN=collabora.mydomain.tld
# redis
#REDIS_URL=redis://dev-nextcloud-redis
REDIS_HOST=dev-nextcloud-redis
REDIS_HOST_PASSWORD=**sensitive value**
#TURN server
COTURN_SECRET=**sensitive value**
# php
PHP_MEMORY_LIMIT=768M
PHP_UPLOAD_LIMIT=1G

cat db.env

# maria DB container
MYSQL_HOST=dev-nextcloud-db
MYSQL_DATABASE=nextcloud
MYSQL_USER=nextcloud
MYSQL_PASSWORD=**sensitive value**
1 Like

Das muss noch üben, so weit bin ich noch nicht.

Für meinen Kenntnisstand ist mir dein System “noch” zu komplex.

Wenn du konkrete Fragen hast kannst diese gern stellen. Aber mein Rat bleibt gleich wie schon 2022 - suche dir eine Technologie aus und arbeite dich rein. Alle Sachen Docker, Podman, Snap, Native haben ihre Vor- und Nachteile. Das perfekte System ist eins das du beherrschst.

die o.g. Config ist eigentlich nicht komplex - einzig die Variablen sind in extra files ausgelagert… der Rest entspricht weitgehend “examples” des “offiziellen” Docker image.

1 Like

Hallo, meine funktionierend yaml Datei:

version: '2'

services:
  db:
    image: mariadb:10.6
    restart: always
    command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
    volumes:
      - /var/lib/docker/volumes/Nextcloud_Database:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=password
      - MYSQL_PASSWORD=password
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud

  app:
    image: nextcloud
    restart: always
    ports:
      - 8080:80
    links:
      - db
    volumes:
      - /var/lib/docker/volumes/Nextcloud_Application:/var/www/html
    environment:
      - MYSQL_PASSWORD=password
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_HOST=db

Basisinformationen: Host Debian 11, Nextcloud27.1.1, das System ist aus dem Heimnetz zugänglich.

Fragen die für mich zu klären sind:

  • Wie mache ich Updates?

  • Welche Verzeichnisse mit den persönlichen Dateien sollte ich sichern?

  • Wie und wo kann auf “only” https umstellen?

hier die offizielle Dokumentation für backup und upgrades…

https://docs.nextcloud.com/server/latest/admin_manual/maintenance/backup.html

https://github.com/nextcloud/docker#update-to-a-newer-version

1 Like

Wie löse ich das Problem?

meistens wird es als http->https redirect konfiguriert.

Ab wo und wie, mit Docker weißt ich es nicht?

ich weiss viele Dinge ebenfalls nicht. Bitte schaue dir die Dokumentation an - in den Docker docs gibts https Beispiele - an und frage nach Sachen die du nicht verstehst - indem du dein Problem konkret beschreibst… Du kannst von Niemandem erwarten dass er dir deine Konfiguration aus der Nase popelt und dann noch eine passende antwort aufbereitet.