[gelöst] Nextcloud mit Docker Compose und Ubuntu 20.04 als VPS Host System

Hinweis goneuland:
Diese Docker Compose Datei funktioniert nur, wenn ich euch mittels meiner Anleitung hier Traefik installiert habt. Sonst heißen einige Traefik Variablen wohl anders. Diese müsst ihr dann dementsprechend bei euch anpassen.

zuerst Docker & Docker Compose. installieren

Docker Repository einbinden

apt-get update
apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg2 \
    software-properties-common
# Docker GPG Key einbinden
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
# Docker Repository einbinden
add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

Fehlermeldung, wenn ich Docker installieren möchte:

 Package 'docker-ce' has no installation candidate

https://r00t4bl3.com/post/how-to-install-docker-on-ubuntu-20-04-focal-fossa

apt install docker-ce
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Package docker-ce is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
However the following packages replace it:
  docker-ce-cli:amd64

E: Package 'docker-ce' has no installation candidate

Kommen die Problem evtl. von meiner CPU, Arm-basierter Prozessor?

Fehler gefunden:

add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \

Alle “amd64” zuvor habe ich auf “arm64” angepasst.

Dann:

apt-get install docker-ce docker-ce-cli containerd.io
Reading package lists... Done
Building dependency tree       
Reading state information... Done
containerd.io is already the newest version (1.4.12-1).
containerd.io set to manually installed.
docker-ce-cli is already the newest version (5:20.10.12~3-0~ubuntu-focal).
docker-ce-cli set to manually installed.
docker-ce is already the newest version (5:20.10.12~3-0~ubuntu-focal).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

Mein Docker ist erfolgreich installiert

docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
93288797bd35: Pull complete 
Digest: sha256:97a379f4f88575512824f3b352bc03cd75e239179eea0fecc38e597b2209f49a
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (arm64v8)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

Docker Release:

docker -v
Docker version 20.10.12, build e91ed57

oder in lang

docker version
Client: Docker Engine - Community
 Version:           20.10.12
 API version:       1.41
 Go version:        go1.16.12
 Git commit:        e91ed57
 Built:             Mon Dec 13 11:44:28 2021
 OS/Arch:           linux/arm64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.12
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.16.12
  Git commit:       459d0df
  Built:            Mon Dec 13 11:43:05 2021
  OS/Arch:          linux/arm64
  Experimental:     false
 containerd:
  Version:          1.4.12
  GitCommit:        7b11cfaabd73bb80907dd23182b9347b4245eb5d
 runc:
  Version:          1.0.2
  GitCommit:        v1.0.2-0-g52b36a2
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

Jetzt fange ich klein an

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

Using the apache image

The apache image contains a webserver and exposes port 80. To start the container type:

$ docker run -d -p 8080:80 nextcloud

Now you can access Nextcloud at http://localhost:8080/ from your host system.

docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
nextcloud     latest    46ca0e38ef08   2 weeks ago    917MB
hello-world   latest    18e5af790473   4 months ago   9.14kB

Gehe ich jetzt auf http:/IP-Adresse-vom-VPS:8080/ passiert leider nicht, nicht erreichbar.

Wie prüfe ich jetzt, wo der Fehler liegen kann?

Erst mal den Nextcloud Docker Container starten, alles wieder vergessen, darin bin ich gut.

docker run nextcloud
Initializing nextcloud 23.0.1.2 ...
Initializing finished
New nextcloud instance
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
[Fri Feb 18 18:44:52.399869 2022] [mpm_prefork:notice] [pid 1] AH00163: Apache/2.4.52 (Debian) PHP/8.0.15 configured -- resuming normal operations
[Fri Feb 18 18:44:52.399930 2022] [core:notice] [pid 1] AH00094: Command line: 'apache2 -D FOREGROUND'


Doch nicht so einfach, ich muss Docker üben.

Oder wie komme ich weiter?

Erst mal das anschauen (evtl. andere Browser testen):

https://technology.amis.nl/oracle-cloud/run-always-free-docker-container-on-oracle-cloud-infrastructure/

keep calm, das habe ich bei meinen Installationen immer… nicht jeder Fehler der auf der Console erscheint ist ein Problem. du musst einfach richtige Variablen für OVERWRITE* setzen und alles ist gut…

1 Like

