Blog

Ghost CMS. Wprowadzenie.

Wprowadzenie do Ghost CMS, czyli omówienie filozofii działania lekkiego i przyjaznego CMS na bazie Node utworzonego.

Ghost CMS. Wprowadzenie.

Świat CMS-ów pod egidą PHP ma się bardzo dobrze, co sprawia że mnie już tak świetnie nie jest. Coby być dobrze zrozumianym: nie wadzi mnie to jakoś specjalnie samo w sobie, bardziej ubolewam nad faktem, że trudno o rzeczywiste alternatywy dla WordPressa, które nie wymagałyby wsparcia ze strony dziecka Rasmusa Lerdorfa. Oczywiście chodzi mi o rozwiązania dla użytkownika “hobbysty” z nieco większymi ambicjami, który z jednej strony chciałby mieć większą kontrolę na własnym projektem, ale przy okazji nie być zmuszanym do poświęcenia kilku tygodni na studiowanie dokumentacji tego czy owego narzędzia, a potem jeszcze mniej więcej tyle samo czasu wygospodarować na postawienie własnej strony. A jeśli komuś – tak jak mnie – nie po drodze z PHP, czemu pewnie kiedyś jakiś wpis poświęcę (jak mi się wreszcie tematy skończą, czyli pewnie dość szybko), to mam nadzieję, że zrozumiecie moje rozczarowanie. Tym bardziej. iż w naturalnym dla mnie otoczeniu Pythona raczej na próżno szukać takich rozwiązań.

Nie może więc dziwić, że w swoich poszukiwań zwróciłem się w kierunku ekosystemu budowanego wokół Node.js, choć i tutaj dość szybko nastąpiło rozczarowanie, tym niemniej w efekcie pochłonęły mnie całkowicie inne kwestie – z perspektywy czasu mogę napisać, że stało się tak na moje szczęście. Oczywiście na samym początku dość szybko natknąłem się na bohatera niniejszego wpisu, ponieważ to stosunkowo popularny CMS, choć chyba głównie za Wielką Wodą. Niestety pierwsze zetknięcie Z Ghost nie było najbardziej owocne, ponieważ mimo wszystko cały czas szukałam bliższego lub dalszego odpowiednika WP czy chociaż Drupala, który po prostu nie wymagałby znajomości PHP, gdyby zamarzyły mi się jakieś autorskiej rozwiązania. W przypadku Ghost na próżno szukać takiego bizantyjskiego rozpasania jak w przypadku wspomnianych rozwiązań.

Jednak z czasem po raz kolejny doceniłem ideę w myśl, której czasem mniej znaczy więcej, zwłaszcza, że od samego początku były zainteresowany bardziej zaangażowanym podejściem, gdzie nie wszystko muszę mieć podane na tacy. Taki właśnie wydaje się być Ghost, który zaspokoić powinien zestaw potrzeb dużo lepiej niż bardziej znane odpowiedniki, tym niemniej “ambitniejsze” projekty zawsze będą wymagać trochę więcej wiedzy technicznej od strony twórcy.  Z resztą z tego co czytałem tu i ówdzie od samego początku był on pomyślany jako “klasyczny” CMS, choć o dość sprecyzowanym profilu użytkowników końcowych i do dzisiaj raczej to ostatnie się nie zmieniło, ponieważ z założenia to przede wszystkim platforma dla blogerów. W pewnym sensie właśnie ten rys chyba nadal wydaje się decydujący dla tożsamości tego projektu, ponieważ jest on efektem pewnego zniechęcenia kierunkiem, w jakim zaczął zmierzać od pewnego momentu WordPress. Z resztą jego pomysłodawca był aktywnym członkiem społeczności zaangażowanej w tworzenie tego ostatniego. Na moje (i zapewne większości użytkowników Ghosta) szczęście w okolicach końcówki 2012 pan John O’Nolan, bo o nim mowa obecnie, stwierdził, że ówczesny i obecny hegemon w zakresie zarządzania treścią za bardzo oddala się od pierwotnej idei, przez co między innymi staje się przesadnie skomplikowany oraz przeładowany niepotrzebnymi funkcjonalnościami a przez powolny i zapewne w ogóle do niczego (i jak tu nie sympatyzować z tym człowiekiem).

