Jak postawić Directus na Saplo (headless CMS)

Contentful za projekt z realnym ruchem potrafi wystawić rachunek liczony w tysiącach złotych miesięcznie, bo płacisz za każde wywołanie API, nie za samo hostowanie treści. Directus to open source headless CMS, który generuje panel admina wprost ze schematu Twojej bazy danych i wystawia REST oraz GraphQL bez pisania backendu, a Ty stawiasz go na własnym Boxie bez limitu zapytań.

Grzegorz Kalmus· ·32 wyświetleń

Agencja budująca stronę albo aplikację na zamówienie klienta prędzej czy później trafia na pytanie, gdzie ma siedzieć treść: teksty, zdjęcia produktów, wpisy blogowe, dane pokazywane we frontendzie. Contentful rozwiązuje ten problem, ale rozlicza się od liczby wywołań API, więc rachunek rośnie razem z ruchem na stronie klienta, nawet jeśli sama treść się nie zmienia. Directus to open source headless CMS, który robi to samo bez licznika zapytań: podłączasz bazę danych, dostajesz gotowy panel admina wygenerowany automatycznie ze schematu tej bazy oraz REST i GraphQL API od ręki. Poniżej krok po kroku, jak postawić Directus na Saplo.

Dlaczego Directus zamiast Contentfula

Contentful i podobne płatne headless CMS mają dwie cechy, które najbardziej doskwierają agencjom pracującym dla wielu klientów naraz:

  • rozliczenie od liczby wywołań API - im więcej ruchu generuje strona klienta, tym wyższy rachunek co miesiąc, a przy kilku projektach na jednym koncie koszty się sumują,
  • model treści trzeba budować ręcznie od zera w panelu dostawcy - Directus zamiast tego czyta istniejący schemat bazy danych i sam generuje z niego panel administracyjny, kolekcje odpowiadają tabelom, pola odpowiadają kolumnom.

Directus nie jest osobną bazą treści oderwaną od reszty systemu, tylko warstwą nad Twoją własną bazą danych. Jeśli agencja ma już model danych zaprojektowany pod konkretny projekt, Directus wystawia go jako API zamiast zmuszać do przepisania struktury pod cudzy format.

Wymagania

Żeby postawić Directus na Saplo, potrzebujesz:

  • Boxa z uruchomionym Dockerem (silnik włącza go automatycznie przy instalacji z katalogu, wymagane jest nesting w kontenerze, co Saplo ma domyślnie),
  • minimum 1 GB RAM wolnego na Boxie i 3 GB miejsca na dysku, czyli plan Box M lub wyższy,
  • domeny albo subdomeny *.saploapp.pl w cenie każdego planu, pod którą stanie panel Directusa,
  • własnego kontenera PostgreSQL, silnik Saplo ma współdzieloną bazę tylko dla MySQL/MariaDB, więc Directus dostaje dedykowany kontener postgres:16-alpine w tym samym docker-compose, nie musisz nic konfigurować ręcznie.

Instalacja krok po kroku

  1. W panelu Saplo wejdź w Katalog aplikacji i wybierz Directus (kategoria "Dane").
  2. Wskaż Box z minimum 1 GB wolnego RAM, na którym ma stanąć Directus, oraz domenę albo subdomenę, pod którą będzie działał panel.
  3. Zatwierdź instalację. Silnik stawia dedykowany kontener Postgres i kontener Directusa z oficjalnego obrazu directus/directus, generuje losowe wartości KEY i SECRET wymagane przez aplikację, wystawia panel wyłącznie na loopback Boxa i podpina pod nginx, który serwuje go pod wskazaną domeną z darmowym SSL. Na zewnątrz wystawiony jest tylko port 443, nie surowy port kontenera.
  4. Kontener Directusa startuje dopiero po tym, jak Postgres zgłosi gotowość (healthcheck pg_isready), a silnik dodatkowo sprawdza po docker compose up, czy kontener faktycznie działa, bo sam sukces polecenia nie oznacza, że proces w środku nie wywalił się chwilę później.
  5. Po zakończeniu instalacji panel Directusa jest dostępny pod wskazaną domeną.