Hallo Forum,

meine Docker Nextcloud Anfängerlösung (ohne MariaDB Datenbank und Tuning) kann ich nutzen.

docker run -d -p 8080:80 nextcloud

Mir fehlt zuvor die entsprechende Ingress-Regel für Port 8080

Nextcloud Informationen:

-------------------------
Betriebssystem:	Linux 5.11.0-1028-oracle aarch64
Prozessor:	Unknown Processor
Speicher:	23.43 GB
Server-Zeit:	Sat Feb 19 08:57:39 UTC 2022
Betriebszeit:	14 hours, 14 minutes, 48 seconds

Unknown Processor ---->
4 Arm-basierte Ampere A1-Kerne
Source also immer [arch=arm64]

-------------------------
PHP
8.0.15
Arbeitspeicher-Grenzwert: 512 MB
Maximale Ausführungszeit: 3600
Maximale Größe zum Hochladen: 512 MB
-------------------------
Datenbank
sqlite3
3.34.1
Größe: 1,2 MB
-------------------------

Warum hat der Docker Container Nextcloud nur den Releasestand 23.01?

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

So wie ich das verstanden habe wird die Github Nextcloud automatisch zur Docker Hub Nextcloud synchronisiert. Was ist daran falsch?

Antwort: Das ist nicht falsch, ich hatte den falschen Tag gewählt.

Schalte ich auf den Update Kanal “beta”, bekomme ich 23.0.2 angeboten, kann damit jedoch nichts anfangen.

Wie komme ich jetzt zu Nextcloud 23.0.2?

Antwort:

docker run -d -p 8080:80 nextcloud:latest

Es gibt verschiedene Tags, das wusste ich zuvor nicht.
https://hub.docker.com/_/nextcloud?tab=tags

So sieht es jetzt mit nextcloud:latest 23.0.2 aus:

Aus dem Docker Image wird der Docker Container erstellt.
Achtung auch bei bei der Wahl der Docker Container, diese müssen teilweise speziell für linux-arm64 sein. Bei Portainer habe ich mich gewundert, warum die Images und Container nicht angezeigt wurden.

docker run --restart always -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:linux-arm64

Docker Compose

https://www.portainer.io/blog/stacks-docker-compose-the-portainer-way

Ist das evtl. einfacher als mit dem goneuland-Weg?

https://hub.docker.com/r/coturn/coturn
https://hub.docker.com/r/collabora/code

Evtl. einsetzbar? ---->
https://hub.docker.com/_/traefik
https://hub.docker.com/r/docker/compose

OT Werbeblocker
https://hub.docker.com/r/diginc/pi-hole

@wwe
Hallo, hast Du dein coturn, collabora und treafik auch mit Dockern Containern realisiert?

Warum meinst Du wird ein Docker Compose als Container angeboten? Warum hast Du diesen nicht genutzt?

ich habe alles als Docker Container laufen…

docker-compose ist ein Weg Docker Container logisch zusammenzufassen und mit Hilfe einer Beschreibungsdatei mehrere zusammengehörende Container zu verwalten… zB starten/stoppen und unter Anderem zB bestimmte Startreihenfolge zu bestimmen. es werden genau gleiche Images/Container benutzt und itechnisch macht es keinen unterschied einen Dutzend Container per Hand auf der Commandozeile zu starten… docker-compose macht es einfacher…

1 Like

@wwe und Alle,

welche Lösung gibt es um eine Letsencrypt Zertifikat einzubauen?

Mir ist nur das Docker Image SWAG von linuxserver.io bekannt.
swag - LinuxServer.io

Hinweis von Reiner_Nippes

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

Von linuxserver.io scheint das das Docker Image Nextcloud nicht richtig gepflegt zu werden.

Das letzte Nextcloud Docker Image ist laut Dokumentation vom 11.09.2021.

Die Dokumentation ist falsch.

Release erschien vor 5 Tagen, also vom 15. Februar 2022

23.0.2-ls172
LinuxServer Changes:
Rebasing to alpine 3.14
Remote Changes:
Updating to 23.0.2

Die Version NC 23.0.1 haben die übersprungen, linuxserver.io soll eine gute Reputation haben. Ist das Docker Image Nextcloud von linuxserver.io evtl. das bessere Nextcloud Docker Image?

