Przejdź do głównej zawartości

MongoDB

Jak uruchomić MongoDB w CGC z oficjalnego obrazu, jak ustawić dane logowania użytkownika root i jak połączyć się z bazą wewnątrz namespace.

MongoDB 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 mongodb kończy się komunikatem odsyłającym do własnego obrazu i nic nie tworzy. Uruchom MongoDB samodzielnie poleceniem cgc compute create custom.

Uruchamianie

Utwórz wolumen na katalog danych i uruchom instancję z oficjalnego obrazu z ustawionymi danymi logowania użytkownika root:

cgc volume create -s 5 -sc <storage_class> mongo01-vol
cgc compute create custom -n mongo01 -c 1 -m 2 --image mongo:7 -v mongo01-vol -fp /data/db -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=<twoje_haslo>

Obraz startuje jako mongod --auth --bind_ip_all: serwer nasłuchuje na porcie 27017 i trzyma dane w /data/db, dlatego właśnie -fp /data/db jest właściwą ścieżką montowania.

Zawsze montuj ten wolumen. Bez niego dane leżą na ulotnym dysku poda i przepadają przy każdym restarcie, a nie tylko po usunięciu aplikacji: po cgc resource restart mongo01 instancja utworzona bez -v wraca z pustą bazą.

Z zamontowanym wolumenem dane przetrwają zarówno cgc resource restart mongo01, jak i usunięcie aplikacji i utworzenie jej ponownie z tym samym wolumenem i tym samym -fp /data/db. cgc compute delete usuwa aplikację razem z jej usługą, więc po ponownym utworzeniu trzeba jeszcze raz dodać port.

Domyślna konfiguracja

  • MONGO_INITDB_ROOT_USERNAME: użytkownik tworzony przy pierwszym uruchomieniu na pustym katalogu danych. Ustaw admin lub dowolną inną nazwę.
  • MONGO_INITDB_ROOT_PASSWORD: hasło tego użytkownika. Jeśli pominiesz obie zmienne, obraz uruchomi mongod bez --auth i każdy klient w namespace zostanie przyjęty bez uwierzytelniania.
  • JUPYTER_PORT=8888 oraz JUPYTER_TOKEN: CGC dodaje te dwie zmienne do każdej aplikacji custom. MongoDB je ignoruje.
informacja

Flaga -ce app_token= ustawia token aplikacji CGC, czyli wartość widoczną w cgc compute list -d, a nie hasło bazy danych. MongoDB odczytuje hasło ze zmiennej MONGO_INITDB_ROOT_PASSWORD, więc ustaw je właśnie tam; uwierzytelnienie tokenem aplikacji kończy się błędem Authentication failed.

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: mongosh kończy się komunikatem getaddrinfo ENOTFOUND mongo01. Najpierw dodaj port MongoDB:

cgc compute port add mongo01 -p 27017 -n mongo

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

mongosh "mongodb://admin:<twoje_haslo>@mongo01:27017/admin"

Bez danych logowania serwer odpowiada Command listDatabases requires authentication.

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 nadawaj MongoDB silne hasło użytkownika root i sprawdzaj wynik poleceniem cgc compute port list mongo01.