Przejdź do głównej zawartości

Redis

Jak uruchomić Redis w CGC z oficjalnego obrazu, jak nadać mu hasło, jak zachować jego dane i jak połączyć się z nim wewnątrz namespace.

Redis jest wymieniony przez cgc db create --help, ale nie da się go w ten sposób utworzyć: licencja nie pozwala CGC udostępniać go jako aplikacji tworzonej jednym kliknięciem. cgc db create redis kończy się komunikatem odsyłającym do własnego obrazu i nic nie tworzy. Uruchom Redis samodzielnie poleceniem cgc compute create custom.

Uruchamianie

Oficjalny obraz startuje bez żadnego hasła i z appendonly ustawionym na no, więc przekaż polecenie startowe, które ustawi hasło i włączy plik append-only. cgc compute create czyta polecenie startowe ze standardowego wejścia:

cgc volume create -s 5 -sc <storage_class> redis01-vol
echo 'redis-server --requirepass <twoje_haslo> --dir /data --appendonly yes' | cgc compute create custom -n redis01 -c 1 -m 2 --image redis:7 -v redis01-vol -fp /data

Serwer nasłuchuje na porcie 6379. --dir /data kieruje Redis na zamontowany wolumen, a --appendonly yes włącza plik append-only, dzięki czemu dane przetrwają zarówno cgc resource restart redis01, jak i usunięcie aplikacji i utworzenie jej ponownie z tym samym wolumenem i tym samym poleceniem startowym. cgc compute delete usuwa aplikację razem z jej usługą, więc po ponownym utworzeniu trzeba jeszcze raz dodać port.

Zawsze montuj ten wolumen i kieruj na niego --dir. Uruchomiony bez -v Redis trzyma dane na ulotnym dysku poda i przepadają one przy każdym restarcie, a nie tylko po usunięciu aplikacji: po cgc resource restart redis01 taka instancja wraca z DBSIZE równym 0.

Domyślna konfiguracja

  • Kontener uruchamia dokładnie to polecenie, które przekażesz na standardowe wejście. Bez polecenia startowego obraz uruchamia zwykły redis-server *:6379: requirepass jest pusty, a redis-cli PING odpowiada PONG bez żadnego hasła, więc wchodzi każdy klient w namespace.
  • Domyślne ustawienia takiego serwera to dir /data, appendonly no oraz save 3600 1 300 100 60 10000. Bez --appendonly yes na wolumen trafiają wyłącznie te okresowe migawki, więc najnowsze zapisy nadal mogą przepaść.
  • JUPYTER_PORT=8888 oraz JUPYTER_TOKEN: CGC dodaje te dwie zmienne do każdej aplikacji custom. Redis je ignoruje.
informacja

Polecenie startowe nie może zawierać znaku |: klient usuwa z niego każdy | przed wysłaniem, a to, co stało za potokiem, trafia do redis-server jako dodatkowe argumenty i zatrzymuje go z błędem FATAL CONFIG FILE ERROR. Flaga -ce app_token= ustawia token aplikacji CGC, czyli wartość widoczną w cgc compute list -d, a nie hasło Redisa: na token aplikacji Redis odpowiada WRONGPASS i przyjmuje wyłącznie hasło z --requirepass.

Jak się połączyć

Aplikacja custom nie ma usługi, dopóki nie opublikujesz portu, a do tego czasu jej nazwa nie rozwiązuje się wewnątrz namespace. Najpierw dodaj port Redisa:

cgc compute port add redis01 -p 6379 -n redis

Aplikacja jest wtedy dostępna z każdej innej aplikacji w Twoim namespace jako redis01:6379:

redis-cli -h redis01 -p 6379 -a <twoje_haslo> PING

Polecenie odpowiada PONG. Bez -a Redis odpowiada NOAUTH Authentication required.

uwaga

Dodanie portu rejestruje również publiczny adres ingress, a w CLI 1.5.1 flaga -ni/--no-ingress temu nie zapobiega: port nadal jest wypisywany z ingress True. Zawsze uruchamiaj Redis z --requirepass i sprawdzaj wynik poleceniem cgc compute port list redis01.