@wwe
Kannst Du den das Docker Nextcloud von linuxserver.io in deinem System man “so kurz” testen?
https://hub.docker.com/r/linuxserver/nextcloud/
Dockerfile Line 1:

FROM ghcr.io/linuxserver/baseimage-alpine-nginx:3.14

Oh, die schmale Version, fällt mir gerade ein, kann ich selbst testen.

Das Nextcloud Original nutzt Debian 11 Bullseye oder Alpine Linux als Basis für die verschiedenen Docker Images.

@wwe
Welche Basis nutzt Du für deinem deinen Docker Nextcloud Container? Aus deinem Schaubild kann ich es nicht ersehen.

Warum verwendet linuxserver.io alpine 3.14 und nextcloud.com alpine 3.15? Legt linuxserver evtl. mehr Wert auf Stabilität?

Meine nächster Test, Docker Image nextcloud:stable-fpm-alpine
FastCGI Process Manager (FPM)
Linuxbasis: Alpine 3.15

MfG
nc-kay

docker run -d -p 8081:80 nextcloud
docker run -d -p 8081:80 arm64v8/nextcloud

Auf die zwei vorherigen Container habe ich Zugriff.

docker run -d -p 8081:80 nextcloud:stable-fpm-alpine 

Auf diesen Container habe ich über den Internetbrowser keinen Zugriff.
Liegt das an meiner CPU ( Arm-basierte Ampere A1-Kerne)?

OT OT OT
Für weitere Tests baue ich mir einen neuen AMD CPU VPS (Server).
model name : AMD EPYC 7551 32-Core Processor

Ausprägung:
 VM.Standard.E2.1.Micro 
OCPU-Anzahl: 1
Netzwerkbandbreite (Gbit/s):  0.48
Arbeitsspeicher (GB): 1

Als erstes installiere ich hier Portainer, die folgende Anleitung ist super:
https://www.portainer.io/blog/portainer-your-docker-gui-for-your-ubuntu-linux-desktop
So habe ich auf schnellstem Weg meine gewünschte Dockerfunktionalität.

OT Ende OT Ende OT Ende

docker run -d -p 8081:80 nextcloud:stable-fpm-alpine 

Leider habe ich bei dem neuen AMD CPU VPS (Server) auch keinen Zugriff.

docker run -d -p 8080:80 nextcloud:23.0.2

Auf die NC Instanz habe ich ohne Probleme Zugriff.

Warum funktioniert das Docker Nextcloud Image “nextcloud:stable-fpm-alpine” nicht?

Forensuche
https://help.nextcloud.com/search?q=nextcloud:stable-fpm-alpine

nextcloud:stable-fpm-alpine scheint wohl verwaist und niemand zu benutzen.

crazymax/nextcloud

By crazymax

Nextcloud image based on Alpine Linux

https://hub.docker.com/r/crazymax/nextcloud

docker run -d -p 8081:80  crazymax/nextcloud

Das funktioniert nicht, der Befehl ist auch nicht von crazymax dokumentiert.

docker run -d -p 8081:80 --name nextcloud \
  -v "$(pwd)/data:/data" \
  crazymax/nextcloud:latest

Ist der Port " 8000: HTTP port" zwingend vorgegeben?

crazymax erscheint mir zu individuell oder ich zu unwissend.

linuxserver.io

docker run -d --name=nextcloud -e PUID=1001 -e PGID=1001 -e TZ=Europe/Berlin -p 443:443 -v /path/to/appdata:/config -v /path/to/data:/data --restart unless-stopped lscr.io/linuxserver/nextcloud

Auf die Nextcloud Instanz kann ohne Problem zugriffen werden.
https:// wird benötigt.

############################
Jetzt versuche ich mich an docker-compose nach linuxserver.io
https://docs.linuxserver.io/general/docker-compose

sudo curl -L --fail https://raw.githubusercontent.com/linuxserver/docker-docker-compose/master/run.sh -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
id $user
uid=1001(ubuntu) gid=1001(ubuntu) groups=1001(ubuntu),4(adm),20(dialout),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),117(netdev),118(lxd)

Meine /home/ubuntu/docker-compose.yml

