Instalacja Redis na Ubuntu 18.04

Poradniki społeczności
vps, zarządzanie
logixdev
logixdev

Cześć! 👊

W tym poradniku pokażę Wam w jaki sposób zainstalować bazę danych Redis na systemie Ubuntu 18.04 (na starszych jak i nowszych wersjach systemu sposób również będzie działał - może różnić się jedynie wersja repozytorium). W tym wątku jedynie opiszę czym jest Redis oraz instalację, a nie jego implementację w PHP czy innym języku.

ℹ️ Spis treści:

  1. Czym jest Redis?
  2. Zastosowanie, do czego mogę użyć Redisa?
  3. Instalacja serwera Redis na Ubuntu
  4. Zabezpieczenie dostępu do bazy Redis
  5. Koniec

1. Czym jest Redis? Redis (skrót od Remote Dictionary Service) jest magazynem danych typu klucz, tzw. pamięciową bazą NoSQL. Przechowywanie danych w pamięci RAM daje nam ekstremalną wydajność (absolutnie nieporównywalną np. z MySQL, porównanie tutaj przy zachowaniu stałości zapisanych danych (opcjonalnie, dzięki odpowiedniej konfiguracji) poprzez przenoszenie ich następnie na dysk twardy. Redis jest napisany w języku C. Inną definicją może być również to, że jest magazynem struktur danych w pamięci. W opinii wielu jest lepszy od np. Memcached, bo zapewnia ową stosunkowo łatwą w implementacji trwałość danych poprzez zapis na twardym dysku.

🤭 Redisa zainstalujesz na wszystkich serwerach KVM z oferty LVLUP. Użyj kodu CRAFTCODE.PL w trakcie składania zamówienia i otrzymaj 10% zniżki! 🤑


2. Zastosowanie, do czego mogę użyć Redisa? Jak już wcześniej wspomniałem, Redis oferuje bardzo dużą wydajność. Dzięki temu jest przydatny np. przy:

  • przechowywaniu sesji użytkowników na stronie,
  • przechowywanie danych cache (czyli plików tymczasowych, przy których liczy się szybki czas dostępu, a nie długotrwały ich zapis),
  • do skomplikowanych operacji na danych liczbowych w czasie rzeczywistym np. statystyk,
  • i wiele innych...

W Minecrafcie z bazy Redis korzystają np. sektory, w których też liczy się wysyłania i odbierania pakietów między sektorami a oprogramowaniem je obsługującym (jedne z nich są dostępne publicznie wraz z kodem źródłowym tutaj - można też sprawdzić przykład implementacji Redisa w Javie).


3. Instalacja serwera Redis na Ubuntu Instalacja serwera Redis jest stosunkowo prosta i intuicyjna. Sprowadza się od wykonania kilku komend. Jeśli wykonujemy je nie z poziomu użytkownika root, pamiętajmy o dodaniu przed nimi polecenia sudo. ℹ️ Warto sprawdzić wersję pakietu dla Twojego systemu operacyjnego. Nowsze wersje niż te w oficjalnych repozytoriach Ubuntu można pobrać stąd, ale wymagają ręcznej instalacji.

  • najpierw aktualizujemy listę pakietów i aktualnie zainstalowane: apt update && apt upgrade
  • instalujemy Redisa: apt install redis-server
  • konfigurujemy start Redisa przy następnym reboocie systemu: systemctl enable --now redis-server.service
  • do sprawdzenia statusu serwera, włączenia, wyłączenia, restartu służą następująco takie komendy: service redis-server [status | start | stop | restart] np. service redis-server start (domyślnie po instalacji serwer powinien być już aktywny)
  • testujemy połączenie z serwerem: redis-cli jeśli wszystko działa w porządku, przejdziemy do konsoli Redisa, co możemy zauważyć po takim komunikacie: 127.0.0.1:6379> (możemy wtedy wpisać polecenie ping, aby upewnić się, że wszystko działa w porządku - jeśli tak, zwróci nam komunikat PONG):
    127.0.0.1:6379> ping
    PONG
    127.0.0.1:6379>

I to w zasadzie wszystko z instalacji. Możemy dokonać dodatkowej konfiguracji i np. zmienić ilość alokowanej pamięci. Robimy to w pliku /etc/redis/redis.conf:

maxmemory 256mb
maxmemory-policy allkeys-lru

⚠️ Pamiętamy po zmianie ustawień o restarcie Redisa: service redis-server restart


4. Zabezpieczenie dostępu do bazy Redis Tutaj możemy wykonać dwie podstawowe czynności. 😉

  • po pierwsze, warto umożliwić dostęp do Redisa tylko lokalnie, czyli z angielskiego binding to localhost. Często ta opcja jest już ustawiona domyślnie, ale warto upewnić się. Należy więc naszym ulubionym edytorem tekstu w wierszu poleceń np. vim lub nano albo łącząc się przez SFTP zedytować plik konfiguracyjny. Przechodzimy do /etc/redis/redis.conf, szukamy poniższej linijki i upewniamy się, że mamy tak ustawione (jeżeli znajduje się przed tym znak # - usuwamy go!) bind 127.0.0.1 ::1

⚠️ Uwaga! Pamiętamy, że przy takim ustawieniu nie będzie dostępu do bazy np. z innego serwera VPS.

  • po drugie ustawiamy hasło dla Redisa. W tym samym pliku w lokalizacji /etc/redis/redis.conf szukamy poniższej linijki, sprawdzamy, czy nie ma przed nią znaku # - jeśli jest, usuwamy go i domyślne hasło (które najpewniej będzie ustawione na foobared zmieniamy na inne, trudne, najlepiej losowo wygenerowane np. na stronie https://www.random.org/passwords/). Powinno to wyglądać na przykład tak: requirepass q6e4Yk4d2WscGsK7x8sDsVML

⚠️ Uwaga! Po wykonaniu wszystkich czynności musimy ponownie uruchomić Redisa. service redis-server restart

🔒 Aby sprawdzić nasze zabezpieczenia po pierwsze wpisujemy komendę netstat -lnp | grep redis i patrzymy na jakim adresie nasłuchuje połączenia Redis (jeśli jest 127.0.0.1 - znaczy, że okej). Po drugie logując się znanym już nam poleceniem redis-cli sprawdzamy, czy zapyta nas o hasło.

💬 Innymi, dodatkowymi sposobami na zabezpieczenie jest np. zmiana nazwy dla niebezpiecznych komend czyszczących dane itp. W podstawowej formie jednak obligatoryjnie wykonujemy opisane powyżej dwie czynności.


5. Koniec To na tyle! Jeśli macie jakieś uwagi co do treści poradnika, to oczywiście jestem otwarty. 😉 Data ostatniej aktualizacji: 21.05.2020 r.

🧐 Źrodła:


xitsmikey
xitsmikey

Niby instalacja prosta, ale jednak mi wywaliło pewne błędy. Zaraz po instalacji chciałem sprawdzić status redis-a i otrzymałem taki komunikat: image|690x247

Zaraz po próbie zalogowania się do konsoli natomiast wywala not-connected> jak tu: 2|690x141

Wszystko było instalowanie z uprawnieniami sudo, dodatkowo było to konto root

xitsmikey
xitsmikey

Nevermind, po instalacji redis, zrobiłem dodatkowo apt-get update i zaczeło wszystko śmigać. Jakby ktoś miał podobny problem polecam tą komendę po instalacji. Sorki za odświeżenie starego wątku.