Valkey es una base de datos en memoria de alto rendimiento diseñada para funcionar como sistema de caché, gestor de sesiones, almacén de estructuras de datos, limitador de peticiones y plataforma de mensajería ligera.
Es totalmente compatible con Redis a nivel de protocolo, comandos y formatos de almacenamiento, lo que permite migrar aplicaciones existentes sin modificaciones significativas.
En Rocky Linux 10 y AlmaLinux 10 existen tres métodos principales para instalar Valkey:
- Utilizar los repositorios oficiales mediante DNF.
- Ejecutarlo en un contenedor con Podman.
- Compilarlo desde el código fuente.
Cada método ofrece ventajas distintas según los requisitos de estabilidad, facilidad de mantenimiento o necesidad de utilizar la versión más reciente.
Requisitos previos
Antes de comenzar, asegúrate de disponer de:
- Un servidor Rocky Linux 10 o AlmaLinux 10.
- Acceso administrativo mediante sudo.
- Conectividad a Internet para descargar paquetes o imágenes.
- SELinux habilitado en modo Enforcing.
Puedes comprobar el estado de SELinux con:
getenforce
La salida debería mostrar:
Enforcing
No es recomendable desactivar SELinux. Todos los procedimientos descritos en esta guía funcionan correctamente con SELinux activado.
¿Cómo elegir un método de instalación?
| Método | Versión | Recomendado para |
|---|---|---|
| DNF (AppStream) | Serie 8.x | Entornos estables y soportados por la distribución |
| Podman | Última versión 9.x | Desarrollo y despliegues rápidos |
| Código fuente | Última versión 9.x | Personalización avanzada y soporte TLS nativo |
Los tres métodos son alternativas independientes. Solo necesitas utilizar uno de ellos.
¿Cómo instalar Valkey desde AppStream con DNF?
La forma más sencilla de instalar Valkey consiste en utilizar los repositorios oficiales incluidos en Rocky Linux y AlmaLinux.
Instala el paquete:
sudo dnf install -y valkey
A diferencia de otras distribuciones, Rocky Linux y AlmaLinux utilizan un único paquete denominado valkey, que incluye tanto el servidor como las herramientas cliente.
Una vez instalado, habilita e inicia el servicio:
sudo systemctl enable --now valkey
Comprueba la versión instalada:
valkey-server --version
Verifica la conectividad:
valkey-cli ping
Si todo funciona correctamente, obtendrás:
PONG
Ubicaciones importantes
Servicio systemd:
valkey
Archivo de configuración:
/etc/valkey/valkey.conf
Binarios principales:
/usr/bin/valkey-server
/usr/bin/valkey-cli
Consultar el estado del servicio:
systemctl status valkey
¿Cómo ejecutar Valkey con Podman?
Podman es la alternativa nativa a Docker en sistemas basados en RHEL.
Instala Podman:
sudo dnf install -y podman
Ejecuta el contenedor oficial:
sudo podman run -d \
--name valkey \
-p 6379:6379 \
docker.io/valkey/valkey:9.1
Es importante utilizar el nombre completo de la imagen:
docker.io/valkey/valkey:9.1
De lo contrario, Podman puede no localizar correctamente el repositorio.
Verifica que el contenedor está en ejecución:
sudo podman ps
Comprueba la versión:
sudo podman exec valkey valkey-server --version
Accede al cliente interactivo:
sudo podman exec -it valkey valkey-cli
Administración básica del contenedor
Detener:
sudo podman stop valkey
Iniciar:
sudo podman start valkey
Reiniciar:
sudo podman restart valkey
Eliminar:
sudo podman rm -f valkey
¿Cómo compilar Valkey desde el código fuente?
La compilación manual proporciona acceso a las versiones más recientes y permite habilitar características avanzadas como TLS y soporte completo para systemd.
Instalar dependencias
Instala las herramientas de compilación:
sudo dnf groupinstall -y "Development Tools"
Instala las bibliotecas necesarias:
sudo dnf install -y openssl-devel systemd-devel curl
Descargar la última versión
VER=$(curl -fsSL https://api.github.com/repos/valkey-io/valkey/releases/latest | grep -oP '"tag_name":\s*"\K[^"]+')
cd /usr/local/src
sudo curl -fsSL \
"https://github.com/valkey-io/valkey/archive/refs/tags/${VER}.tar.gz" \
-o "valkey-${VER}.tar.gz"
sudo tar xzf "valkey-${VER}.tar.gz"
cd "valkey-${VER}"
Compilar con TLS y systemd
sudo make BUILD_TLS=yes USE_SYSTEMD=yes -j"$(nproc)"
Instalar
sudo make install
Comprobar la instalación:
valkey-server --version
Importancia de systemd-devel
Si se compila con soporte para systemd, la librería systemd-devel es obligatoria.
Sin ella, el servidor puede arrancar correctamente, pero systemd no recibirá la notificación de disponibilidad y terminará finalizando el servicio por tiempo de espera.
Gestión del servicio con systemd
Iniciar:
sudo systemctl start valkey
Detener:
sudo systemctl stop valkey
Reiniciar:
sudo systemctl restart valkey
Habilitar al arranque:
sudo systemctl enable valkey
Deshabilitar:
sudo systemctl disable valkey
Consultar registros:
journalctl -u valkey -f
Configuración básica de seguridad
Una instalación recién creada suele aceptar conexiones locales sin autenticación.
Antes de utilizar Valkey en producción conviene revisar varios parámetros de seguridad.
Mantener acceso local
En el archivo:
/etc/valkey/valkey.conf
Comprueba que existen líneas similares a:
bind 127.0.0.1 -::1
protected-mode yes
Esto restringe el acceso al propio servidor y evita exposiciones accidentales.
¿Cómo configurar la autenticación?
Si necesitas acceso remoto, configura primero una contraseña.
Desde la consola:
valkey-cli CONFIG SET requirepass "ContraseñaMuySegura"
Probar autenticación:
valkey-cli -a "ContraseñaMuySegura" ping
Resultado esperado:
PONG
Haz permanente la configuración añadiendo al archivo de configuración:
requirepass ContraseñaMuySegura
Posteriormente reinicia el servicio:
sudo systemctl restart valkey
¿Cómo configurar SELinux para puertos personalizados?
Valkey utiliza por defecto el puerto TCP 6379.
Si deseas cambiarlo:
port 6380
SELinux bloqueará el nuevo puerto hasta que se registre correctamente.
Asignar el contexto adecuado:
sudo semanage port -a -t redis_port_t -p tcp 6380
Comprobar puertos registrados:
sudo semanage port -l | grep redis
No es recomendable desactivar SELinux para solucionar este problema.
¿Cómo configurar el firewall?
Si Valkey debe ser accesible desde otro servidor, limita el acceso únicamente a la dirección IP necesaria.
Ejemplo:
sudo firewall-cmd --permanent \
--add-rich-rule='rule family="ipv4" source address="10.0.1.20" port port="6379" protocol="tcp" accept'
Aplicar cambios:
sudo firewall-cmd --reload
Evita abrir el puerto a toda la red salvo que sea estrictamente necesario.
¿Cómo configurar la memoria?
Es recomendable limitar el uso de memoria para evitar que un cliente o una aplicación defectuosa agoten los recursos del sistema.
Ejemplo:
maxmemory 2gb
Política de expulsión:
maxmemory-policy allkeys-lru
Opciones habituales:
| Política | Descripción |
|---|---|
| noeviction | No elimina claves |
| allkeys-lru | Elimina las menos utilizadas |
| allkeys-random | Elimina claves aleatoriamente |
| volatile-lru | Solo elimina claves con expiración |
| volatile-random | Elimina claves temporales aleatoriamente |
¿Cómo habilitar el TLS?
Para cifrar todas las comunicaciones entre clientes y servidor, configura TLS.
Ejemplo básico:
port 0
tls-port 6379
tls-cert-file /etc/valkey/tls/server.crt
tls-key-file /etc/valkey/tls/server.key
tls-ca-cert-file /etc/valkey/tls/ca.crt
Reinicia el servicio:
sudo systemctl restart valkey
Conexión TLS:
valkey-cli --tls \
--cacert /etc/valkey/tls/ca.crt
Con autenticación mediante certificados de cliente:
valkey-cli \
--tls \
--cert cliente.crt \
--key cliente.key \
--cacert ca.crt
Comandos básicos de administración
Comprobar conectividad:
valkey-cli ping
Guardar una clave:
valkey-cli set usuario "Carlos"
Leer una clave:
valkey-cli get usuario
Crear una clave temporal:
valkey-cli set token abc123 ex 60
Consultar expiración:
valkey-cli ttl token
Incrementar contador:
valkey-cli incr visitas
Ver estadísticas:
valkey-cli info
Información de memoria:
valkey-cli info memory
Número total de claves:
valkey-cli dbsize
Monitorizar actividad:
valkey-cli monitor
Eliminar una clave:
valkey-cli del usuario
Vaciar la base actual:
valkey-cli flushdb
Vaciar todas las bases:
valkey-cli flushall
Lista de comprobación de seguridad
Antes de utilizar Valkey en producción, verifica los siguientes puntos:
- El servidor escucha únicamente en localhost o en una red privada.
protected-modeestá activado.- Existe una contraseña segura o ACL configuradas.
- SELinux permanece en modo Enforcing.
- Los puertos personalizados están etiquetados correctamente mediante
semanage. - El firewall solo permite conexiones desde hosts autorizados.
- Existe un límite de memoria configurado.
- Se ha definido una política de expulsión adecuada.
- TLS está habilitado si el servicio se expone fuera del servidor.
Completar esta lista reduce considerablemente el riesgo de exponer una instancia abierta o sin protección en la red.
