Für meine Flask & Python Projekt nutze ich schon lange Redis. Redis ist ein "in-memory data store" Normalerweise läuft dafür ein Docker Container auf meinem Haupt-PC, den ich mal vor langer Zeit aufgesetzt hatte. So weit lief auch alles gut.
Bedingt durch den Versuch, die Flask Anwendung auf meinem 2. PC zu installieren, ergaben sich einige neue Erkenntnisse. Ich hatte dann erst auf dem 2. PC ebenfalls mit einem Docker Container rum gespielt, dabei hatte ich aber das Problem das meine Datenbank nicht akzeptiert wurde.
Ich habe lange gebraucht um zu kapieren, das Redis ungleich Redis Stack ist. Und damals, wo ich den Docker Container aufgesetzt hatte, hatte ich Redis Stack installiert.
Redis Stack Server lets you build applications with searchable JSON and time series data models, and extended probabilistic data structures.
Quelle: https://redis.io/
Ich habe gerade nochmal in der DB nachgesehen, ich nutze keine dieser zusätzlichen Funktionen. Also müsste ich die Daten alle mühsam extrahieren und in einer einfachen Redis DB wieder installieren.
Ok, es war also klar das ich einen Redis Stack Server an zentraler Stelle in meinem Netzwerk bräuchte, damit ich von jedem PC aus darauf zugreifen könnte. Als Ort fällt mir da natürlich mein Proxmox ein.
Bei ersten Versuchen der Installation von Redis Stack schnell drüber gestolpert, das es das aktuell nur für Debian 11 gibt. Ja, die Docker Generation Da ich das aber nicht als Docker laufen lassen wollte, musste ich wohl oder übel ein Debian 11 aufsetzen.
Es gibt auch noch zwei Versionen von Redis Stack
- Redis Stack Server
- Redis Stack
Redis Stack enthält auch noch die Desktop Application RedisInsight, das ist eine Redis GUI. Damit kann man sich die DB ansehen und auch bearbeiten. Das läuft lokal auf meinem Haupt-PC, brauche ich also nicht auf einem Server. Der Server hat ja auch keine GUI. Also war klar, ich brauchte einen Redis Stack Server.
Zur Installation von Redis Stack Server, findet man das hier auf redis.io
Kurze Zeit später lief die Debian 11 VM mit Redis Stack Server.
frank@redis-stack:~$ pstree
systemd─┬─agetty
├─cron
├─dbus-daemon
├─dhclient───3*[{dhclient}]
├─qemu-ga───{qemu-ga}
├─redis-server───8*[{redis-server}]
├─rsyslogd───3*[{rsyslogd}]
├─sshd───sshd───sshd───bash───pstree
├─systemd───(sd-pam)
├─systemd-journal
├─systemd-logind
├─systemd-timesyn───{systemd-timesyn}
└─systemd-udevd
Interessant bei Redis ist immer, wo liegt die Konfigurations Datei und wo die Datenbank? Dazu sollte man sich als erstes immer mal den SystemD Dienst ansschauen.
redis-stack-server.service
[Unit]
Description=Redis stack server
Documentation=https://redis.io/
After=network.target
[Service]
Type=simple
User=redis
ExecStart=/opt/redis-stack/bin/redis-server /etc/redis-stack.conf
WorkingDirectory=/var/lib/redis-stack
UMask=0077
[Install]
WantedBy=multi-user.target
Das erste was ich gemacht habe, sen User geändert. Stand auf nobody(?) oder so. Ich habe erst mal einen User dafür angelegt.
useradd -M -s /usr/sbin/nologin redis
Die Konfiguration findet man unter
/etc/redis-stack.conf
So sieht meine aus
port 6379
daemonize no
requirepass <PASSWORD>
save 60 1
#save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /var/lib/redis-stack
loadmodule /opt/redis-stack/lib/rediscompat.so
loadmodule /opt/redis-stack/lib/redisearch.so
loadmodule /opt/redis-stack/lib/redistimeseries.so
loadmodule /opt/redis-stack/lib/rejson.so
loadmodule /opt/redis-stack/lib/redisbloom.so
loadmodule /opt/redis-stack/lib/redisgears.so v8-plugin-path /opt/redis-stack/lib/libredisgears_v8_plugin.so
Mit diesen beiden Zeilen
dbfilename dump.rdb
dir /var/lib/redis-stack
legt man fest, wo die Datenbank liegt. Unter /var/lib/redis-stack/ findet man dann die Datenbank dump.rdb. Bitte darauf achten, das die Dateiberechtigungen alle passen.
chown -R redis:redis /var/lib/redis-stack/
Nach einem Neustart, sollte die Redis Datenbank nun mit meiner Datenbank laufen.
systemctl restart redis-stack-server.service
Wie testet man die Verbindung?
Einmal kann man das lokal machen. Mit dem Tool redis-cli
root@redis-stack:/var/lib/redis-stack# redis-cli
127.0.0.1:6379>
Wenn man jetzt die Datenbank auswählen möchte, kommt das
127.0.0.1:6379> SELECT 0
(error) NOAUTH Authentication required.
Ok, die Datenbank ist mittels Passwort geschützt. Mit AUTH kann man sich authentifizieren.
127.0.0.1:6379> AUTH <PASSWORD>
OK
Danach kann man dann die Datenbank wählen und schauen ob was drin ist.
127.0.0.1:6379> SELECT 0
OK
127.0.0.1:6379> KEYS *
1) "settings"
127.0.0.1:6379>
Das kann man auch von extern machen, da aktuell die Redis Datenbank auf alle Netzwerkverbindungen lauscht. Wenn man das nicht möchte, kann man das auch entsprechend einstellen. Hier nicht erläutert.
Von extern, muss man dann den Host angeben.
frank@debian:~$ redis-cli -h 192.168.3.9
192.168.3.9:6379>
Rest, siehe oben. Danach weiß man ob alles so weit funktioniert. Und zum Schluss noch ein Screenshot vom RedisInsight Tool.