Nextcloud mit Podman aufsetzen

Aus LinuxUser 06/2022

Nextcloud mit Podman aufsetzen

© Marquis, Photocase

Schlüsselfertig

Mit Podman setzen Sie eine Nextcloud-Instanz für den Hausgebrauch schnell und unkompliziert auf.

Container spielen zunehmend auch für den Hausgebrauch eine Rolle. Auch wenn es auf den ersten Blick nicht so aussieht, verwenden viele von uns sie bereits im Alltag, denn bei Flatpaks und Snaps handelt es sich um nichts anderes als Container für Anwendungen. Künftige Distributionen reduzieren ihren Umfang auf ein Minimum, die benötigten Dienste laufen in irgendeiner Form als Container. Vorboten dieser Entwicklung sind unter anderem Fedora Silverblue und Kinoite, Endless OS, MicroOS oder Intels Clear Linux. Es ergibt also durchaus auch für Heimanwender Sinn, sich mit den verschiedenen Konzepten auseinanderzusetzen.

Container isolieren durch das Virtualisieren die Anwendungen und bieten ihnen eine Laufzeitumgebung. Sie bedienen sich dabei des Dateisystems und der Ressourcen des Betriebssystems, auf dem sie laufen. Dadurch ergibt sich gegenüber dem althergebrachten Server-Ansatz oder der landläufigen Virtualisierung bei der Containerisierung der Vorteil des geringeren Ressourcenverbrauchs. Benötigt eine virtuelle Maschine ihr eigenes Betriebssystem samt Kernel, so halten die Container nur die entsprechenden Anwendungen sowie die zum Ausführen benötigten Dateien und Funktionen (Microservices) vor.

Dickschiff Docker

Docker galt seit seinen Anfängen im Jahr 2013 lange als Synonym für Container. Das änderte sich mit dem Aufkommen der Container-Orchestrierungssoftware Kubernetes langsam. In letzter Zeit gewinnt dagegen Podman an Fahrt. Nach Streitigkeiten zwischen Docker und Red Hat über die weitere Entwicklung begann der Distributor 2017 die Entwicklung von Podman, einer Anwendung für das Management von Containern und Pods, und kündigte mittlerweile die Unterstützung für Docker auf. Kürzlich erschien Podman in Version 4.0 [1].

Der Name Podman steht als Kürzel für Pod Manager und weist darauf hin, dass die Software im Gegensatz zu Docker das von Kubernetes eingeführte Modell der Pods übernimmt. Bei Pods handelt es sich um Container mit jeweils einzelnen Applikationen, die auf demselben Server laufen. Wenn Sie etwa Nextcloud aufsetzen möchten, brauchen Sie außerdem noch eine Server-Anwendung, eine Datenbank und, falls Sie den Dienst von außen erreichen möchten, einen Reverse Proxy. Alle diese Anwendungen laufen in separaten Containern in einem Pod. Das bringt Vorteile wie etwa die Möglichkeit, sich an die Localhost-Adresse des Pods zu binden, was allen Containern im Pod erlaubt, sich aufgrund des gemeinsamen Netzwerknamensraums damit zu verbinden.

Vorteile von Podman

Im Gegensatz zum durch einen Daemon zentral gesteuerten Docker verzichtet Podman auf eine solche Instanz und läuft ohne Root-Rechte. Die Container agieren dank des Verwendens der User-Namespaces des Kernels auf der Basis von Cgroups 2 [2] im Benutzerkontext eines normalen Benutzers. Im Container selbst laufen Prozesse dagegen auch mit Root-Rechten. Innerhalb eines Namespaces besitzen Prozesse somit andere Rechte und User-IDs als außerhalb davon. Da sie auf einen Daemon zur Steuerung verzichten, lassen sich Podman-Container als Systemd-Dienst einbinden [3] oder über eine GUI im Admin-Werkzeug Cockpit (Abbildung 1) steuern [4].

