Ich beschreibe hier die Installation von Wallabag als Docker Image auf Openmediavault, der notwendigen, weiteren Komponenten und deren Einrichtung.

Die Installation läuft teils als Docker Image und teils nativ, auf dem OMV. Dies ergibt sich daraus, dass teilweise OMV Plugins verfügbar sind, ich den nativen Betrieb bevorzuge oder es aus meiner Sicht Sinn macht, zentrale Bestandteile, die mehrere Clients versorgen, außerhalb einer Container Lösung zu betreiben.

Die Anlage sitzt hinter einer OPNsense die auf einer Alix APU läuft. Die Firewall ist für das Let’s Encrypt zertifikat zuständig und der HAProxy lauscht auf Port 443 und kümmert sich um die Weitergabe der angefragten Verbindung zu dem jeweiligen Server intern.

An dieser Stelle gehe ich davon aus, dass OMV 4.X installiert und die Grundkonfiguration vorgenommen wurde. Ich verzichte auch darauf darzustellen, wie Plugins in der Weboberfläche installiert werden. Auch sollte klar sein, wie mittels ssh eine Verbindung zum NAS aufgebaut und die Shell genutzt wird.

Installation und Konfiguration von MySQL für Wallabag

Nachdem das Plugin installiert wurde, sorgen wird dafür, dass auf allen Schnittstellen des Servers gelauscht, der Netzwerkzugriff gestattet und die Verwaltungsseite aktiviert ist.

Openmediavault Settings MySQL
Openmediavault Settings MySQL

Damit Wallabag erfolgreich eine Verbindung aufbauen und die Datenbank einrichten kann, muss der Zugriff freigegeben werden. Unser Docker Image läuft hinter dem Docker Proxy und kommt somit aus einem anderen Netz. Nun gibt es mehrere Möglichkeite um die Einstellungen vorzunehmen. Wenn ihr über die WebGUI von MySQL geht, müsst ihr euch mit:
user: omvadmin
pw: welches ihr euch bei der Installation vergeben habt bzw. über den Button „Passwort zurücksetzen“ in der OMV/MySQL GUI hinterlegt habt.
Ein Login mit Root an der Weboberfläche ist aktuell noch nicht mögich

Wenn wir Wallabag in einem Docker Container betreiben, wird beim ersten Start root Zugriff auf die Datenbank benötigt. Ich habe bei mir das MySQL Plugin „unix_socket“ entfernt, damit ein Zugriff wie früher möglich ist. Eigentlich ist das Plugin eine ganz praktische Sache. Zum Beispiel wird das Plugin gesetzt, wenn man unter Debian mysql secure ausführt.

sudo mysql_secure_installation

Zum Hintergund, das Plugin ermöglicht den root Zugriff ohne Eingabe eines Passworts, wenn man sich bereits als root / sudo authentifiziert hat. Am besten einfach mal testen. Als root oder mit sudo:

sudo mysql -u root

Und schon ist man connected. Allen anderen wird der Zugang verwehrt. Als nächstes setzt man das root Kennwort neu. Danach kann sich, wie von früher gewohnt, wieder mit root und dem Passwort angemeldet werden. Folgend 2 Beispiele wie es gehen kann, entweder mit update oder alter. Je nach eingesetzter MySQL Variante, kann das abweichen.

UPADTE mysql.user SET password=password('NEUESPW') WHERE user='root';
ALTER USER 'benutzer'@'localhost' IDENTIFIED BY 'NeuesPasswort;
FLUSH PRIVILEGES;

Allerdings gilt das weiterhin nur, wenn man als root angemeldet ist oder sudo nutzt. Wenn man wie in alten Zeiten, sich unabhängig der aktuellen Anmeldung am System auch bei MySQL authentifizieren möchte, muss jetzt das Plugin für den entsprechenden User gelöscht werden.

UPDATE mysql.user SET plugin='' WHERE user='root'
FLUSH PRIVILEGES;

Damit das auch einem Neustart so bleibt, muss die /etc/mysql/debian.cnf angepasst werden, im speziellen die Passwort Zeile. Bitte hier euch MySQL Kennwort hinterlegen

# Automatically generated for Debian scripts. DO NOT TOUCH!
[client]
host     = localhost
user     = root
password = EUERPASSWORT
socket   = /var/run/mysqld/mysqld.sock
[mysql_upgrade]
host     = localhost
user     = root
password = EUERPASSWORT
socket   = /var/run/mysqld/mysqld.sock
basedir  = /usr

Damit wäre die Einrichtung von MySQL abgeschlossen.

In der MySQL Verwaltung öffnet man unter „Tools“ den „User Manager“, und fügt einen neuen User root hinzu mit dem entsprechenden Host, von dem aus Zugriff benötigt wird.

MySQL Settings
MySQL Settings
MySQL Settings
MySQL Settings

Wenn wir uns nun die Tabelle „user“ in der Datenbank „mysql“ anschauen, ist der root User 3 mal vorhanden, mit jeweils einem anderen, zugelassen Host, von dem sich aus zur Datenbank verbunden werden darf. Es macht Sinn, für alle 3 Einträge das gleich Kennwort zu vergeben. Falls irgendetwas schief gehen sollte, könnt ihr euch weiterhin mit „omvadmin“ anmelden. Zum Schluss sieht es wie folgt aus

