title: Nextcloud Serverinstallation auf Almalinux 9.x und Debian 12 mit Docker Compose, Nginx als Reverse Proxy und Monitoring von Docker mit PRTG erstellen
6. [Datenbank und Dateien von einer bereits vorhandenen Instanz migrieren](#datenbank-und-dateien-von-einer-bereits-vorhandenen-instanz-migrieren)
6.1 [Weitere Optimierungen an der Datenbank nach der Migration](#weitere-optimierungen-an-der-datenbank-nach-der-migration)
7. [Volltextsuche und OCR mit migrieren und installieren](#volltextsuche-und-ocr-mit-migrieren-und-installieren)
7.1. [Anpassungen für ImageMagick](#anpassungen-für-imagemagick)
7.2. [Anpassung für Nextcloud](#anpassung-für-nextcloud)
7.3. [Anpassungen für ElasticSearch](#anpassungen-für-elasticsearch)
8. [Quellen](#quellen)
- Hinweis: bei der nachfolgenden Anleitung ist der Domainname durch den Namen "webseite" auszutauschen.
## Almalinux herunterladen und installieren <a name="almalinux-herunterladen-und-installieren"></a>
Almalinux kann über folgenden Direktlink herunterladen werden:
[Link zum herunterladen von Almalinux](http://almalinux.mirrors.itworxx.de/9/isos/x86_64/AlmaLinux-9-latest-x86_64-minimal.iso)
oder Debian unter diesem Link:
[Link zum herunterladen von Debian](https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-12.1.0-amd64-netinst.iso)
Bitte darauf achten das man eine Festplatte mit mindesten 64 GB als Datenträger, 2 vCPUs und 4 GB RAM einbindet.
Anschließend muss die Zeitzone auf Europe/Berlin eingestellt werden.
Den Root-Benutzer kann man deaktivieren und als Benutzer "nli-server" mit Administratorrechten anlegen.
Falls das Netzwerk noch statisch eingerichtet werden muss, kann dies unter dem Reiter Netwerk eingerichtet werden, dabei kann auch noch der Hostname gesetzt werden, anschließend muss der Schriit noch extra bestätigt werden.
Bitte noch darauf achten das man eine Minimalinstallation ausgewählt hat und nicht eine normale mit der Standardsoftware von Almalinux, weil sonst der Gnome Desktop mit installiert wird und den brauchen wir nicht für einen Server.
## Distrubtion starten und docker compose einrichten <a name="distrubtion-starten-und-docker-compose-einrichten"></a>
Anschließend kann man die VM neustarten und sich per SSH auf dem eben bereits erstellen Benutzer verbinden.
### Installation unter Almalinux <a name="installation-unter-almalinux"></a>
Für die Installation von Docker Compose können wir die Offiziele Dokumentation von CentOS verwenden, da Almalinux mehr oder weniger ein Fork davon ist.
[Link für die Installation von Docker](https://docs.docker.com/engine/install/centos/)
Um die Packete des Systems upzudaten führen wir folgenden Kommando aus:
~~~
sudo dnf update
~~~
Wir integrieren das Repository nun erstmal in die yum Konfiguration.
Um den Zeitserver einzurichten bitte noch folgende Befehle als ROOT ausführen:
~~~
dnf install chrony
~~~
Crony als Systemweiten Service einrichten
~~~
systemctl enable --now chronyd
~~~
die Firewall noch ergänzen
~~~
firewall-cmd --permanent --add-service=ntp
firewall-cmd --reload
~~~
und danach nochmal neustarten
~~~
systemctl restart chronyd
~~~
## Einrichten von mehreren Festplatten <a name="einrichten-von-mehreren-festplatten"></a>
Wenn man die Daten getrennt von dem Betriebssytem haben möchte, formatiert man erstmal die neue Festplatte mit fdisk. Mit folgendem Befehl sehen wir uns die verfügbaren Festplatten genauer an.
~~~
fdisk -l
Disk /dev/sda: 1 TiB, 1099511627776 bytes, 2147483648 sectors
Writing superblocks and filesystem accounting information: done
~~~
Damit sie beim nächsten Start automatisch gemounted wird, trägt man die Festplatte noch in die Fstab ein. Davor müssen wir ersteinmal die UUID der Festplatte herausfinden.
~~~
blkid
~~~
und danach denn Ordner erstellen und die /etc/fstab bearbeiten.
und anschließend mit STRG + X und dann Y abspeicher und den automatischen Mount ausführen.
~~~
mount -a
~~~
## Installieren von der Nextcloud <a name="installieren-von-der-nextcloud"></a>
Zuerst legen wir uns passende Ordner-Strukturen an.
~~~
mkdir -p /opt/containers/nextcloud/{db,app,daten}
~~~
und Optional falls man die Daten von Nextcloud wo anders gespeichert haben möchte.
~~~
mkdir -p /opt/data/nextcloud/daten
~~~
Um den Texteditor Nano und Vim zu installieren, benutzt ihr folgenden Befehl.
~~~
sudo dnf install nano vim bash-completion
~~~
oder für Debian:
~~~
sudo apt install nano vim bash-completion
~~~
Nun legen wir die eigentliche Docker Datei an. Hierfür habe ich mir die offizielle Nextcloud Compose genommen und etwas modifiziert. Die Datei könnt ihr mit dem Editor eurer Wahl bearbeiten.
Die Umgebgungsvariablen OVERWRITEPROTOCOL, OVERWRITECLIURL und OVERWRITEHOST sollten erst gesetzt worden sein, wenn der Reverse Proxy mit SSL-Zertifikat bereits eingerichtet wurde.
Falls eventuell das automatische anlegen der Datenbank, oder die Datenbank nicht von der Nextcloud automatisch übernommen wurde kann mit dem Tool *dos2unix* der Text in das Unix Format konventiert werden.
## Nextcloud Server starten <a name="nextcloud-server-starten"></a>
Den Server startet ihr wie gewohnt mit folgendem Befehl:
~~~
docker compose -f /opt/containers/nextcloud/docker-compose.yml up -d
~~~
Falls Probleme auftreten solltet, wechselt in das Verzeichnis wo die Docker Compose Datei liegt und für einen dieser folgenden Befehlen aus.
~~~
cd /opt/containers/nextcloud/
docker compose logs nextcloud-app
docker compose logs nextcloud-db
docker compose logs nextcloud-redis
~~~
## Verbindung zur Nextcloud per Port Forwarding herstellen <a name="verbindung-zur-nextcloud-per-port-forwarding-herstellen"></a>
Falls ihr noch nicht auf eure Nextcloud zugreifen könnt, weil sie von einer Firewall blockiert wird, oder auf einem anderem Server liegt könnt ihr mittels Port Forwarding drauf zugreifen.
Unter Linux verwendet ihr folgenden Befehl:
~~~
ssh -L 8080:127.0.0.1:8080 server -N
~~~
Unter Putty fügt ihr fügt ihr folgendes im Connection -> SSH -> Tunnels reiter hinzu.
This command will add a temporary ssl off directive to ensure that SSL directives are not active. This may cause NGINX to emit a warning, which is safe to ignore. The directive will be removed once Certbot is configured.
Führe einen reload deines NGINX Server aus:
~~~
sudo nginx -t && sudo systemctl reload nginx
~~~
Erhalte SSL Zertifikate von Let's Encrypt mittels Certbot:
Und das war es eigentlich schon, wichtig dabei ist das euer Server als A-Record im Domainbestellsystem hinterlegt worden ist.
## Admin Benutzer für die Nextcloud anlegen <a name="admin-benutzer-für-die-nextcloud-anlegen"></a>
Wir öffnen dann die Webseite zur Nextcloud: [Link zur Nextcloud](http://127.0.0.1:8080)
Wichtig dabei zu beachten ist, wenn der Admin Benutzer angelegt ist, ist nur noch ein Zugriff über den Reverse Proxy mit Nginx auf dem *OVERWRITECLIURL* möglich der dann im vorherigen Schritt eingerichtet wurde. Deswegen ist es auch Sinnvoll erst diesen Schritt erst auszuführen wenn der Nginx auch komplett läuft und auf die FQDN zugreifen kann.
## Optimierungen <a name="optimierungen"></a>
Wenn ihr oben rechts auf eueren “Buchstaben”. Dann wählt ihr “Einstellungen” -> “Übersicht” aus. Nun solltet ihr feststellen, dass Nextcloud noch “Optimierungsbedarf” sieht. Dies wollen wir nun tun.
Dies setzt die Standardregion auf Deutschland. Beispiele dazu findet ihr [hier](https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/config_sample_php_parameters.html). Nun könnt ihr die Datei wieder schließen.
Bei mir sieht es dann so aus:
~~~
'dbuser' => 'nextcloud',
'dbpassword' => 'test',
'installed' => true,
'default_phone_region' => 'DE',
);
~~~
## Container neu starten <a name="container-neu-starten"></a>
Nun starten wir Nextcloud neu um sicherzugehen, dass alle Einstellungen übernommen werden.
~~~
docker compose -f /opt/containers/nextcloud/docker-compose.yml down
docker compose -f /opt/containers/nextcloud/docker-compose.yml up -d
Nun fügen wir auf unserem Server noch einen Cron Eintrag hinzu. Dieser bewirkt, dass Nextcloud alle 5 Minuten die Hintergrundjobs abarbeitet. Um Cron zu starten gebt ihr folgendes ein:
~~~
crontab -e
~~~
Beim ersten Start erscheint nun folgende Meldung. Wählt hier “1” aus.
~~~
no crontab for root - using an empty one
Select an editor. To change later, run 'select-editor'.
Diese Zeile bewirkt, dass euer Server alle 5 Minuten die “cron.php” Datei ausführt in eurem Nextcloud Container.
Nachdem ihr dies eingerichtet habt, könnt ihr dies auch kontrollieren. Geht dazu in eure Nextcloud als Administrator. Wählt dann bei Hintergrundaufgaben noch “Cron (Empfohlen)”. Hier solltet ihr nun folgendes in den Einstellungen sehen. Wichtig ist, dass die “Letzte Aufgabe ausgeführt…” maximal 5 Minuten sein sollte. Wenn dies so ist, dann funktioniert alles.
Um nun die neue Version von Nextcloud herunterzuladen machen wir erst einmal ein Backup von den Container, da Backups wichtig und richtig sind.
~~~
cd /opt/containers/
tar -czf nextcloud-backup-$(date "+%F").tar.gz nextcloud/
~~~
nun müssen folgende Befehle ausgeführt werden damit die neuen Images gepulled werden und anschließend ausgeführt werden.
~~~
cd nextcloud
docker compose pull
docker compose up -d
~~~
## Datenbank und Dateien von einer bereits vorhandenen Instanz migrieren <a name="datenbank-und-dateien-von-einer-bereits-vorhandenen-instanz-migrieren"></a>
Hierdurch werden die Nextcloud Datenbank vom alten System gedumpt:
und folgendes beim Nextcloud ändern bzw. ausdokumentieren:
~~~
# image: nextcloud:27
build: ./nextcloud-app
~~~
### Anpassungen für ImageMagick <a name="anpassungen-für-imagemagick"></a>
ImageMagick wird verwendet um aus PDF Seiten Fotos zu erstellen. Diese können später per OCR erkannt werden. Es gibt derzeit wohl ein kleines Hindernis ([Github Quelle](https://github.com/nextcloud/files_fulltextsearch/issues/100)) weshalb wir hier noch eine extra Anpassung vornehmen müssen.
RUN apt install -y libmagickwand-dev --no-install-recommends
RUN pecl install imagick; exit 0
RUN docker-php-ext-enable imagick
RUN rm -rf /var/lib/apt/lists/*
~~~
### Anpassungen für ElasticSearch <a name="anpassungen-für-elasticsearch"></a>
Um die OCR Erkennung in ElasticSearch zu realisieren benötigen wir noch das Programm [Tesseract](https://tesseract-ocr.github.io/tessdoc/4.0-Docker-Containers.html). Daher müssen wir uns den ElasticSearch Container auch selbst bauen.
RUN /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch ingest-attachment
RUN apt-get update
RUN apt-get upgrade -y
RUN apt-get install -y tesseract-ocr tesseract-ocr-deu tesseract-ocr-eng
~~~
Hier könnt ihr noch weitere Sprachen installieren zur OCR Erkennung. Eine Übersicht alles Sprachen findet ihr [hier](https://download.opensuse.org/repositories/home:/Alexander_Pozdnyakov/CentOS_8/noarch/).