Nextcloud ist die perfekte Lösung für eine selbst gehostete Google Drive- oder Dropbox-Alternative.
Ich werde Ihnen nicht sagen, warum Sie Nextcloud verwenden sollten. Stattdessen zeige ich Ihnen, wie Sie den Nextcloud-Server mit Docker-Containern installieren.
Das Tutorial verwendet die Ngnix-Reverse-Proxy-Einrichtung, damit Sie Ihre Nextcloud-Instanz mit SSL bereitstellen können. Auf diese Weise verwendet Ihre Nextcloud-Bereitstellungs-URL HTTPS und Sie übertragen Dateien sicher.
Gegen Ende des Tutorials gebe ich einige Tipps für Linode-Cloud-Benutzer, um den Aufwand für die Nextcloud-Bereitstellung zu reduzieren.
Linode | Die unabhängige offene Cloud für EntwicklerUnsere Mission ist es, Innovationen zu beschleunigen, indem wir Cloud Computing einfach, erschwinglich und für alle zugänglich machen.

Voraussetzungen
Bevor es weitergeht, müssen einige Dinge erledigt werden. Folgendes benötigen Sie:
- Ein Linux-Server, entweder ein physischer, eine virtuelle Maschine oder ein Cloud-Server.
- Docker und Docker Compose installiert auf Ihrem Linux-Server. Wenn Sie Hilfe benötigen, folgen Sie der Docker-Installationsanleitung unter Ubuntu und CentOS. In ähnlicher Weise können Sie den Docker-Compose-Installationstutorials unter Ubuntu und CentOS folgen.
- Einige Kenntnisse von Docker und Docker Compose sind von Vorteil.
- Ein Domänenname. Diese Bereitstellung erfolgt, wie alle anderen aus dem Linux-Handbuch, unter einem tatsächlichen Domänennamen mit HTTPS.
- Einige Erfahrung mit Shell- und Linux-Befehlen, da viel Bewegung darin ist.
- Zugriff auf einen SMTP-Dienst wie Sendgrid. Sie benötigen es zum Senden von E-Mail-Benachrichtigungen, zum Zurücksetzen des Passworts usw.
- Zeit und Geduld.
Nextcloud-Server mit Docker im Reverse-Proxy bereitstellen
Sehen wir uns die Schritte nacheinander an.
Schritt 1:Reverse-Proxy einrichten
Mit Reverse-Proxy können Sie mehrere Webdienste auf demselben Server bereitstellen. Dies ist nicht optional, da Sie den let's Encrypt-Container für SSL benötigen.
Es gibt zwei Möglichkeiten, wie Sie den Ngnix-Reverse-Proxy einrichten können..
Wenn Sie Linode nicht verwenden, lesen Sie bitte meinen Artikel zum Einrichten von nginx-reverse-proxy mit Docker.
So verwenden Sie Nginx Reverse Proxy mit mehreren Docker-AppsErfahren Sie, wie Sie mithilfe von Nginx Reverse Proxy und Docker-Containern mehrere Webdienste auf demselben Server bereitstellen können.

Wenn Sie Linode verwenden, empfehle ich Ihnen, unser reverse-proxy-jwilder StackScript zu verwenden, um Ihren Server einfach mit allem bereitzustellen, was bereits für Sie eingerichtet ist.
Die Reverse-Proxy-Bereitstellung sollte mit einer separaten Compose-Datei erfolgen, damit Sie Webdienste neu starten oder aktualisieren können, ohne Ihre Reverse-Proxy-Einrichtung zu stören.
Ich habe die Compose-Dateien bereits in unserem öffentlichen GitHub-Repository vorbereitet. Da dies kein ausführlicher Artikel über die Reverse-Proxy-Bereitstellung ist, werde ich nicht auf die Details der Compose-Datei eingehen.
Sie können entweder git
verwenden , oder wget
um die Dateien herunterzuladen. Bei Verwendung von git
, klonen Sie das gesamte Repository:
git clone https://github.com/linuxhandbook/tutorial-snippets && \
cd tutorial-snippets/Reverse_Proxy
Andernfalls laden Sie einfach die erforderlichen Dateien herunter:
mkdir -p ~/Reverse_Proxy && cd ~/Reverse_Proxy
for file in max_upload_size.conf env.example docker-compose.yaml; do
wget https://raw.githubusercontent.com/linuxhandbook/tutorial-snippets/main/Reverse_Proxy/${file}
done
Hier gibt es drei Dateien:
- env.example:Benennen Sie es in .env um und ändern Sie den Wert von
DEFAULT_EMAIL
an Ihre E-Mail - max_upload_size.conf:Diese Datei stellt sicher, dass Sie Dateien mit einer Größe von bis zu 1 GB hochladen können (der Standardwert ist 2 MB).
- docker-compose.yaml:Größter von allen. Kurz im nächsten Absatz besprochen.
Erstellen Sie ein Docker-Netzwerk namens net
. Dies wird in der Datei docker-compose.yaml verwendet.
docker network create net
Die docker-compose-Datei sieht so aus:
Stellen Sie schließlich die Container bereit
docker-compose up -d
Bei einer erfolgreichen Bereitstellung sollten Sie 503 erhalten, wenn Sie versuchen, die IP-Adresse des Servers zu besuchen, der diesen Reverse-Proxy hostet. Das ist okay. Sie haben noch keinen Webdienst darauf ausgeführt.

Schritt 2:Nextcloud bereitstellen
Hier gibt es zwei Komponenten:zum einen die Datenbank, zum anderen Nextcloud selbst, oder besser gesagt Frontend.
Für die Backend-Datenbank funktioniert jede MySQL-basierte Datenbank. Ich verwende MariaDB, insbesondere das Image-Tag (oder die Version) 10.5.9.
Für Nextcloud verwende ich die Version 21.0.0, dies ist die neueste zum Zeitpunkt des Schreibens dieses Artikels.
Daher sind die verwendeten Bilder
mariadb:10.5.9
nextcloud:21.0.0
Die Skeleton-Dateien, d. h. die Compose-Datei und die env-Dateien, sind bereits in unser öffentliches GitHub-Repository hochgeladen. Sie können diese entweder herunterladen oder umschreiben, während Sie die Erklärungen lesen.
Ich empfehle Ihnen, die Dateien herunterzuladen und dann alles durchzugehen, um zu verstehen, was vor sich geht. Sie müssen nicht alles von Grund auf neu schreiben.
Sie können entweder unser gesamtes GitHub-Repository klonen oder nur die erforderlichen Dateien herunterladen.
Wenn Sie das „tutorial-snippets“-Repository geklont haben, während Sie den Reverse-Proxy bereitgestellt haben, ändern Sie einfach Ihr aktuelles Verzeichnis in tutorial-snippets/Nextcloud
.
Das funktionierende git
Befehl lautet wie folgt:
git clone https://github.com/linuxhandbook/tutorial-snippets && \
cd tutorial-snippets/Nextcloud
Verwenden Sie andernfalls den folgenden Shell-Code, um ein Verzeichnis mit dem Namen "Nextcloud" zu erstellen und die Dateien dort herunterzuladen.
mkdir -p ~/Nextcloud && cd ~/Nextcloud
for file in env.example docker-compose.yaml; do
wget https://raw.githubusercontent.com/linuxhandbook/tutorial-snippets/main/Nextcloud/${file}
done
Kopieren Sie das env.example
Datei nach .env
. Sie werden diese Datei später für die Umgebungsvariablen bearbeiten. Das Aufbewahren der Originaldatei dient nur der Sicherung, sonst nichts.
cp env.example .env
Lassen Sie mich nun die Dienstdefinitionen durchgehen:
1. NCDatenbank
Die NCDatabase
Der Dienst sieht folgendermaßen aus:
NCDatabase:
image: "mariadb:10.5.9"
volumes:
- "NCMariaDB:/var/lib/mysql"
environment:
- MYSQL_ROOT_PASSWORD
- MYSQL_RANDOM_ROOT_PASSWORD
- MYSQL_DATABASE
- MYSQL_USER
- MYSQL_PASSWORD
restart: "on-failure"
networks: ["common"]
Dies ist der Datenbankdienst, und wie bereits erwähnt, verwendet er mariadb:10.5.9
Bild als Blaupause.
Für dauerhaften Speicher verwende ich ein Volume namens NCMariaDB
, es ist unter /var/lib/mysql
gemountet , wo MariaDB seine Daten speichert.
Die Umgebungsvariablen werden mit einer .env
behandelt Datei, darauf werde ich gleich noch zu sprechen kommen.
Ich mag den on-failure
Neustartrichtlinie, aber Sie können unless-stopped
auswählen oder always
. Vielleicht möchten Sie mehr über die Neustartrichtlinie in Docker lesen.
Der common
Netzwerk zwischen diesem und dem Frontend-Dienst gemeinsam ist, soll es sicherstellen, dass die Kommunikation zwischen diesen Containern möglich ist.
Umgebungsvariablen
Dies ist eine Docker-basierte Bereitstellung, Sie müssen einige Umgebungsvariablen einrichten. Öffnen Sie nun diese .env
Datei in Ihrem bevorzugten Texteditor und ändern Sie die Werte wie folgt:
MYSQL_ROOT_PASSWORD
oder MYSQL_RANDOM_ROOT_PASSWORD
:Legen Sie entweder MYSQL_RANDOM_ROOT_PASSWORD
fest auf 1 setzen oder ein starkes Root-Passwort für MariaDB setzen. Verwenden Sie openssl
um ein zufälliges Passwort zu generieren.
MYSQL_DATABASE
&MYSQL_USER
:Es sind einige Standardwerte festgelegt, aber Sie können diese bei Bedarf ändern. Stellen Sie diese auf Ihren bevorzugten Datenbanknamen bzw. Benutzernamen ein.
MYSQL_PASSWORD
:Passwort für den Benutzer (MYSQL_USER
), die Zugriff auf die MariaDB-Hauptdatenbank (MYSQL_DATABASE
) haben ).
MYSQL_HOST
:Dies ist der Dienstname des Datenbankcontainers. Wenn Sie den Dienstnamen in der Compose-Datei nicht ändern, lassen Sie ihn unverändert.
2. NCFrontend
Dies ist der Frontend-Dienst von Nextcloud. Dieser Service ist so einfach wie der vorherige. Schau mal:
NCFrontend:
image: "nextcloud:21.0.0"
volumes:
- "NCData:/var/www/html"
environment:
- LETSENCRYPT_HOST
- VIRTUAL_HOST
- TRUSTED_PROXIES
- OVERWRITEPROTOCOL
- MYSQL_DATABASE
- MYSQL_USER
- MYSQL_PASSWORD
- MYSQL_HOST
- SMTP_HOST
- SMTP_PORT
- SMTP_NAME
- SMTP_PASSWORD
- MAIL_FROM_ADDRESS
- NEXTCLOUD_TRUSTED_DOMAINS
- NEXTCLOUD_ADMIN_USER
- NEXTCLOUD_ADMIN_PASSWORD
depends_on:
- "NCDatabase"
networks: ["net", "common"]
Das verwendete Bild ist nextcloud:21.0.0
, wie ich bereits sagte, ist die neueste Version zum Zeitpunkt der Erstellung dieses Artikels.
Um sicherzustellen, dass Sie Ihre Daten sicher aufbewahren und sie in einem unglücklichen Fall eines einfachen Containerneustarts nicht verlieren, müssen Daten beibehalten werden. Nextcloud speichert seine Daten/Informationen in /var/www/html
, sodass dieser Speicherort mithilfe eines Volumes namens NCData
persistent gemacht wird .
Der depends_on
Array ist interessant. Es stellt sicher, dass die Werte, also die darin genannten Dienste, zuerst bereitgestellt werden, bevor der aktuelle gestartet wird.
Hier stelle ich sicher, dass die Datenbank vor Nextcloud selbst gestartet wird, um Verbindungsprobleme zu vermeiden.
Möglicherweise sehen Sie weiterhin einige Probleme in den Protokollen, da ein erfolgreicher Containerstart nicht darauf hinweist, dass die beabsichtigten Prozesse innerhalb des Containers ebenfalls erfolgreich gestartet wurden. Sie können sich mehr Zeit nehmen. In unserem Fall benötigt mysqld etwas mehr Zeit zum Starten, weshalb Sie möglicherweise ein paar Fehler in den Protokollen sehen, bis schließlich eine erfolgreiche Verbindung hergestellt wird.
Es gibt zwei Netzwerke. Das erste ist net
, die auch Teil der Reverse-Proxy-Bereitstellung war. Dies ist notwendig, da der Reverse-Proxy in der Lage sein muss, mit den Proxy-Diensten, dh Nextcloud, zu kommunizieren. Der common
Netzwerk ist für die Nextcloud und die Datenbank-Container, um erfolgreich kommunizieren zu können.
Umgebungsvariablen
Öffnen Sie die .env
Datei (die gleiche, die Sie für MariaDB verwendet haben) in Ihrem bevorzugten Texteditor und beginnen Sie, die Werte wie folgt zu ändern:
LETSENCRYPT_HOST
, VIRTUAL_HOST
&NEXTCLOUD_TRUSTED_DOMAINS
:Stellen Sie diese auf die Domain/Subdomain ein, auf der Sie Ihre Nextcloud-Instanz hosten möchten.
TRUSTED_PROXIES
:Das Subnetz des Netzwerks, das vom Reverse-Proxy und diesem Front-End gemeinsam genutzt wird. Sie können das Subnetz mit dem folgenden Befehl abrufen (stellen Sie sicher, dass jq
installiert ist)
docker inspect -f '{{ json .IPAM.Config }}' net | jq -r .[].Subnet
OVERWRITEPROTOCOL
:Der Parameter overwriteprotocol wird verwendet, um das Protokoll des Proxys festzulegen. Da wir HTTPS verwenden, setzen Sie dies auf HTTPS.
SMTP_HOST
&SMTP_PORT
:Die Adresse des SMTP-Servers und der Port, auf dem er lauschen wird, für SendGrid ist es smtp.sendgrid.net und Port 587 für automatisches TLS.
SMTP_NAME
&SMTP_PASSWORD
:Der Benutzername und das Passwort für die Authentifizierung. Für SendGrid ist der Wert des Benutzernamens sehr konsistent. Es ist apikey
. Das Passwort wird Ihr API-Schlüssel sein.
MAIL_FROM_ADDRESS
:Der Wert von From
SMTP-Header. Setzen Sie dies auf etwas wie [email protected]
.
NEXTCLOUD_ADMIN_USER
&NEXTCLOUD_ADMIN_PASSWORD
:Anstatt das erste Mal die Webbenutzeroberfläche zu verwenden, um den Admin-Benutzer zu erstellen, können Sie diesen stattdessen direkt in der Bereitstellungsphase über diese Variablen erstellen. Setzen Sie diese auf den Benutzernamen und das Passwort Ihres Admin-Benutzers. Wenn Sie es verlassen haben, werden Sie beim ersten Start von Nextcloud aufgefordert, ein Konto zu erstellen.
Volumes
Ich habe zwei interne Volumes in diesem Netzwerk definiert, NCMariaDB
für MariaDB und NCData
für Nextcloud. Ob Sie diese intern oder extern behalten, bleibt Ihnen überlassen.
Viele werden sagen, dass es riskant ist, diese intern zu behalten, da Sie leicht den Fehler machen können, docker-compose down -v
zu verwenden und entfernen Sie die Volumes zusammen mit den Behältern. Gleichzeitig können Sie bei externen Volumes den Fehler machen, docker volume prune
und alle Ihre Daten löschen.
Entscheiden Sie, welches für Sie sicherer ist. Wenn Sie sich entscheiden, sie extern zu machen, öffnen Sie die Compose-Datei und ändern Sie die volumes
Definition in etwa so:-
volumes:
NCMariaDB:
external: true
NCData:
external: true
Erstellen Sie anschließend die Volumes:
for volume in NCMariaDB NCData; do
docker volume create ${volume}
done
Netzwerke
Hier ist nicht viel. Sie werden feststellen, dass zwei Netzwerke definiert sind. Einer ist für das Frontend und den Reverse-Proxy und der andere für die Kommunikation zwischen Frontend und Backend.
Der Datenbank-Container und das Nextcloud-Frontend haben ein gemeinsames Netzwerk mit dem Namen „common“, damit diese beiden Container miteinander kommunizieren können. Sie können dies intern machen, was den Datenbankcontainer daran hindert, auf das öffentliche Internet zuzugreifen, aber ich bin mir nicht sicher, welche Vorteile Sie daraus ziehen könnten.
Wenn Sie dies trotzdem tun möchten, sollte es so aussehen:
networks:
net:
external: true
common:
internal: true
Endlich Nextcloud bereitstellen
Es bleibt nichts anderes übrig. Führen Sie einfach den folgenden Befehl aus
docker-compose up -d
Die erforderlichen Images werden gezogen und dann bereitgestellt.
Nach der Bereitstellung sollten insgesamt vier Container auf Ihrem Server ausgeführt werden.
[email protected]:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1dce1c7909fe jrcs/letsencrypt-nginx-proxy-companion:latest "/bin/bash /app/entr…" 7 hours ago Up 7 hours reverse_proxy_LetsencryptCompanion_1
d29719999132 jwilder/nginx-proxy:latest "/app/docker-entrypo…" 7 hours ago Up 7 hours 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp reverse_proxy_NginxProxy_1
cd719cb2a677 nextcloud:21.0.0 "/entrypoint.sh apac…" 7 hours ago Up 7 hours 80/tcp nextcloud_NCFrontend_1
60dff2062aa5 mariadb:10.5.9 "docker-entrypoint.s…" 7 hours ago Up 7 hours 3306/tcp nextcloud_NCDatabase_1
Sie können Lassen Sie auch mehr Container laufen, wenn zuvor Container ausgeführt wurden. Unter dem Strich besteht diese Nextcloud-Bereitstellung aus vier Containern, dem Nginx-Container, dem Letsencrypt-Begleitcontainer, dem Mariadb-Container und schließlich dem eigentlichen Nextcloud-Container.
Nach der Bereitstellung
Bevor ich dies abschließe, wollte ich eine kurze Sache erwähnen, die Sie nach der Bereitstellung vielleicht wissen möchten.
Öffnen Sie zuerst Ihren Browser und gehen Sie zu der Domain, auf der diese Nextcloud-Instanz gehostet wird (VIRTUAL_HOST
). Sie sollten einen ähnlichen Bildschirm wie diesen sehen, wenn Sie den Admin-Benutzer nicht mithilfe der Compose-Datei festgelegt haben

Da die Datenbankumgebungsvariablen über die gemeinsame .env
geteilt werden Datei, sehen Sie nicht die üblichere Benutzeroberfläche für die Webinstallation, die nach Datenbankinformationen wie Hostname, Port, Kennwort des Datenbankbenutzernamens fragt.
Dort ist auch ein ähnliches Kontrollkästchen zu sehen. Ich empfehle Ihnen, dieses Kontrollkästchen zu deaktivieren und die Apps, die Sie später benötigen, aus der App-Liste zu installieren.

Weitere Tipps nach der Bereitstellung finden Sie in diesem großartigen Artikel meines Kollegen Avimanyu:
10 hilfreiche Tipps zum Verwalten einer Nextcloud-Docker-Instanz Einige hilfreiche Ratschläge, die Sie beachten und in der Praxis befolgen sollten, während Sie Ihre Nextcloud-Instanz mit Docker selbst hosten!

Das ist es. Ich hoffe, dieses ausführliche Tutorial hilft Ihnen bei Ihrer Nextcloud-Server-Installation mit Docker. Wenn Sie Fragen oder Anregungen haben, lassen Sie es mich bitte im Kommentarbereich wissen und ich helfe Ihnen gerne weiter.