Zum Hauptinhalt springen
  1. Posts/

Valkey als Redis-Ersatz für Nextcloud

·856 Wörter·5 min· 0
Nextcloud self-hosted
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:

  1. 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.

Warnung! Der Quellcode stammt aus dem standard unstable Branch des git Repositories. Der Einsatz in produktiven Umgebungen wird aktuell nicht empfohlen!

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
Hinweis: Das oben aufgelistete systemd unit file orientiert sich an dem für Debian paketierten unit file von Redis. Es können weitere Anpassungen auf Valkey vorgenommen werden, jedoch ist dann möglicherweise eine Anpassung der angebundenen Anwendungen notwendig!

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/