EQVPS
PanouÎncepe

Cum instalezi Redis pe un VPS: limită de memorie, persistență și o parolă care rămâne

Instalează Redis pe Ubuntu 24.04, limitează-i memoria ca să nu ocupe tot serverul, pornește fișierul AOF fără să-ți ștergi datele și setează o parolă care supraviețuiește repornirilor. Doi dintre acești pași au capcane în care am căzut chiar noi pe serverul de test.

Redis ține datele în memorie și răspunde în aproximativ o milisecundă, de aceea stă în spatele atâtor aplicații, ca cache, coadă sau depozit de sesiuni. Instalarea e o singură comandă. Munca e în setările implicite: nicio limită de memorie, instantanee care pot pierde scrierile recente și două greșeli ușoare care îți șterg datele sau îți dezactivează parola fără să observi. Ghidul acesta le acoperă pe toate pe Ubuntu 24.04. Am parcurs fiecare pas pe imaginea noastră; cifrele vin de pe un server Micro (2 vCPU, 2 GB).

Ai nevoie de un utilizator cu sudo. Ghidul de configurare Ubuntu creează unul.

1. Instalare

sudo apt update
sudo apt install -y redis-server
redis-server --version
redis-cli ping

Instalarea a durat 13 secunde și ne-a dat Redis 7.0.15. Pornește imediat și la fiecare boot, răspunde PONG și ascultă doar pe serverul însuși: 127.0.0.1:6379 și [::1]:6379, cu protected-mode yes. Fără date, folosea 13,5 MB de RAM.

Jurnalul avea deja un avertisment:

WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition.

Redis salvează pe disc dintr-o copie a lui creată cu fork, iar cu setarea implicită a kernelului acel fork poate eșua când memoria e strâmtă. Repară o dată:

echo 'vm.overcommit_memory = 1' | sudo tee /etc/sysctl.d/90-redis.conf
sudo sysctl -p /etc/sysctl.d/90-redis.conf
sudo systemctl restart redis-server

După repornire, avertismentul a dispărut.

2. Limitează-i memoria

Din fabrică, maxmemory este 0, adică fără limită, iar politica e noeviction. Redis va lua RAM până rămâne serverul fără. Pune un plafon și decide ce se întâmplă când e atins:

redis-cli CONFIG SET maxmemory 256mb
redis-cli CONFIG SET maxmemory-policy allkeys-lru
redis-cli CONFIG REWRITE

Am testat ambele politici cu o limită de 64 MB și 400.000 de scrieri:

  • noeviction (implicit): memoria s-a oprit la 63 MB, iar scrierile noi au eșuat cu OOM command not allowed when used memory > 'maxmemory'. Potrivită pentru o coadă sau orice nu-ți permiți să pierzi.
  • allkeys-lru: Redis a aruncat cheile folosite cel mai de demult, 48.606, iar toate scrierile au trecut. Potrivită pentru un cache.

CONFIG REWRITE salvează setările curente în /etc/redis/redis.conf, ca să supraviețuiască unei reporniri. Mai adaugă și o linie pe care trebuie s-o cunoști înainte de pasul 4.

3. Alege cum salvează pe disc

Implicit, Redis scrie un instantaneu (/var/lib/redis/dump.rdb) după 1 schimbare într-o oră, 100 în cinci minute sau 10.000 într-un minut. Am testat trei feluri de a-l opri:

Cum s-a oprit RedisDoar instantanee (implicit)Cu fișierul AOF
systemctl restartNimic pierdut: salvează la oprireNimic pierdut
Oprit forțat cu kill -9Cheia scrisă după ultimul instantaneu dispăruseO cheie scrisă cu 2 secunde înainte era acolo

În ambele cazuri, systemd a repornit singur Redis în câteva secunde.

Dacă Redis ține date care ți-ar lipsi, pornește fișierul AOF (append-only file). El consemnează fiecare scriere și o trimite pe disc o dată pe secundă. Fă-o pe serverul pornit, nu editând fișierul:

redis-cli CONFIG SET appendonly yes
redis-cli CONFIG REWRITE
redis-cli INFO persistence | grep aof_

Am încercat întâi cealaltă cale și ne-a costat datele. Am schimbat appendonly no în appendonly yes în redis.conf și am repornit. Redis a revenit cu un AOF gol și n-a încărcat nimic din instantaneu, așa că toate cheile existente au dispărut. La oprirea următoare, și-a scris noul conținut, fără cheile vechi, și peste dump.rdb. CONFIG SET evită asta: Redis scrie întâi AOF-ul din datele din memorie. După o repornire, toate cheile noastre erau acolo.

Dacă Redis e doar un cache care poate porni gol, fă invers și dezactivează salvarea cu redis-cli CONFIG SET save "".

4. Setează o parolă

Iată a doua capcană. După orice CONFIG REWRITE, Redis 7 adaugă această linie la finalul redis.conf:

user default on nopass ~* &* +@all

Ea înseamnă „utilizatorul implicit nu are nevoie de parolă”. Apoi am adăugat requirepass mai sus în fișier și am repornit. Redis tot răspundea PONG fără parolă, pentru că linia user o anulează. Setează parola prin Redis:

REDIS_PASS=$(openssl rand -hex 24)
echo "$REDIS_PASS"
redis-cli CONFIG SET requirepass "$REDIS_PASS"
REDISCLI_AUTH="$REDIS_PASS" redis-cli CONFIG REWRITE

Păstrează parola într-un loc sigur. Acum Redis o stochează ca hash SHA-256 în aceeași linie user default. După o repornire, redis-cli ping a răspuns NOAUTH Authentication required. și mergea doar parola. Dă-i-o lui redis-cli prin variabila REDISCLI_AUTH. Cu -a apare în lista proceselor, iar redis-cli te avertizează. În aplicație, pune-o în adresa Redis: redis://:PASSWORD@127.0.0.1:6379/0.

5. Accesul de pe calculatorul tău

Lasă Redis pe 127.0.0.1 și folosește un tunel SSH. Folosește portul SSH al serverului; pe planurile cu NAT acesta este portul tău personal:

ssh -N -L 6380:127.0.0.1:6379 deploy@YOUR_SERVER_IP -p 22

Cât timp rulează, redis-cli -p 6380 și uneltele desktop de pe calculatorul tău vorbesc cu Redis de pe server. Nimic nou nu rămâne deschis spre internet. Cu ghidul pentru chei SSH, tunelul se conectează fără parolă.

Cât de rapid este

Pe serverul de test Micro, redis-benchmark cu 50 de clienți ne-a dat:

TestCereri pe secundăLatență mediană
SET30.3031,0 ms
GET35.1490,9 ms
SET, 16 comenzi pe drum dus-întors272.1092,4 ms
GET, 16 comenzi pe drum dus-întors414.9381,3 ms

Pentru cache-ul sau coada de sarcini a unei aplicații web, e mult mai mult decât îți va trebui. Viteza în plus vine din trimiterea comenzilor în loturi (pipelining).

Ce plan

Redis are nevoie de RAM pentru datele tale și de puțin altceva. Nano (2 vCPU, 1 GB, $3/lună) rulează Redis lângă o aplicație mică, cu maxmemory 256mb. Micro (2 GB, $5/lună) lasă loc pentru un cache mai mare plus aplicația. Dacă altceva trebuie să se conecteze direct la Redis, ia-ți propriul IPv4 (de la Nano-IP cu $8/lună) și permite în firewall doar acea adresă. Toate planurile sunt pe pagina VPS, iar plata se face în USDT, USDC sau ETH pe Base, Ethereum sau Polygon.

Întrebări frecvente

De câtă memorie RAM are nevoie Redis?

Redis în sine e minuscul: 13,5 MB imediat după instalare pe serverul nostru. Are nevoie de loc pentru datele tale, care stau în memorie. Setează maxmemory la cât poate ceda serverul, de exemplu 256 MB pe un server de 1 GB, și alege ce se întâmplă când se umple.

Redis sau Valkey?

Valkey este un fork al Redis pornit de la Redis 7.2 și folosește același protocol, așa că majoritatea clienților merg cu amândouă. Ubuntu 24.04 are doar Redis 7.0.15. Debian 13 are și Redis 8.0, și Valkey 8.1, iar Debian 12 primește Valkey 8.0 din backports. Pașii din acest ghid se aplică ambelor.

De ce pierde Redis date după o cădere?

Implicit, Redis salvează un instantaneu pe disc la câteva minute, în funcție de câte chei s-au schimbat. Când am oprit forțat procesul, cheia scrisă după ultimul instantaneu dispăruse. Pornește fișierul AOF, care scrie în fiecare secundă, iar o cădere te va costa cel mult aproximativ o secundă de scrieri.

Am adăugat requirepass în redis.conf, de ce Redis acceptă în continuare comenzi fără parolă?

Probabil pentru că la un moment dat a rulat CONFIG REWRITE. În Redis 7, acesta adaugă la finalul redis.conf linia user default on nopass ~* &* +@all, iar linia asta anulează un requirepass pus mai sus. Setează parola cu CONFIG SET requirepass, apoi CONFIG REWRITE, și Redis o va salva în acea linie.

Pot deschide portul 6379 spre internet?

Mai bine nu. Porturile Redis deschise sunt scanate tot timpul și sunt o cale frecventă de intrare în servere. Conectează-te la Redis de pe calculatorul tău printr-un tunel SSH sau ține-l pe același server cu aplicația care îl folosește.

Comentarii

Încă nu există comentarii. Fii primul.

Lasă un comentariu

Comentariile sunt moderate înainte să apară.