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.plw 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-alpinew tym samym docker-compose, nie musisz nic konfigurować ręcznie.
Instalacja krok po kroku
- W panelu Saplo wejdź w Katalog aplikacji i wybierz Directus (kategoria "Dane").
- 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.
- Zatwierdź instalację. Silnik stawia dedykowany kontener Postgres i kontener Directusa z oficjalnego obrazu
directus/directus, generuje losowe wartościKEYiSECRETwymagane 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. - Kontener Directusa startuje dopiero po tym, jak Postgres zgłosi gotowość (healthcheck
pg_isready), a silnik dodatkowo sprawdza podocker compose up, czy kontener faktycznie działa, bo sam sukces polecenia nie oznacza, że proces w środku nie wywalił się chwilę później. - 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.
- Wejdź pod adres domeny, na przykład
cms.saploapp.pl, dane logowania (e-mail i losowo wygenerowane hasło) znajdziesz w plikuDIRECTUS-SETUP.txtw katalogu aplikacji na Boxie. - Zmień hasło administratora zaraz po pierwszym zalogowaniu w Ustawieniach -> Użytkownicy, dane z pliku setup trzymaj tylko do czasu tej zmiany.
- 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.
- 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.
- Sprawdź wygenerowane endpointy pod
https://cms.saploapp.pl/items/<nazwa_kolekcji>(REST) orazhttps://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.