Valkey als Redis-Ersatz für Nextcloud
Inhaltsverzeichnis
Vorwort #
Warum? #
Am 20. März 2024 kündigte die Firma Redis Inc. eine Änderung des Lizenzmodells in einem Blog-Artikel an. Bis zu besagter Ankündigung war Redis unter der BSD-3-Clause license veröffentlicht. Alle neueren Releases (ab Version 7.4) werden unter einem dualen Lizenzmodell Redis Source Available License 2.0 (RSALv2) und Server Side Public License (SSPL) veröffentlicht.
Auswirkungen #
Versionen von Redis ab Version 7.4 dürfen nicht mehr frei genutzt werden, wenn diese in einem kommerziellen Rahmen vertrieben bzw. verteilt werden. Dazu zählen eigene Softwareprodukte, aber auch Dienstleistungen und Hosting von Redis. Die interne Nutzung im eigenen Unternehmen ist weiterhin frei zulässig.
Auszug des Blog-Artikels von Redis:
- Can I host Redis as a service internal to my organization?
Yes. The terms of the RSALv2 or SSPLv1 allow for all non-production and production usage, except for providing competitive offerings to third parties that embed or host our software. Hosting the products for the internal use of your organization is permitted. An organization includes its affiliates and subsidiaries. This means one division can host Redis for use by another internal division
Alternativen #
Kurz nach der Veröffentlichung des Blog-Artikels wurden mehrere Forks ins Leben gerufen bzw. veröffentlicht:
In diesem Artikel widmen wir uns Valkey. Valkey wird von der Linux Foundation betreut, sowie einigen ehemaligen Redis-Maintainern, welche für große Cloudanbieter tätig sind.
Quelle: heise online
Installation #
Zum Zeitpunkt des Verfassens dieses Artikels existieren leider noch keine paketierten Varianten von Valkey. Dadurch ist die Installation nur durch Kompilieren des Quellcodes möglich. Die folgende Anleitung wurde mit Debian 12.5 durchgeführt und getestet.
Abhängigkeiten #
In den folgenden Schritten werden alle erforderlichen Pakete installiert, um Valkey herunterzuladen und anschließend zu kompilieren
# Install build dependencies
apt install build-essential tcl pkg-config git
# (optional) packages for TLS support
apt install libssl-dev tcl-tls
# packages for systemd Support
apt install libsystemd-dev
Valkey #
Nun erfolgt der Download des Quellcodes und das Kompilieren der Software
# get the source code
git clone https://github.com/valkey-io/valkey.git /opt/valkey
# change directory to downloaded source code
cd /opt/valkey
Nun erfolgt das Kompilieren von Valkey. Der Zusatzparameter BUILD_TLS=yes ist nur notwendig, wenn Valkey TLS unterstützen soll
# build Valkey with TLS support and systemd support
make BUILD_TLS=yes USE_SYSTEMD=yes
# test compiled source code
## if compiled without TLS support:
make test
## if compiled with TLS support:
./utils/gen-test-certs.sh
./runtest --tls
Sind die Tests erfolgreich beendet, werden die ausführbaren Dateien systemweit verfügbar gemacht. Diese liegen anschließend unter /usr/local/bin/
make install
Systemd Service #
Damit Valkey nach einem Neustart des Servers automatisch startet, wird unter folgendem Pfad eine neue Datei erstellt: /etc/systemd/system/valkey-server.service
[Unit]
Description=Valkey server
After=network.target
Documentation=https://valkey.io/
[Service]
Type=notify
ExecStart=/usr/local/bin/valkey-server /etc/valkey/valkey.conf --supervised systemd --daemonize no
PIDFile=/run/redis/redis-server.pid
TimeoutStopSec=0
Restart=always
User=redis
Group=redis
RuntimeDirectory=valkey
RuntimeDirectoryMode=2755
UMask=007
PrivateTmp=true
LimitNOFILE=65535
PrivateDevices=true
ProtectHome=true
ProtectSystem=strict
ReadWritePaths=-/var/lib/redis
ReadWritePaths=-/var/log/redis
ReadWritePaths=-/var/run/redis
CapabilityBoundingSet=
LockPersonality=true
MemoryDenyWriteExecute=true
NoNewPrivileges=true
PrivateUsers=true
ProtectClock=true
ProtectControlGroups=true
ProtectHostname=true
ProtectKernelLogs=true
ProtectKernelModules=true
ProtectKernelTunables=true
ProtectProc=invisible
RemoveIPC=true
RestrictAddressFamilies=AF_INET AF_INET6 AF_UNIX
RestrictNamespaces=true
RestrictRealtime=true
RestrictSUIDSGID=true
SystemCallArchitectures=native
SystemCallFilter=@system-service
SystemCallFilter=~ @privileged @resources
# valkey-server can write to its own config file when in cluster mode so we
# permit writing there by default. If you are not using this feature, it is
# recommended that you remove this line.
ReadWriteDirectories=-/etc/valkey
# This restricts this service from executing binaries other than valkey-server
# itself. This is really effective at e.g. making it impossible to an
# attacker to spawn a shell on the system, but might be more restrictive
# than desired. If you need to, you can permit the execution of extra
# binaries by adding an extra ExecPaths= directive with the command
# systemctl edit valkey-server.service
NoExecPaths=/
ExecPaths=/usr/local/bin/valkey-server /usr/lib /lib
[Install]
WantedBy=multi-user.target
Alias=valkey.service
Nun muss das neue unit file dem System bekannt gemacht werden:
systemctl daemon-reload
Zum Schluss werden noch Verzeichnisse angelegt, um die Konfiguration von Valkey zu sichern und Sockets und PID files erstellen zu können:
mkdir /etc/valkey /var/run/redis
# copy existing Redis configuration into valkey configuration folder
cp /etc/redis/redis.conf /etc/valkey/valkey.conf
# allow redis user to access Valkey configutation directory and Redis Socket/PID file directory
chown -R redis: /etc/valkey /var/run/redis
Nun wird noch Redis gestoppt und deaktiviert. Anschließend wird Valkey gestartet und für den automatischen Start konfiguriert
systemctl stop redis-server.service
systemctl disable redis-server.service
systemctl enable valkey-server.service
systemctl start valkey-server.service
Da alle Konfigurationsparameter der bestehenden Redis Instanz übernommen werden, sollten keine weiteren Änderungen an den verbundenen Anwendungen notwendig sein.
Test #
Sind alle obigen schritte abgeschlossen, kann die Nutzung von Valkey geprüft werden. Im folgenden Beispiel wird sich auf einen lokalen Valkey Dienst verbunden
valkey-cli
# authenticate, if authentication is configured in your valkey.conf file
AUTH YOUR-USER YOUR-PASSWORD
MONITOR
Wenn Sie nun eine verbundene Anwendung nutzen, sollten die Zugriffe zu sehen sein.
Zusammenfassung #
Valkey source directory: /opt/valkey/
Valkey config directory: /etc/valkey/
Valkey unit file: /etc/systemd/system/valkey-server.service
Valkey unit name: valkey-server.service
executing user: redis
executing group: redis
PID file directory: /var/run/redis/
Socket file directory: /var/run/redis/
Log directory: /var/log/redis/
Database directory: /var/lib/redis/