MySQL User Table
MySQL User Table

Root kann nun auf die Datenbank vom lokalen Host, aus dem Docker Netz 172.17.0.% und aus meinem Heimnetz zugreifen. % Prozent ist ein Platzhalter und lässt alle Clients aus dem entsprechenden Netz zu. Das ganze geht natürlich auch auf shell Ebene. Für jedes zugelassene Netz ist Befehl 1, mit entsprechender Änderung, zu wiederholen.

GRANT ALL PRIVILEGES ON *.* TO 'root'@'172.17.0.%' IDENTIFIED BY 'PASSWORT' WITH GRANT OPTION;
FLUSH PRIVILEGES;

Installation und Konfiguration des Redis Server für Wallabag

Mittels ssh auf den Server verbinden und den Redis Server installieren.

apt-get install redis-server php-redis

Nach der Installation sorgen wir dafür, dass nach einem Neustart Redis automatisch gestartet wird und wir wollen ihn gleich ausführen. Das ganze passiert über systemd und dem Befehl systemctl

systemctl enable redis-server.service
systemctl start redis-server.service

Zur Konfiguration wird die Datei /etc/redis/redis.conf editiert. Der Server kann nach belieben konfiguriert werden wie zum Beispiel die maximale Anzahl an Connections usw. Für unseren Zweck sind zwei Zeilen relevant.

#bind 0.0.0.0
requirepass EUERPASSWORT

Durch das asukommentieren der Bind Zeile, lassen wir Redis auf allen Interfaces lauschen und Verbindungen annehmen. Damit nicht jeder einfach Zugriff bekommt, sichern wir das Ganze mit einem Kennwort ab. Falls ihr später Probleme haben solltet und Wallabag keine Verbindung zum Redis Server bekommt, könnt ihr noch den protected-mode deaktivieren. Dies sollte allerdings nur zum Debugging dienen und keine dauerhafte Einstellung sein.

Warum der Redis Server?

Redis kümmert sich bei Wallabag um den asynchronen Import. Wer von einem anderen Read-It-Later Service kommt, möchte sicherlich seine vorhandenen Bookmarks mitnehmen. Meine Export Datei war wirkich nicht groß, trotzdem schaffte es Wallabag nicht, diese komplett zu importieren. Bei ca. 200 Einträgen war dann Schluss. Mit dem Einsatz von Redis hat der Import wunderbar funktioniert. Ausßerdem kann Redis noch für weitere Applikationen verwendet werden. Zum Beispiel kann Nextcloud ihn zum Cachen verwenden.

OMV Anpassungen für die Kommunikation

Um die Kommunikation aus dem Docker Image heraus mit unseren Netzwerk zuzulassen tragen wir in die /etc/sysctl.conf folgendes ein

#net.ipv4.ip_forward=1
net.ipv4.conf.all.forwarding=1

Die auskommentierte Option sollte eigentlich den gleichen Zweck erfüllen, wurde aber von mir nicht mehr getestet. Zusätzlich muss noch ein entsprechender Eintrag für iptabels erstellt werden.

iptables -P FORWARD ACCEPT

Die Pakete werden nun weitergereicht. Damit die iptables Einstellung persistent bleibt und nach einem Neustart nicht wieder verloren geht, installieren wir das Persistent Package

apt-get install iptables-persistent

Während der Installation solltet ihr gefragt werden, ob die aktuellen Regeln gespeichert und beim nächsten Reboot wieder geladen werden sollten. Mit ja bestätigen. Solltet ihr weitere Änderung vornehmen, die dauerhaft gepseichert werden sollen, einfach den entsprechenden iptables Befehl eingeben und anschließend mit

iptables-save

abspeichern.

Docker Image beziehen und einrichten

Öffnet nun die WebGUI von OMV und wechselt zu den Diensten / Docker. Zuerst müssen wir und das Wallabag Image besorgen. In der Übersicht nutzt man den Button „Image bereitstellen“. Parameter wie folg eingeben und mit „Start“ bestätigen.

Openmediavault Settings Docker
Openmediavault Settings Docker

Das Image wird nun im oberen Teil als Quelle angezeigt. Klickt auf das Image und dann auf Image starten.161526

Openmediavault Settings Docker
Openmediavault Settings Docker

Ich habe den Container auf den Host Port 86 konfiguriert, der dann weiter an den Docker Container gereicht wird, auf Port 80. Wichtig, nach der Eingabe des Netzwerks oder der Umgebungsvariab161526len am Ende immer das + Zeichen auf der rechten Seite drücken, sonst wird die Einstellung nicht gespeichert. Zum Schluss sollte das Ganze wie folgt aussehen

Openmediavault Settings Docker
Openmediavault Settings Docker
Openmediavault Settings Docker
Openmediavault Settings Docker
Openmediavault Settings Docker
Openmediavault Settings Docker

Am besten schaut ihr euch auf DockerHub die Infos an, was an Variablen und Verzeichnisse konfiguriert werden kann / muss.
https://hub.docker.com/r/wallabag/wallabag/