version: "2.1"
services:
  nextcloud:
    image: linuxserver/nextcloud
    container_name: nextcloud
    volumes:
      - /home/ubunt/appdata/nextcloud:/config
    environment:
      - PUID=1001
      - PGID=1001
      - TZ=Europe/Berlin
    ports:
      - 8080:80
      - 443:443
    restart: unless-stopped

Ausgeführt mit:

sudo  docker-compose -f /home/ubuntu/docker-compose.yml up -d

Systeminformationen aus der NC WebGUI

##
VPS
Betriebssystem: 	Linux 5.11.0-1027-oracle x86_64
Prozessor: 	AMD EPYC 7551 32-Core Processor (2 cores)
Speicher: 	972.00 MB
##
PHP


7.4.26

Arbeitspeicher-Grenzwert: 512 MB

Maximale Ausführungszeit: 3600

Maximale Größe zum Hochladen: 1 GB
##
Datenbank


sqlite3

3.35.5

Größe: 1,2 MB
##

Jetzt muss ich MariaDB in die /home/ubuntu/docker-compose.yml integrieren, sqLite wird nur für sehr kleine System empfohlen.

Wie mache ich das am besten?

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

nimm dir Zeit die Tutorials und docs komplett anzuschauen/lesen und verstehen. Schon die Beschreibung des Nextcloud Docker Container beantwortet deine Frage…

Marker for @Reiner_Nippes

Hallo Forum, hallo @wwe

da ich mit docker-compose noch nicht wirklich klar komme, ich weiß nicht welch Container funktionieren, möchte ich Nextcloud und MariaDB als alleinige Docker Container starten und danach mitein ander verkoppeln.

Den Nextcloud 23.0.2 Container kann ich sicher benutzen. Sie Stand Bild zuvor.

Welchen MariaDB Datenbank Container von Docker Hub sollte ich verwenden?
Mit welche Startoptionen diesen starten?

Für dieses MariaDB Image habe ich micht entschieden:

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

Den Container baue ich wie folgt:

docker run --detach --name some-mariadb --env MARIADB_USER=example-user --env MARIADB_PASSWORD=my_cool_secret --env MARIADB_ROOT_PASSWORD=my-secret-pw  mariadb:latest
Datenbankverzeichnis

Datenbank-Benutzer

Datenbank-Passwort

Datenbank-Name

locoalhost

Welche Werte habe ich jeweils einzutragen?

Es wurde eingetragen:

Datenbankverzeichnis: ???????

Datenbank-Benutzer: example-user 

Datenbank-Passwort: my_cool_secret

Datenbank-Name: some-mariadb

locoalhost (nicht geändert)

Es sieht jetzt so aus:

Wo ist mein Datenbankverzeichnis, welchen Pfad habe ich einzutragen?

Vermutlich muss ich eintragen:

/var/lib/mysql

Meine eingetragenen Werte:

Die Fehlermeldung:

Das Datenbankverzeichnis /var/lib/mysql
kann nicht erstellt oder es kann darin nicht 
geschrieben werden.

Startpagesuche:
https://www.startpage.com/do/dsearch?query=+Das+Datenbankverzeichnis+%2Fvar%2Flib%2Fmysql+kann+nicht+erstellt+oder+es+kann+darin+nicht++geschrieben+werden++mariadb&cat=web&pl=ext-ff&language=deutsch&extVersion=1.3.0

Was habe ich falsch gemacht, bzw. wie löse ich das Problem?

Docker Image linuxserver/mariadb

Test mit https://docs.linuxserver.io/images/docker-mariadb

docker run -d \
  --name=mariadb \
  -e PUID=1000 \
  -e PGID=1000 \
  -e MYSQL_ROOT_PASSWORD=ROOT_ACCESS_PASSWORD \
  -e TZ=Europe/London \
  -e MYSQL_DATABASE=USER_DB_NAME `#optional` \
  -e MYSQL_USER=MYSQL_USER `#optional` \
  -e MYSQL_PASSWORD=DATABASE_PASSWORD `#optional` \
  -e REMOTE_SQL=http://URL1/your.sql,https://URL2/your.sql `#optional` \
  -p 3306:3306 \
  -v path_to_data:/config \
  --restart unless-stopped \
  lscr.io/linuxserver/mariadb

Daten in Portainer ausgelesen:

Datenbankverzeichnis: /config/databases

Datenbank-Benutzer: MYSQL_USER 