Abbildung 1: Cockpit, eine webbasierte grafische Oberfläche für Server, erleichtert das Administrieren lokaler oder entfernter Rechner in vielerlei Hinsicht. Seit Kurzem eignet sie sich auch zum Verwalten von Podman.

Abbildung 1: Cockpit, eine webbasierte grafische Oberfläche für Server, erleichtert das Administrieren lokaler oder entfernter Rechner in vielerlei Hinsicht. Seit Kurzem eignet sie sich auch zum Verwalten von Podman.

Im Unterschied zu Docker, wo einzelne Komponenten einer Anwendung in verschiedenen Containern laufen, vereint Podman mehrere Container in einem Pod, was Netzwerkprobleme verhindert. Auf der Kommandozeile verhält sich Podman fast identisch zu Docker, dessen Befehle die Software im Hintergrund umsetzt. Zudem lassen sich mit Podman Abbilder des Repository-Diensts Docker Registry verwenden.

Möchten Sie Container von Grund auf hochziehen, um sie so ressourcenschonend wie möglich zu gestalten, kommt Buildah ins Spiel. Das Tool ermöglicht Ihnen die Konstruktion von Containern von Grund auf. Das erweist sich vorrangig in Umgebungen als hilfreich, in denen die Images so klein wie möglich ausfallen sollen [5].

Somit löste Red Hat seine Abhängigkeit von Docker durch Podman auf elegante Art und Weise und bietet zusätzliche Funktionalität. So bringt Podman 4 den neuen Befehl podman image scp mit, der es erlaubt, Images lokal und auf entfernte Server zu kopieren, ohne eine Registry dazwischenzuschalten.

Installation

Doch genug der Theorie. Im praktischen Teil ziehen wir eine einfache Nextcloud-Installation mit Podman hoch. Der Test lief unter Fedora 36 mit Podman 4.0.2 und unter Debian “Sid” (Siduction) mit Podman 3.4.4. Abgesehen von der Podman-Installation fallen die Anleitungen identisch aus.

Während der Tests lief Fedora 36 in einem Proxmox-Container, Siduction dagegen fest auf einem Notebook. Die Installation von Podman erfolgt unter Fedora mittels sudo dnf install podman cockpit-podman und unter Debian mit dem Aufruf sudo apt install podman cockpit-podman. Das sollte analog auch unter Debian Stable und dessen Derivaten funktionieren. Durch das Verwenden älterer Versionen von Podman kommt es mitunter zu Abweichungen im Verhalten.

Um eine noch bessere Integration zwischen den Containern und dem Host zu erreichen, installieren Sie zusätzlich das Paket Toolbox [6]. So lassen sich per Dnf Pakete im Container installieren, USB-Geräte werden durchgereicht und das Home-Verzeichnis des Hosts integriert (Abbildung 2).

Abbildung 2: Toolbox dient als praktisches Helferlein, das im Zusammenhang mit unveränderlichen Dateisystemen bei Fedora entstand.

Abbildung 2: Toolbox dient als praktisches Helferlein, das im Zusammenhang mit unveränderlichen Dateisystemen bei Fedora entstand.

Konfiguration

Zunächst legen Sie für die zu erstellende Nextcloud im Podman-Container drei Volumes an (Listing 1). Ein Volume [7] dient in diesem Zusammenhang als Speichergerät, das Podman erstellt und verwaltet und das es erlaubt, Daten zwischen Container und Host zu verschieben und zu bearbeiten. Volumes erstellen Sie vorab mit dem Befehl podman volume oder direkt beim Einrichten von Containern (Abbildung 3).

Listing 1

Volumes

$ podman volume create nextcloud-app
$ podman volume create nextcloud-data
$ podman volume create nextcloud-db

Abbildung 3: Die Grundlage unseres Projekts besteht aus drei Volumes, die Sie mit einfachen Befehlen schnell erstellen. Sie erhöhen die Flexibilität der Container, indem Sie es erlauben, Daten zwischen Container und Host zu verschieben und zu bearbeiten.