W efekcie jakoś na jesieni 2012 wpadł na pomysł stworzenia alternatywy dla osób podobnie jak on rozczarowanych WordPressem i całkiem niedługo przeszedł do czynów. Stąd też na wiosnę roku następnego rozpoczął zbiórkę środków na Kicksterze, której powodzenie zapewne utwierdziło go o słuszności obranego kierunku, ponieważ założony cel (25 tysięcy funtów) osiągnął w niespełna pół doby, zaś w ciągu całej – trwającej prawie miesiąc – kampanii udało mu się przytulić ponad 300 tysięcy dolarów. Pierwsza wersja Ghost została opublikowana na GitHub tego samego roku, niedługo potem jak polskie dzieci poszły do szkoły, czyli 19 września i choć oczywiście od tego czasu projekt znacznie ewoluował, ale wydaje się, że mimo niewątpliwego sukcesu jego twórcy nie stracili pierwotnej idei z oczu. Obecnie to chyba ostatni znany mi przypadek w obrębie platformy Node.js (oczywiście pomijam zupełnie niszowe projekty), który próbuje dostarczyć kompleksowe rozwiązanie dla osób zainteresowanych publikowaniem treści w Internetach, choć kilka lat temu jego twórcy ulegli “modzie” czy zapewne potrzebie biznesowej i teraz można z powodzeniem wykorzystać tę platformę wyłącznie do tworzenia i zarządzania treścią z całkowitym pominięciem strony wizualnej.

Tym niemniej Ghost interesuje mnie właśnie jako całość, a nie tylko poręczne sposób na dostarczenie treści, która wymaga w dalszej kolejności obróbki wizualnej. Dlatego zacznijmy od przedstawienia – za stroną projektu – z czego zbudowany jest Duszek. Powiedzenie w tym kontekście, że ze sporej ilości kodu jest bez wątpienia prawdą, ale tutaj chodzi o nieco wyższy poziom abstrakcji. Na zamieszczonym niżej szkicu zostało wyodrębnionych pięć kluczowych elementów, choć nie stanie się wielka krzywda, jeśli dolne składowe potraktujemy razem (z resztą to samo robią autorzy na stronie projektu).  

Jeśli chodzi o składowanie danych, to w przypadku rozwiązań opierających się na lokalnych zasobach w grę wchodzą popularne otwartoźródłowe rozwiązania w rodzaju MySQL, PostgreSQL czy SQLite, choć nic nie stoi na przeszkodzie (oprócz chęci i odrobiny wiedzy), by spróbować wyjść poza ten zestaw obowiązkowy. Natomiast za sprawą użytej przez twórców Ghost biblioteki Bookshelf.js w roli narzędzia ORM (ang. Object-Relational Mapper, mapowanie obiektowo-relacyjne) te trzy wcześniej wymienione narzędzia są wspierane na dzień dobry. Nieco uprzedzając fakty napiszę, iż na użytek kolejnych wpisów poświęconych tej platformie korzystać będę z SQlite.

Jeśli chodzi o kwestie front-endu w Ghost, to zagadnieniu temu planuję poświęcić co najmniej jeden dedykowany wpis, więc na razie zatrzymywać się przy tym temacie nie będziemy. Tym samym kończąc słów parę należałoby poświęcić graficznej nakładce na całe to dobro, w której teoretycznie użytkownik spędzać będzie się najwięcej czasu. Cóż jednak mogę napisać o panelu administratora na bazie nader skromnych dotychczasowych doświadczeń? Na pewno w pierwszym kontakcie może on sprawiać wrażenie bardzo ascetycznego i to nawet aż za bardzo, choć z drugiej strony to miła odtrutka dla kokpitu WP, który nie dość, że nie należy do najbardziej estetycznych, to jest przy tym niemiłosiernie nieczytelny. Inna sprawa, że Ghost w porównaniu do słynnego konkurenta jednak jest wyraźnie uboższy w funkcjonalności, które można sobie wyklikać bez grzebania w kodzie. Jednakże – jak wspomniałem – prostota jest jedną z podstawowych wytycznych przyjętych przy realizacji tego projektu. Na ten moment napisać mogę, że z grubsza wszystko się zgadza, choć trzeba od razu zaznaczyć, że należy wziąć poprawkę, że pewnych funkcjonalności próżno szukać w pakiecie startowym jak chociażby systemu komentarzy, choć “problem” ten można rozwiązać na kilka sposobów (na ten moment ustalić mi się udało dwa z nich).  Natomiast na poruszanie kwestii faktycznych czy tylko rzekomych wad i zalet bohatera tego wpisu będzie jeszcze nieraz okazja przy szczegółowym omawianiu poszczególnych komponentów.