Datenbank-Passwort: DATABASE_PASSWORD

Datenbank-Name: mariadb

locoalhost (nicht geändert)

Eingetragene Werte:

Fehlermeldung, wie zuvor, Screenshot erspare ich mir:

Das Datenbankverzeichnis /config/databases
kann nicht erstellt 
oder es kann darin nicht geschrieben werden. 

Wo liegt mein grundsätzlicher Fehler?

https://hub.docker.com/_/nextcloud?tab=description

Persistent data

The Nextcloud installation and all data beyond what lives in the database (file uploads, etc.) are stored in the unnamed docker volume volume /var/www/html. The docker daemon will store that data within the docker directory /var/lib/docker/volumes/.... That means your data is saved even if the container crashes, is stopped or deleted.

A named Docker volume or a mounted host directory should be used for upgrades and backups. To achieve this, you need one volume for your database container and one for Nextcloud.

Wie kann ich das umsetzen, ich verstehe das nicht wirklich?

Was genau machen die folgenden Befehle, wie baue ich die ein?


Nextcloud:

    /var/www/html/ folder where all Nextcloud data lives

    $ docker run -d \
    -v nextcloud:/var/www/html \
    nextcloud

Database:

    /var/lib/mysql MySQL / MariaDB Data

    /var/lib/postgresql/data PostgreSQL Data

    $ docker run -d \
    -v db:/var/lib/mysql \
    mariadb

du hast das zusammen mit einem nginx container gemäß der doku gestartet?

du wirfst hier “Datenverzeichnis” und “Datenbankverzeichnis” durcheinander. du sollst dort das verezichnis eintragen, wo nextcloud deine dateien ablegen soll. das ist typischerweise /var/www/html/data.

mit dem datenbankverzeichnis hast du erstmal nix zu schaffen.

1 Like

Die Frage habe vorläufig zurück gestellt, ich verrenne mich sonst.

Hallo @Reiner_Nippes Nippes ,

ich habe dir einen Marker for @Reiner_Nippes gesetzt. Bei dem Stand bin ich, es ist alles dokumentiert was ich getan habe.

Mein jetziges Anliegen 2 *.yml Dateien, Nextcloud und MariaDB.

Mit docker-compose verknüpfe ich diese später.

Edit 22. Feb. 2022
Docker yml Release
Compatibility matrix

da docker/.examples/docker-compose/with-nginx-proxy/mariadb/apache at master · nextcloud/docker · GitHub sind vier dateien.

dort musst du hier docker/.examples/docker-compose/with-nginx-proxy/mariadb/apache/docker-compose.yml at master · nextcloud/docker · GitHub und hier docker/.examples/docker-compose/with-nginx-proxy/mariadb/apache/docker-compose.yml at master · nextcloud/docker · GitHub deine domain eintragen. hier docker/.examples/docker-compose/with-nginx-proxy/mariadb/apache/docker-compose.yml at master · nextcloud/docker · GitHub deine email adresse. hier docker/.examples/docker-compose/with-nginx-proxy/mariadb/apache/docker-compose.yml at master · nextcloud/docker · GitHub und hier docker/.examples/docker-compose/with-nginx-proxy/mariadb/apache/db.env at master · nextcloud/docker · GitHub jeweils ein sicheres password.

und dann docker-compose -d up

lass dir mal von nana in ruhe die grundlagen erklären.

1 Like

@Reiner_Nippes

Danke, Du bist aber schon zu weit.

Ich bekomme doch nicht mal von Nextcloud Zugriff auf meine MariaDB Datenbank.

da steht datenverzeichnis in dem einrichtungsmenu von nextcloud. nicht datenbankverzeichnis. also default /var/www/html/data

jeder container hat sein eigenes netzwerk. damit ist jeder container sein eigener localhost. du willst dich aber über das docker interne netzwerk mit dem mariadb container verbinden. also muss du dort den container namen (== fqdn im docker netz) deines mariadb containers eintragen.

wenn du den container so gestartet hast, dass er eine datenbank mit diesem namen anlegt, wäre das ok.

aber da fehlt die variable MARIADB_DATABASE. bin mir jetzt nicht sicher, was der container macht, wenn die fehlt.

dann probier mal meine anleitung. in dem compose file wurde deine probleme schon gelöst. :wink: