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

Stellen Sie Nextcloud auf Docker mit Ansible bereit

Übersicht

In diesem Artikel werden wir die Schritte zur Bereitstellung von Nextcloud auf Docker mit Ansible durchgehen. Zweck dieses Verfahrens ist die Automatisierung des Bereitstellungsprozesses von Nextcloud auf Docker mit dem Ansible Playbook.

Um Nextcloud auf Docker mit Ansible erfolgreich bereitzustellen, müssen zunächst einige Anforderungen konfiguriert werden (unten in den Voraussetzungen aufgeführt)

Voraussetzungen

  • Docker installiert und ausgeführt auf dem Ziel-Host-Rechner (Docker-Installation kann auch mit Ansible automatisiert werden – Link zum POST)
  • SSH-Zugriff auf den Remote-Hosts mit den in der Ansible-Hosts-Datei voreingestellten Anmeldeparametern aktiviert
  • Ansible auf Client-Rechner (Ihrem Rechner) installiert
  • Python und Python-Docker-Modul für Ansible auf dem Zielcomputer installiert
  • Python auf Ihrem lokalen Rechner installiert

Installieren Sie das Python-Docker-Modul für Ansible

Die meisten Linux-Distributionen haben Python3 vorinstalliert, aber für andere fehlt möglicherweise das Python-Docker-Modul, das Ansible verwendet. Sie werden wissen, dass dies der Fall ist, wenn Sie eine Fehlermeldung erhalten, in der erwähnt wird, dass das Modul fehlt oder nicht gefunden wurde. Beispielbild des Fehlers unten:

Das erwähnte Modul ist eigentlich das Docker SDK, das Python verwendet, um mit Docker zu arbeiten. Am einfachsten lässt sich das Python-Docker-Modul mit dem Tool „pip“ installieren. Wenn das „pip“-Tool fehlt, können Sie einfach das Python-Docker-Modul installieren und dann damit installieren:

Debian/Ubuntusudo apt install python3-pipFedorasudo dnf install python3-pipCentOS/RedHatsudo yum python3-pip

Nachdem Sie das Pip installiert haben, führen Sie den Befehl aus, um das Docker-Modul zu installieren:

Pip3-Installations-Docker

Wenn Sie zufällig auf einen Fehler in Ansible stoßen, dass das Python-Modul nicht gefunden werden kann, fügen Sie eine Python-Interpreter-Variable in Ihre Hosts-Datei ein. In den meisten Fällen befindet es sich entweder in "/usr/bin/python3" oder "/usr/lib/python3" .

Fehler sieht in etwa so aus:

Die Interpreter-Variable in der Hosts-Datei sieht etwa so aus:

ansible_python_interpreter=/usr/bin/python3

Notieren Sie die Hosts in der Hosts-Datei mit den Anmeldeparametern

Erster Schritt – Hinzufügen der erforderlichen Parameter in der Hosts-Datei, damit Ansible unsere Maschine erreichen, sich anmelden und mit ihr interagieren kann:

sudo nano /etc/ansible/hosts

Fügen Sie in der Hosts-Datei die Parameter hinzu, die ungefähr so ​​aussehen:

Nachdem die erforderlichen Parameter für unseren Remote-Host hinzugefügt wurden, speichern Sie die Datei und beenden Sie.

Ansible Playbook für Nextcloud-Bereitstellung auf Docker

Für diese Bereitstellung verwenden wir das folgende Playbook:

---- hosts:docker vars:db_volume:mariadb nextcloud:nextcloud task:- name:Bereitstellen des MariaDB-Servers docker_container:image:mariadb name:mariadb volumes:- "{{db_volume}}:/var/lib/mysql " env:MYSQL_ROOT_PASSWORD:somerootpassword MYSQL_PASSWORD:somemysqlpassword MYSQL_DATABASE:db MYSQL_USER:mysqluser - name:Deploy Nextcloud docker_container:image:nextcloud name:nextcloud restart_policy:always ports:- "8080:80" links:- "{{db_volume}}:/ var/lib/mysql“ Volumes:- „{{nextcloud}}:/var/www/html“ env:MYSQL_PASSWORD:somemysqlpassword MYSQL_DATABASE:db MYSQL_USER:mysqluser MYSQL_HOST:mariadb

Fühlen Sie sich frei, es einfach zu kopieren.

Playbook-Aufschlüsselung:

hosts:docker // Variable, um nur auf Maschinenhosts abzuzielen, die sich in der Docker-Gruppe befinden
vars: db_volume:mariadb  nextcloud:nextcloud  // [OPTIONAL]  definierte Variablen für jeden Container. Diese werden zum Einstellen der Volumes auf dem Host verwendet und stimmen mit den Containernamen überein.
Aufgaben://  Eine Aufgabe definiert, die einen MariaDB-Container (MariaDB-Datenbankserver in Containerform) bereitstellt. Die Aufgabe zieht das offizielle Docker-Image von MariaDB vom Docker-Hub herunter, legt einen Containernamen „mariadb“ fest und legt ein persistentes Volume auf dem Hostcomputer für die Datenbankspeicherung fest.- Name:MariaDB-Server bereitstellen //  Aufgabennamedocker_container://  Docker-Funktion, die Ansible verwenden wirdimage:mariadb //  Docker-Image zum Pulldownname:mariadb //  Geben Sie den ContainernamenVolumes an:- "{{db_volume}}:/var/lib/mysql" //  Geben Sie ein Volume auf dem Hostcomputer für die dauerhafte Speicherung an
env://  Umgebungsvariablen zum Definieren von Parametern für die Datenbank wie das Root-Passwort, das Admin-Benutzerpasswort, der Name der Datenbank und der Benutzername des neuen Benutzers auf dem MariaDB-ServerMYSQL_ROOT_PASSWORD:somerootpassword // MySQL-Root-Passwort MYSQL_PASSWORD:ein mysqlpasswort //  MySQL-Administrator-/Standardbenutzerpasswort, das von NextcloudMYSQL_DATABASE verwendet werden soll:db //  Name der MySQL-DatenbankMYSQL_USER:mysqluser //  Admin-/Standardbenutzer-Benutzername, den Nextcloud verwenden soll
// Dies ist die Aufgabe, die den Nextcloud-Docker-Container bereitstellt. Genau wie beim MariaDB-Container zieht Ansible das offizielle Nextcloud-Image aus dem Docker-Hub herunter. Hier haben wir auch die Richtlinie zum Neustart des Containers angegeben (wann der Container neu gestartet werden soll) und auch die Anzahl der Ports festgelegt, die auf dem Container verfügbar gemacht und an den Host gebunden werden sollen, sodass auf den Container über den Browser und das HTTP-Protokoll zugegriffen werden kann. - Name :Nextcloud bereitstellen //  Aufgabennamedocker_container://  Docker-Funktion, die Ansible verwenden wirdimage:nextcloud //  Docker-Image zum Pulldownname:nextcloud //  Geben Sie den Containernamen restart_policy:always //  an Setzen Sie das Attribut für die Container-Neustartports:- "8080:80" //  Geben Sie Ports an, die auf dem Container verfügbar gemacht werden sollen, damit sie über Webbrowserlinks zugänglich sind:- "{{db_volume}}:/var/lib/mysql //  Variable zur Angabe des Links zum MySQL-Server, damit Nextcloud sich mit den Datenbankvolumes verbinden kann:- "{{nextcloud}}:/var/www/html" //  Geben Sie ein Volume auf dem Hostcomputer für die dauerhafte Speicherung an
// Umgebungsvariablen für die MariaDB-Datenbank, die von Nextcloud verwendet werden, um eine Verbindung zur Datenbank herzustellen und die Datenbank zur Datenspeicherung zu verwenden.env:MYSQL_PASSWORD:somemysqlpassword //  Variable zur Angabe von MySQL für Nextcloud zur VerwendungMYSQL_DATABASE:db //  MySQL-Datenbankname, der Nextcloud mit MYSQL_USER verbindet:mysqluser //  MySQL-Benutzer für Nextcloud zur VerwendungMYSQL_HOST:mariadb //  MySQL-Datenbankserver, zu dem eine Verbindung hergestellt werden soll (Docker-Containername, den wir zuvor festgelegt haben)

Bereitstellen von Nextcloud auf Docker mit Ansible

Jetzt, da wir unser Playbook haben, können wir es jetzt ausführen:

ansible-playbook nextcloud-ansible -l docker

Erwartetes Ergebnis und prüfen, ob die Container bereitgestellt sind und ausgeführt werden:

Prüfen Sie, ob die Nextcloud über den Browser erreichbar ist:

Kleine Anmerkung zum möglichen Problem mit der Datenbank:

Beim Versuch, ein Konto für Nextcloud zu erstellen, wird möglicherweise die folgende Fehlermeldung auf der Seite zum Abschließen der Einrichtung angezeigt:

„InnoDB weigert sich, Tabellen mit ROW_FORMAT=COMPRESSED oder KEY_BLOCK_SIZE zu schreiben“

Dies begann bei Nextcloud Version 21 und höher. Im Wesentlichen unterstützt Nextcloud keine InnoDB-Komprimierung auf den Datenbanken. Die Problemumgehung hierfür besteht darin, einfach die InnoDB-Komprimierung zu deaktivieren und dazu die folgende Konfiguration in der Ansible-.yaml-Datei in der MariaDB-Konfiguration hinzuzufügen und die Bereitstellung erneut auszuführen:

“Befehl:–transaction-isolation=READ-COMMITTED –binlog-format=ROW –innodb-file-per-table=1 –skip-innodb-read-only-compressed“

Die vollständige MariaDB-Konfiguration sollte folgendermaßen aussehen:

tasks:- name:Bereitstellen des MariaDB-Servers   docker_container:    image:mariadb     name:mariadb     command:--transaction-isolation=READ-COMMITTED --binlog-format=ROW --innodb-file-per-table=1 -- skip-innodb-read-only-compressed     Volumes:      - "{{db_volume}}:/var/lib/mysql"     env:      MYSQL_ROOT_PASSWORD:somerootpassword       MYSQL_PASSWORD:somemysqlpassword       MYSQL_DATABASE:db       MYSQL_USER:mySQL_USER:mysqluser 

Nachdem Sie diese Konfiguration erneut ausgeführt haben, sollte das Problem behoben sein.

Zusammenfassung

Um den Artikel zusammenzufassen – wir haben es geschafft, Nextcloud auf Docker mit Ansible erfolgreich bereitzustellen und damit den Prozess der Bereitstellung von Nextcloud auf Docker zu automatisieren. Die Ansible-Umgebung musste jedoch mit Python und dem Python-Docker-Modul eingerichtet werden, damit dieser Prozess erfolgreich war. Danach haben wir das Ansible-Playbook geschrieben und ausgeführt, das Nextcloud mit der Datenbank bereitstellt und auch über Datenpersistenz verfügt, sodass die Daten und Dateien nicht im Docker-Container gespeichert werden.

Vielen Dank für Ihre Zeit…


Docker
  1. Virtuelle Multipass-Maschinen mithilfe von Ansible

  2. Richten Sie Nextcloud mit Redis mit Docker ein

  3. Stellen Sie WordPress auf Docker mit Ansible bereit

  4. So installieren Sie Docker mit Ansible [Debian/Ubuntu]

  5. So installieren Sie WordPress mit Docker

So installieren Sie Ansible unter Ubuntu 20.04

So stellen Sie Pi-Hole unter Debian 11 bereit

Installieren Sie Navidrome mit Docker

So installieren Sie Gitea auf Ubuntu mit Docker

Stellen Sie eine Produktions-Docker-MariaDB-Installation bereit

Verwenden von Docker Desktop zum Verwalten eines Containers