-
Was ist ein vServer?
-
vServer und Sicherheit
-
vServer - Anwendungsfälle
-
vServer bei dogado
-
vServer und Plesk
-
vServer Betriebssyteme
-
vServer Glossar
0. Überblick
- Verwendetes System: Debian 11 vServer XXL 64 bit
- Genutzter User: Ich nehme alles als „root“ vor
- Zeitdauer: ca. 15 Minuten
- Schwierigkeit: Einfach. Nur Code kopieren 😉
- Besonderheiten:
- Grundlage ist folgende Anleitung: https://www.dogado.de/vps/vserver-anwendungsfaelle/traefik-reverseproxy-auf-vserver-installieren Diese Anleitung muss zuerst ausgeführt werden.
- Die Installation von Docker / Docker Compose wird hier vorausgesetzt.
1. Nextcloud mit Elasticsearch Installieren
1.1 Einleitung
Nextcloud ist eine open source Software welche es ermöglicht eine private Cloud zu betreiben. Der Vorteil von Nextcloud ist, dass es genauso einfach zu bedienen ist wie beispielsweise Dropbox, aber alle Daten auf dem eigenen Server gespeichert werden. So weiß man jederzeit wer Zugriff auf die eigenen Dateien hat und wo diese gespeichert sind. Nextcloud wird auch in einer kostenpflichtigen Enterprise Version angeboten, welche zusätzlichen Support bietet. Nextcloud kann über einen internen Store beliebig erweitert werden. So ist es zum Beispiel möglich OnlyOffice zu integrieren, Kalender oder Kontakte zu verwalten oder Videokonferenzen zu betreiben.
Elasticsearch ist eine Engine, welche viele Daten durchsuchen kann. Wir wollen Elasticsearch dazu nutzen, dass wir alle unsere Nextcloud Dateien durchsuchen können.
1.2 Infos zu yml Dateien
Bei yml Dateien ist es sehr wichtig, dass die Zeilen alle richtig eingerückt sind. Die Zeilen MÜSSEN immer mit der Leertaste eingerückt werden. Es dürfen KEINE Tabs enthalten sein. Ihr könnt den nachfolgenden Code immer online „überprüfen“ lassen. Die meisten Fehler entstehen nämlich durch die falsche Formatierung. Ein Dienst zum Überprüfen ist zum Beispiel: https://codebeautify.org/yaml-validator
1.3 Vorbereitung
Diese Anleitung basiert auf dem aktuellen Debian 10 Betriebssystem. Nextcloud werden wir unter Docker realisieren. Dies ermöglicht uns später sehr schnelle Updates und eine schnelle Installation. Um Nextcloud neben anderen Diensten auf unserem Server betreiben zu können, nutzen wir hier den Reverse Proxy Traefik. Die Anleitung dazu finden Sie hier: https://www.dogado.de/vps/vserver-anwendungsfaelle/traefik-reverseproxy-auf-vserver-installieren
1.3.1 Verzeichnis erstellen
Wir erstellen uns ein neues Verzeichnis, in welchem wir später alle Daten von Nextcloud und Elasticsearch abspeichen. Dazu geben wir folgendes in der Konsole ein:
mkdir -p /opt/containers/nextcloud/{database,app,daten,nextcloud-app,imagemagick}
mkdir -p /opt/containers/nextcloud/elasticsearch/data
chmod 777 -R /opt/containers/nextcloud/elasticsearch/data
Ihr könnt hier auch ein anderes Verzeichnis verwenden. Müsst dann aber die gesamte Anleitung entsprechend anpassen.
1.3.2 docker-compose.yml erstellen
Nun können wir mit der eigentlichen „Installation“ von Nextcloud und Elasticsearch beginnen. Dazu öffnet ihr folgende Datei:
nano /opt/containers/nextcloud/docker-compose.yml
Nun kopiert ihr folgenden Code in die Datei. Dieser Code ist unser Bauplan für unser Projekt.
version: '3.3'
services:
nextcloud-db:
image: mariadb
container_name: nextcloud-db
command: --transaction-isolation=READ-COMMITTED --log-bin=ROW --innodb_read_only_compressed=OFF
restart: unless-stopped
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- /opt/containers/nextcloud/database:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=test #SQL root Passwort eingeben
- MYSQL_PASSWORD=test #SQL Benutzer Passwort eingeben
- MYSQL_DATABASE=nextcloud #Datenbank Name
- MYSQL_USER=nextcloud #SQL Nutzername
- MYSQL_INITDB_SKIP_TZINFO=1
networks:
- default
nextcloud-redis:
image: redis:alpine
container_name: nextcloud-redis
hostname: nextcloud-redis
networks:
- default
restart: unless-stopped
command: redis-server --requirepass test # Redis Passwort eingeben
nextcloud-app:
build: ./nextcloud-app
container_name: nextcloud-app
restart: unless-stopped
depends_on:
- nextcloud-db
- nextcloud-redis
environment:
REDIS_HOST: nextcloud-redis
REDIS_HOST_PASSWORD: test # Redis Passwort von oben wieder eingeben
volumes:
- /opt/containers/nextcloud/app:/var/www/html
- /opt/containers/nextcloud/daten:/var/www/html/data
- /opt/containers/nextcloud/imagemagick/policy.xml:/etc/ImageMagick-6/policy.xml
labels:
- "traefik.enable=true"
- "traefik.http.routers.nextcloud-app.entrypoints=http"
- "traefik.http.routers.nextcloud-app.rule=Host(`nextcloud.euredomain.de`)"
- "traefik.http.middlewares.nextcloud-app-https-redirect.redirectscheme.scheme=https"
- "traefik.http.routers.nextcloud-app.middlewares=nextcloud-app-https-redirect"
- "traefik.http.routers.nextcloud-app-secure.entrypoints=https"
- "traefik.http.routers.nextcloud-app-secure.rule=Host(`nextcloud.euredomain.de`)"
- "traefik.http.routers.nextcloud-app-secure.tls=true"
- "traefik.http.routers.nextcloud-app-secure.tls.certresolver=http"
- "traefik.http.routers.nextcloud-app-secure.service=nextcloud-app"
- "traefik.http.services.nextcloud-app.loadbalancer.server.port=80"
- "traefik.docker.network=proxy"
- "traefik.http.routers.nextcloud-app-secure.middlewares=nextcloud-dav,secHeaders@file"
- "traefik.http.middlewares.nextcloud-dav.replacepathregex.regex=^/.well-known/ca(l|rd)dav"
- "traefik.http.middlewares.nextcloud-dav.replacepathregex.replacement=/remote.php/dav/"
networks:
- proxy
- default
elasticsearch:
build: ./elasticsearch
container_name: elasticsearch
restart: unless-stopped
environment:
- discovery.type=single-node
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- /opt/containers/nextcloud/elasticsearch/data:/usr/share/elasticsearch/data
networks:
- default
networks:
proxy:
external: true
Nun müssen wir noch einiges anpassen.
1.3.3 Hostname anpassen
Nun müsst ihr noch den Hostnamen anpassen, über welchen später Nextcloud erreichbar sein soll. Diese beiden Zeilen müsst ihr anpassen.
- "traefik.http.routers. nextcloud-app.rule=Host(`nextcloud.euredomain.de `)"
- "traefik.http.routers. nextcloud-app -secure.rule=Host(`nextcloud.euredomain.de`)"
In meinem Fall also:
- "traefik.http.routers. nextcloud-app.rule=Host(`nextcloud.testbereich.net`)"
- "traefik.http.routers. nextcloud-app-secure.rule=Host(`nextcloud.testbereich.net`)"
Wenn ihr Nextcloud direkt auf eurer „Hauptdomain“ betreiben wollt, dann ändert ihr es folgendermaßen ab:
"traefik.http.routers.nextcloud-app.rule=Host(`www.euredomain.de`,`euredomain.de`)"
"traefik.http.routers.nextcloud-app-secure.rule=Host(`www.euredomain.de`,`euredomain.de`)"
1.3.4 Passwörter anpassen
Nachdem ihr den Hostnamen angepasst habt, solltet / müsst ihr noch die Passwörter anpassen. Vergebt ihr ein langes, sicheres Kennwort.
Folgende Zeilen müsst ihr ändern:
- MYSQL_ROOT_PASSWORD=test #SQL root Passwort eingeben
- MYSQL_PASSWORD=test #SQL Benutzer Passwort eingeben
command: redis-server --requirepass test # Redis Passwort eingeben
REDIS_HOST_PASSWORD: test # Redis Passwort von oben wieder eingeben
Ich ändere also meine Kennwörter ab. Dies könnte beispielsweise so sein:
- MYSQL_ROOT_PASSWORD=fjgz4Anfh!r4 #SQL root Passwort eingeben
- MYSQL_PASSWORD=uhk678!nfha3X #SQL Benutzer Passwort eingeben
command: redis-server --requirepass ugh5212Gf # Redis Passwort eingeben
REDIS_HOST_PASSWORD: ugh5212Gf # Redis Passwort von oben wieder eingeben
1.3.5 Anpassungen für ImageMagick
ImageMagick nutzen wir zum Umwandeln von PDFs in Fotos. Diese können wir dann später per OCR durchsuchen lassen. Hier müssen wir noch eine kleine Anpassung vornehmen.
Dazu öffnet ihr folgende Datei:
nano /opt/containers/nextcloud/imagemagick/policy.xml
Kopiert nun folgendes in die Datei:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE policymap [
<!ELEMENT policymap (policy)+>
<!ATTLIST policymap xmlns CDATA #FIXED ''>
<!ELEMENT policy EMPTY>
<!ATTLIST policy xmlns CDATA #FIXED '' domain NMTOKEN #REQUIRED
name NMTOKEN #IMPLIED pattern CDATA #IMPLIED rights NMTOKEN #IMPLIED
stealth NMTOKEN #IMPLIED value CDATA #IMPLIED>
]>
<policymap>
<!-- <policy domain="system" name="shred" value="2"/> -->
<!-- <policy domain="system" name="precision" value="6"/> -->
<!-- <policy domain="system" name="memory-map" value="anonymous"/> -->
<!-- <policy domain="system" name="max-memory-request" value="256MiB"/> -->
<!-- <policy domain="resource" name="temporary-path" value="/tmp"/> -->
<policy domain="resource" name="memory" value="256MiB"/>
<policy domain="resource" name="map" value="512MiB"/>
<policy domain="resource" name="width" value="16KP"/>
<policy domain="resource" name="height" value="16KP"/>
<!-- <policy domain="resource" name="list-length" value="128"/> -->
<policy domain="resource" name="area" value="128MB"/>
<policy domain="resource" name="disk" value="1GiB"/>
<!-- <policy domain="resource" name="file" value="768"/> -->
<!-- <policy domain="resource" name="thread" value="4"/> -->
<!-- <policy domain="resource" name="throttle" value="0"/> -->
<!-- <policy domain="resource" name="time" value="3600"/> -->
<!-- <policy domain="coder" rights="none" pattern="MVG" /> -->
<!-- <policy domain="module" rights="none" pattern="{PS,PDF,XPS}" /> -->
<!-- <policy domain="delegate" rights="none" pattern="HTTPS" /> -->
<!-- <policy domain="path" rights="none" pattern="@*" /> -->
<!-- <policy domain="cache" name="memory-map" value="anonymous"/> -->
<!-- <policy domain="cache" name="synchronize" value="True"/> -->
<!-- <policy domain="cache" name="shared-secret" value="passphrase" stealth="true"/> -->
<!-- <policy domain="system" name="pixel-cache-memory" value="anonymous"/> -->
<!-- <policy domain="system" name="shred" value="2"/> -->
<!-- <policy domain="system" name="precision" value="6"/> -->
<!-- not needed due to the need to use explicitly by mvg: -->
<!-- <policy domain="delegate" rights="none" pattern="MVG" /> -->
<!-- use curl -->
<policy domain="delegate" rights="none" pattern="URL" />
<policy domain="delegate" rights="none" pattern="HTTPS" />
<policy domain="delegate" rights="none" pattern="HTTP" />
<!-- in order to avoid to get image with password text -->
<policy domain="path" rights="none" pattern="@*"/>
<!-- disable ghostscript format types -->
<policy domain="coder" rights="none" pattern="PS" />
<policy domain="coder" rights="none" pattern="PS2" />
<policy domain="coder" rights="none" pattern="PS3" />
<policy domain="coder" rights="none" pattern="EPS" />
<policy domain="coder" rights="read | write" pattern="PDF" />
<policy domain="coder" rights="none" pattern="XPS" />
</policymap>
1.3.6 Anpassungen für Nextcloud
Wir müssen unseren Nextcloud Container noch etwas erweitern, damit später alles korrekt funktioniert. Dazu öffnet ihr folgende Datei:
nano /opt/containers/nextcloud/nextcloud-app/Dockerfile
Kopiert nun folgenden Code in die Datei:
FROM nextcloud
RUN apt-get update
RUN apt-get install -y ghostscript
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/*
Nun könnt ihr die Datei speichern.
1.3.7 Anpassungen für Elasticsearch
Wir müssen hier noch das Programm „Tesseract“ installieren, welches für uns die OCR Erkennung durchführt. Dazu öffnet ihr folgende Datei:
nano /opt/containers/nextcloud/elasticsearch/Dockerfile
Gebt hier nun folgendes ein:
FROM elasticsearch:7.16.2
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
Nun wird eine OCR Erkennung für die beiden Sprachen „Deutsch“ und „Englisch“ installiert. Wer noch weiteren Sprachen benötigt, kann sich hier die Namen der entsprechenden Pakete anschauen und die obige Liste entsprechend erweitern.
1.3.8 Nextcloud / Elasticsearch Image erstellen
Nun lassen wir unsere Images „erstellen“. Dieser Vorgang kann einige Zeit (Minuten) dauern, da die einzelnen Pakete nun heruntergeladen und in die entsprechenden Container installiert werden müssen. Gebt dazu folgenden Befehl ein:
cd /opt/containers/nextcloud
docker compose build
Nun sind wir fertig mit der Vorarbeit und können Nextcloud zum ersten Mal starten.
2. Nextcloud starten
Gebt nun folgendes ein, um euren Nextcloud Container zu starten:
docker compose -f /opt/containers/nextcloud/docker-compose.yml up -d
Geht nun mit eurem Webbrowser auf eure Webseite (z.B. nextcloud.euredomain.de). Dort sollte nach einigen Sekunden folgendes zu sehen sein:
Nun legt ihr einen Namen / Passwort für euren Administrator-Account fest.
Anschließend klickt ihr auf „Speicher & Datenbank“.
Hier gebt ihr nun eure Daten ein. Alle diese Einstellungen stehen in der Datei von eben. Schaut dort einfach nach, wenn ihr eueren Benutzer / Passwort nicht mehr wisst. Bei mir wäre das:
- Datenbank-Benutzer: nextcloud
- Datenbank-Passwort: uhk678!nfha3X
- Datenbank-Name: nextcloud
- Letzte Zeile: nextcloud-db
Nun könnt ihr noch wählen, ob die „empfohlenen Apps“ installiert werden sollen. Ich entferne hier den Haken, da ihr später einfach mit einem Klick die benötigten Apps selbst installieren könnt.
Nun klickt ihr „Installation abschließen“. Nun wird Nextcloud installiert. Nach der Installation solltet ihr folgendes sehen.
Nun seid ihr fertig mit der Installation und könnt Nextcloud nutzen.
3. Optimierung
Klickt nun oben rechts auf den „Kreis“ und wählt „Einstellungen“ aus.
Hier klickt ihr nun auf „Übersicht“.
Jetzt bekommt ihr einige Tipps, was ihr noch „verbessern“ könnt.
3.1 Reverse Proxy anpassen
Wir werden jetzt den Reverse Proxy noch anpassen, damit diese Warnung verschwindet. Dazu gebt ihr auf eurer Konsole folgendes ein:
docker inspect traefik
Ganz am Schluss der Ausgabe sollte es so aussehen:
Bei mir ist die „IPAdress“ 172.18.0.2 und die „IPPrefixLen“ 16. Diese beiden Werte merken wir uns nun und passen unsere Nextcloud config.php an.
Dazu öffnet ihr folgende Datei:
nano /opt/containers/nextcloud/app/config/config.php
Fügt nun folgende Zeile hinzu:
'trusted_proxies' =>
array (
0 => '172.18.0.2/16',
),
Passt diese bitte an, falls die Werte von meinem Werten abweichen sollten.
Nun könnt ihr die Datei beenden und seid hier fertig.
Wenn ihr nun die Prüfung wiederholt sollte die Zeile zum Reverse Proxy verschwunden sein.
3.2 Nextcloud auf HTTPS umstellen
Um Fehler zu vermeiden, konfigurieren wir Nextcloud so um, dass es nur auf die HTTPS Adresse hört. Dazu öffnet ihr folgende Datei:
nano /opt/containers/nextcloud/app/config/config.php
Hier passt ihr nun folgende Zeilen an. vorher:
'overwrite.cli.url' => 'http://nextcloud.euredomain.de',
nachher:
'overwrite.cli.url' => 'https://nextcloud.euredomain.de',
Zusätzlich fügt ihr noch folgende Zeilen hinzu:
'overwriteprotocol' => 'https',
'overwritehost' => 'nextcloud.euredomain.de',
Dies sieht dann bei mir so aus:
Nun könnt ihr die Datei speichern und beenden.
3.3 Standardtelefonregion festlegen
Die letzte Fehlermeldung in der Übersicht hat uns darüber informiert, dass wir keine Standardtelefonregion festgelegt haben. Dies tun wir jetzt. Öffnet dazu folgende Datei:
nano /opt/containers/nextcloud/app/config/config.php
Fügt folgende Zeile hinzu:
'default_phone_region' => 'DE',
Bei mir sieht es so aus:
Jetzt ist eure Standardregion Deutschland. Speichert nun ab und beendet die Datei.
3.4 Sicherheitswarnungen anzeigen lassen
Wenn ihr nun wieder in die Nextcloud Übersicht geht, sollten alle Fehlermeldungen verschwunden sein.
4. Nextcloud Sicherheits Scanner
Wir können nun noch überprüfen, ob unsere Nextcloud Installation „sicher“ ist. Dazu geht ihr auf folgende Webseite: https://scan.nextcloud.com
Gebt hier nun eure URL ein. Bei mir ist dies „nextcloud.testbereich.net“.
Nach kurzer Zeit erhaltet ihr dann euer Ergebnis. Bei mir sieht es so aus:
5. Elasticsearch nutzen
Nun wollen wir Elasticsearch integrieren. Dazu müssen wir lediglich noch einige Apps installieren.
5.1 Apps installieren
Klickt nun auf euren „Buchstaben“ und wählt „Apps“ aus.
Wählt nun auf der linken Seite „Suche“ aus.
Installiert nun folgende Apps
- Full text search
- Full text Elasticsearch Platform
- Full text search – Files
- Full text search - Files – Tesseract OCR
5.2 Verbindung zu Elasticsearch herstellen
Nachdem ihr nun die Apps installiert habt, müssen wir diese noch Konfigurieren. Klickt dazu auf euren „Buchstaben“ und wählt „Einstellungen“ aus.
Wählt nun auf der linken Seite „Volltextsuche“ aus.
Nun seht ihr folgendes:
Nun wählt folgende Einstellungen aus:
Nun habt ihr alles so weit eingerichtet. Jetzt müsst ihr nur noch dafür sorgen, dass eure Dateien indexiert werden.
5.3 Volltextsuche initialisieren
Jetzt starten wir die Indexierung aller Dateien. Dazu gebt ihr folgenden Befehl ein:
docker exec --user www-data nextcloud-app php occ fulltextsearch:index
Dieser Vorgang kann einige Zeit dauern, da nun alle Dateien durchsucht werden.
Wartet einfach, bis ihr den Cursor / Eingabezeile wieder seht. Dies kann einige Minuten dauern.
5.4 Neue Dateien initialisieren
Jetzt habt ihr alle Dateien indexiert, welche zu diesem Zeitpunkt existiert haben. Wenn ihr nun jedoch neue Dateien anlegt, sind diese nicht durchsuchbar. Daher müsst ihr in regelmäßigen Abständen alle Dateien neu durchsuchen lassen. Dazu habt ihr 2 Möglichkeiten:
- Die Initialisierung immer im Hintergrund laufen lassen
- Die Initialisierung automatisch zu einem bestimmten Zeitpunkt starten
5.4.1 Im Hintergrund initialisieren
Dazu gebt ihr folgenden Befehl ein:
docker exec --user www-data nextcloud-app php occ fulltextsearch:live
Nun seht ihr folgendes:
Ihr könnt die Ausgabe nun mit „STRG+C“ abbrechen. Die Initialisierung im Container läuft trotzdem noch weiter.
5.4.2 Zu einem bestimmten Zeitpunkt initialisieren
Dazu erstellen wir uns einen Cronjob. Gebt dazu folgendes ein:
crontab -e
Wählt nun „1“ aus.
Fügt nun folgenden Code ein:
*/5 * * * * docker exec --user www-data nextcloud-app php occ fulltextsearch:index
Dieser Code sorgt dafür, dass die Initialisierung alle 5 Minuten gestartet wird.
6. Volltextsuche nutzen
Um eure Dateien zu durchsuchen, müsst ihr auf die „Lupe“ klicken.
Hier könnt ihr nun Dateien / Wörter suchen.