!!!WICHTIG!!!. Beim ersten Start des Docker Containers versucht Wallabag die Datenbank einzurichten, daher darf die Variable POPULATE_DATABASE nicht gesetzt sein. Sonst wird die Einrichtung nicht durchgeführt. Ich hab die Option nachträglich gesetzt, damit klar ist, die DB ist schon vorhanden.

Das ganze kann natürlich auch per Shell oder in der GUI über Extra Argumente anhand einer Befehlszeile erfolgen.

docker run --name wallabag -v 
/sharedfolders/docker_path/persist_data/wallabag:/var/www/wallabag/web/assets/images 
-e "MYSQL_ROOT_PASSWORD=ROOT_PW" 
-e "SYMFONY__ENV__DATABASE_DRIVER=pdo_mysql" 
-e "SYMFONY__ENV__DATABASE_HOST=192.168.180.99" 
-e "SYMFONY__ENV__DATABASE_PORT=3306" 
-e "SYMFONY__ENV__DATABASE_NAME=wallabag" 
-e "SYMFONY__ENV__DATABASE_USER=wallabag" 
-e "SYMFONY__ENV__DATABASE_PASSWORD=WALLABAG_DBUSER_PW" 
-e "SYMFONY__ENV__DATABASE_CHARSET=utf8mb4" 
-e "SYMFONY__ENV__MAILER_HOST=MAIL_HOST" Openmediavault Settings Docker
-e "SYMFONY__ENV__MAILER_USER=Email_Adresse" 
-e "SYMFONY__ENV__MAILER_PASSWORD=EMAIL_PW" 
-e "SYMFONY__ENV__FROM_EMAIL=EMAIL_VON" 
-e "SYMFONY__ENV__FOSUSER_REGISTRATION=false" 
-e "SYMFONY__ENV__DOMAIN_NAME=DOMAIN_URL" 
-e "SYMFONY__ENV__REDIS_SCHEME=tcp" 
-e "SYMFONY__ENV__REDIS_HOST=192.168.180.99" 
-e "SYMFONY__ENV__REDIS_PORT=6379" 
-e "SYMFONY__ENV__REDIS_PASSWORD=REDIS_PW"

Nun könnt ihr am Ende der der Seite auf speichern klicken und der Container sollte starten. Nach wenigen Minuten solltet ihr auch auf der Weboberfläche von Wallabag anmelden können. User und PW ist jeweils „wallabag“. Über die MySQL Verwaltungsseite könnt ihr schauen ob eine Datenbank angelegt wurde. Ihr könnt nun im Wallabag WebInterface weitere User anlegen, Secrets für Clients erstellen usw.161526

Ich wollte meinen eigentlichen User zum Hauptuser machen und den default wallabag User beschneiden. Um einen neuen Admin User hinzuzufügen öffnet ihr eine Shell auf dem OMV und setzt folgenden Befehl ab

docker exec -t wallabag /var/www/wallabag/bin/console fos:user:create --super-admin --env=prod USERNAME USER@EMAIL.de PASSWORT

Bevor ihr zu Importieren anfangt sollte die PHP Konfiguration im Container angepasst werden. Hierzu verbinden wir uns in den Container und nehmen dort die Einstellung vor.

docker exec -ti wallabag /bin/sh

Nun seid ihr im Container und könnt dort Anpassungen vornehmen. Öfnnet die Datei im Editor /etc/php7/php.ini Setzt die Parameter wie folgt bzw. für eure Bedürfnisse

; Maximum execution time of each script, in seconds                          
; http://php.net/max-execution-time                                           
; Note: This directive is hardcoded to 0 for the CLI SAPI                       
max_execution_time = 300          
; Maximum amount of memory a script may consume (128MB)                     
; http://php.net/memory-limit                                                   
memory_limit = 256M   

Auf der konfigurationsseite von Wallabag könnt ihr nun den Import starten. Wählt dazu den jeweiligen Anbieter und ladet eure Datei hoch. Wenn Redis aktiviert ist und Wallabag eine Verbindung hat, dürfe erstmal nichts weiter passieren, denn der eigentliche Importvorgang muss im Terminal gestartet werden. Bitte den entsprechenden Provider angeben

docker exec -t wallabag /var/www/wallabag/bin/console wallabag:import:redis-worker --env=prod pinboard 

Der Import startet nun und ihr könnt euch die Aktivität in Redis anschauen. Öfnnet einfach den Resdis Monitor

redis-cli -a REDISPW  monitor

Es kann passieren das der Import irgendwann stehen bleibt, aber noch nicht abgeeschlossen ist. Startet den Importvorgang erneut und die restliche Warteschlange wird abgearbeitet. Wiederholt dies so oft, bis ihr im Redis Monitor keine Aktion mehr sehen könnt, nach ausführen des Import Befehls.

Im nächsten Artikel zeige ich die Konfiguration eines HAProxy der auf der OPNSense läuft und die Verbindungen annimmt und das ganze mit einem Let’s Encrypt Zertifikat absichert. HAProxy auf OPNsense Firewall mit Lets Encrypt

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

*

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.