Pierwsza konfiguracja

Obraz Directusa zakłada konto administratora automatycznie przy pierwszym starcie na pustej bazie, więc podobnie jak przy Listmonku czy Paperless-ngx nie przechodzisz oddzielnego kreatora rejestracji.

  1. Wejdź pod adres domeny, na przykład cms.saploapp.pl, dane logowania (e-mail i losowo wygenerowane hasło) znajdziesz w pliku DIRECTUS-SETUP.txt w katalogu aplikacji na Boxie.
  2. Zmień hasło administratora zaraz po pierwszym zalogowaniu w Ustawieniach -> Użytkownicy, dane z pliku setup trzymaj tylko do czasu tej zmiany.
  3. W Ustawieniach danych utwórz pierwszą Kolekcję (Collection), Directus od razu proponuje pola pod typowe przypadki, na przykład tekst, liczba, obraz, relacja do innej kolekcji, a każda kolekcja to jedna tabela w bazie Postgres.
  4. Otwórz zakładkę Ustawienia -> Role i uprawnienia i skonfiguruj rolę Public, jeśli frontend ma czytać treść z API bez logowania, to właśnie stąd nadajesz jej dostęp tylko do odczytu wybranych kolekcji.
  5. Sprawdź wygenerowane endpointy pod https://cms.saploapp.pl/items/<nazwa_kolekcji> (REST) oraz https://cms.saploapp.pl/graphql (GraphQL), oba działają od razu, bez dodatkowej konfiguracji.

Directus na Saplo kontra Contentful

Contentful Directus na Saplo
Model cenowy opłata rośnie z liczbą wywołań API i rekordów stały koszt Boxa, bez limitu zapytań
Model treści budujesz ręcznie w panelu dostawcy od zera generowany automatycznie ze schematu Twojej bazy
Baza danych zamknięta, dostęp tylko przez API dostawcy własny Postgres, masz do niego pełny dostęp
API REST i GraphQL, limit zapytań zależny od planu REST i GraphQL bez licznika wywołań
Gdzie są dane infrastruktura Contentfula Twój Box

Najczęstsze pytania

Czy Directus nadaje się do projektu, który już ma zaprojektowaną bazę danych? Tak, to jego mocna strona, panel admina i API generują się automatycznie ze schematu istniejącej bazy, więc nie trzeba przepisywać modelu danych pod format narzucony przez dostawcę CMS.

Czy trzeba samodzielnie stawiać bazę Postgres przed instalacją? Nie, silnik Saplo stawia dedykowany kontener Postgres razem z Directusem w tym samym docker-compose i sam wstrzykuje dane połączenia, do samej instalacji nie potrzebujesz żadnej zewnętrznej konfiguracji.

Czy API Directusa ma limit liczby wywołań? Nie, w odróżnieniu od Contentfula czy podobnych płatnych usług liczba zapytań do REST i GraphQL ograniczona jest wyłącznie zasobami Boxa, nie licznikiem w cenniku.

Da się podłączyć Directusa do frontendu w Next.js albo aplikacji mobilnej? Tak, do tego Directus służy, frontend albo aplikacja mobilna pobiera treść przez wygenerowane REST albo GraphQL API, a redakcja klienta edytuje ją w osobnym panelu, bez dostępu do kodu.

Dlaczego pierwsze dane logowania trzeba szukać w pliku na Boxie, a nie w mailu? Directus zakłada konto administratora automatycznie przy pierwszym starcie kontenera, silnik Saplo zapisuje wygenerowane hasło w pliku DIRECTUS-SETUP.txt w katalogu aplikacji zamiast wysyłać je mailem, ten sam wzorzec co przy innych aplikacjach z automatycznym kontem startowym.

Jeśli budujesz projekt z osobnym frontendem i potrzebujesz zaplecza treści bez rachunku za każde wywołanie API, napisz do nas, pomożemy dobrać Box pod skalę Twojego projektu.