GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> Docker

So installieren Sie Nextcloud mit Docker auf Ihrem Linux-Server

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. Linode

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. Linux-Handbuch Debdut Chakraborty

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
Wenn Sie dieses Tutorial in Zukunft verwenden (aus heutiger Zeitreferenz) und es eine viel neuere Version von Nextcloud und MariaDB gibt, verwenden Sie bitte diese Versionen.

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.

Docker Compose erstellt ein Standardnetzwerk für alle seine Dienste in einer Compose-Datei. Da der NCFrontend-Dienst jedoch bereits mit dem Netz verbunden ist, erstellt Docker Compose dieses Standardnetzwerk nicht mehr, weshalb Sie ein benutzerdefiniertes Netzwerk wie "common" erstellen müssen, um die Kommunikation zu ermöglichen.

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.

Die SMTP-Konfiguration ist optional. Für diesen Artikel werde ich SendGrid als Beispiel verwenden. Weitere geeignete Werte für die folgenden Umgebungsvariablen finden Sie in der Dokumentation Ihres SMTP-Servers.

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! Linux-HandbuchAvimanyu Bandyopadhyay

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.


Docker
  1. So installieren und hosten Sie einen OpenVPN-Server mit Docker

  2. Installieren Sie den Wireguard VPN-Server mit Docker

  3. So installieren Sie Jenkins mit Docker

  4. So installieren Sie NextCloud 13 auf Ubuntu 16.04

  5. So installieren Sie Nextcloud 14 auf Debian 9

So installieren Sie Docker CE auf Rocky Linux 8

So installieren Sie Docker CE auf Rocky Linux 8

So installieren Sie den NextCloud-Server auf Rocky Linux 8

So installieren Sie KernelCare auf Ihrem Linux-Server

Wie installiere ich Softaculous auf einem Linux-Server mit cPanel?

So installieren und verwenden Sie Docker in Ihrem Linux-System