Abbildung 3: Die Grundlage unseres Projekts besteht aus drei Volumes, die Sie mit einfachen Befehlen schnell erstellen. Sie erhöhen die Flexibilität der Container, indem Sie es erlauben, Daten zwischen Container und Host zu verschieben und zu bearbeiten.

Als Nächstes erstellen Sie mit podman network create nextcloud-net ein neues Netzwerk, dessen Eigenschaften Sie anschließend mit podman network inspect nextcloud-net inspizieren. Jetzt geht es bereits an das Erstellen der Container, zunächst für die MariaDB-Datenbank. Alternativ könnten Sie auch PostgreSQL einspannen, SQLite eignet sich für Nextcloud weniger. Die nötigen Befehle und Angaben für das Aufsetzen des Datenbank-Containers finden Sie in Listing 2.

Listing 2

MariaDB im Container

podman run --detach \
  --env MYSQL_DATABASE=nextcloud  \
  --env MYSQL_USER=nextcloud \
  --env MYSQL_PASSWORD=DB-User-Passwort \
  --env MYSQL_ROOT_PASSWORD=DB-Root-Passwort \
  --volume nextcloud-db:/var/lib/mysql \
  --network nextcloud-net \
  --restart on-failure \
  --name nextcloud-db \
  docker.io/library/mariadb:10

Der Befehl podman run \ öffnet eine interaktive Shell, in der Sie die Eigenschaften der Datenbank festlegen [8]. Achten Sie darauf, das DB-User-Passwort und das DB-Root-Passwort entsprechend zu ersetzen und zu merken, Sie brauchen sie im späteren Verlauf noch. Den Erfolg kontrollieren Sie mit podman container ls, das den laufenden Container anzeigt.

Nun geht es an die Nextcloud selbst. Auch hier greift dasselbe Prinzip, wie Listing 3 demonstriert. Achten Sie auch hier darauf, das DB-User-Passwort aus dem DB-Container zu verwenden sowie den NC-Admin und das NC-Passwort zu ersetzen.

Listing 3

Nextcloud ausrollen

podman run --detach \
  --env MYSQL_HOST=nextcloud-db.dns.podman \
  --env MYSQL_DATABASE=nextcloud \
  --env MYSQL_USER=nextcloud \
  --env MYSQL_PASSWORD=DB-User-Passwort \
  --env NEXTCLOUD_ADMIN_USER=NC-Admin \
  --env NEXTCLOUD_ADMIN_PASSWORD=NC-Passwort \
  --volume nextcloud-app:/var/www/html \
  --volume nextcloud-data:/var/www/html/data \
  --network nextcloud-net \
  --restart on-failure \
  --name nextcloud \
  --publish 8080:80 \
  docker.io/library/nextcloud:latest

Nach dem Erfüllen der Voraussetzungen rufen Sie im Webbrowser die Adresse http://localhost:8080 auf, wo Sie Nextcloud 23 begrüßt und Sie wie gewohnt die Installation grafisch fortsetzen. Die env-Parameter können Sie auch in eine Datei schreiben und diese dann mit --env-file /Pfad/zur/Datei einbinden.

Setup

Die hier vorgenommene Installation genügt für den Einsatz von Nextcloud im Heimnetz. In diesem einfachen Setup laufen alle Container in einem Pod. Soll ein Zugriff von außen erfolgen, benötigen Sie dazu weitere Container. TLS-Verschlüsselung zum Absichern lässt sich unter anderem über den Proxy Traefik, über Httpd, Nginx oder Caddy realisieren.

Binden Sie Podman als Systemd-Dienst ein, vereinfachen Sie durch die zusätzliche Angabe von label=io.containers.autoupdate=image und podman generate systemd --new beim Erstellen eines Containers die Aktualisierung der Images per podman auto-update [9]. Nach Abschluss der Vorarbeiten rufen Sie Nextcloud im Browser über die URL http://localhost:8080 auf und schließen die Installation dort wie gewohnt ab (Abbildung 4). Die Pfade zu den drei wichtigsten Konfigurationsdateien für Podman finden Sie in Listing 4.

Abbildung 4: Läuft alles nach Plan, erwartet Sie im Browser der grafische Abschluss der Nextcloud-Installation. Viel schneller lässt sich Nextcloud kaum ausrollen.

Abbildung 4: Läuft alles nach Plan, erwartet Sie im Browser der grafische Abschluss der Nextcloud-Installation. Viel schneller lässt sich Nextcloud kaum ausrollen.

Listing 4

Podman-Konfiguration

/usr/share/containers/containers.conf
/etc/containers/containers.conf
$HOME/.config/containers/containers.conf

Wie erwähnt, bedienen Sie Podman entweder über die Kommandozeile oder über die Administrationsoberfläche Cockpit, die Sie über das Paket cockpit-podman installieren. Dann rufen Sie Cockpit per http://localhost:9090/podman im Browser auf (Abbildung 5). Die Weboberfläche erlaubt es Ihnen, Ihre Container und Images zu inspizieren (Abbildung 6) und zu verwalten (Abbildung 7).

Abbildung 5: Das Einbinden von Podman in Cockpit erleichtert das Aufsetzen der Container. Das fängt bereits beim Download des benötigten Abbilds aus der Docker-Registry an.

Abbildung 5: Das Einbinden von Podman in Cockpit erleichtert das Aufsetzen der Container. Das fängt bereits beim Download des benötigten Abbilds aus der Docker-Registry an.


Abbildung 6: Nach dem Herunterladen der Abbilder erstellen Sie die Container, die die Anwendungen beherbergen sollen.

Abbildung 6: Nach dem Herunterladen der Abbilder erstellen Sie die Container, die die Anwendungen beherbergen sollen.


Abbildung 7: Der Zustand der Container lässt sich jederzeit nach bestimmten Kriterien untersuchen.

Abbildung 7: Der Zustand der Container lässt sich jederzeit nach bestimmten Kriterien untersuchen.

Fazit

Einen ersten Überblick über die Funktionen von Podman vermittelt die Manpage, die Webseite Podman.io bietet eine Vielzahl an Verweisen zur weiteren Recherche. Der Autor ist der Ansicht, die Grundlagen von Podman lassen sich schneller erlernen als die von Docker. Wenn Sie Docker bereits aus der Praxis kennen, fällt Ihnen der Umstieg zu Podman sicherlich leicht. Um dem Muskelgedächtnis in diesem Fall auf die Sprünge zu helfen, tragen Sie alias docker='podman' in Ihre .bashrc ein, um Docker-Befehle wie pull, push, build, commit, tag und andere auch weiterhin zu nutzen.

Nachteile gegenüber Docker fand der Autor während der Tests keine. Der größte Vorteil besteht in der höheren Sicherheit durch den Wegfall des Root-Zwangs. Zudem weiß die einfache Administration durch die Integration in Cockpit zu gefallen. Podman ist auf einem guten Weg, Docker zu ersetzen, kämpft aber noch mit Kinderkrankheiten, die besonders bei der Arbeit mit entfernten Maschinen auftreten. Der hier beschriebene einfache Einstieg lädt zur praxisbezogenen Erweiterung der eigenen Container-Skills ein. (tle)

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDF
LinuxUser 06/2022 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

1 Kommentar
Älteste
Neuste Beste Bewertung
Dieter55
3 Jahre her

Ich bekomme ‘Internal server error’ nachdem ich die Schritte wie beschrieben ausgeführt habe.
Nachdem ich die Volumes neu erzeugt habe geht’s dann doch.

Last edited 3 Jahre her by Dieter55
Nach oben