Prywatny projekt w tydzień na produkcji

Czy da się w tydzień wypuścić produkcję MVP własnego prostego projektu robionego po godzinach pracy? Challenge accepted!

Btw. nie martwcie się, że to drugi wpis z rzędu o projektach, zamiast o low level Javie. Nie mam zamiaru zmieniać profilu bloga. Po prostu poświęciłem dużo czasu na ten projekt i szkoda byłoby tego też nie opisać. A w moim mniemaniu wyszło całkiem spoko.

Prolog

Do indeksowania wybranego fragmentu internetu już się wcześniej zabierałem. Moim targetem były audycje radiowe – linki do nich oraz metadane, żeby mieć po czym szukać audycji.

Podobny potencjał dostrzegłem i w zupełnie innej sferze. Pojawiało się na bieżąco mnóstwo contentu, który warto by zaindeksować, aby łatwiej sobie tego pożądanego fragmentu poszukać. Toteż spytałem na jednej grupie Facebookowej, czy taka koncepcja jest sensowna i potencjalnie przydatna. Pomysł spotkał się z dużym entuzjazmem, zatem nic tylko wziąć się do roboty.

Charakterystyka projektu jest mocno nacelowana na czas – im szybciej tym szybciej. Zatem nie ma czasu na rzeźbienie, trzeba korzystać z gotowców, dowozić największy efekt najmniejszym kosztem. Bugi? Na później. Pracochłonny feature? Na koniec backlogu. Słowem – czyste naparzanie kodu 🙂

Technologie

Czas nagli, więc nie będę tworzył CRUDów od zera, stawiał serwera, zbędnie konfigurował itd. Zdarzyło mi się wcześniej korzystać z JHipstera, zatem stwierdziłem, że i w tym przypadku będzie to najlepsze narzędzie.

JHipster to w skrócie generator aplikacji opartych na Spring Boot. Tworzy on CRUDy razem z widokami. Tworzy kontrolery, opcjonalne serwisy, mappery oraz repozytoria Spring Data. Utrwalanie danych możliwe przez wykorzystanie relacyjnej bazy danych (u mnie Postgres, na dev jest H2), choć dostępne są również różne cache oraz NoSQLe, jednak z nich nie korzystałem.

Dostępne technologie front-endowe to Angular, Vue oraz React. Wygląd oparty na Bootstrap 4.

Czas zacząć robić tę robotę…

Na początku trzeba zdefiniować model – encje oraz relacje między nimi. Istnieje do tego ładny edytor webowy JDL-Studio. Można też skorzystać z innych narzędzi do definicji modelu, jednak wówczas nie miałem dostępu do kompa, a na tablecie ładnie dało radę wszystko wyklikać. W godzinę model był gotowy.

I tutaj pierwsze zaskoczenie – po zapisaniu projektu gdzieś w chmurze w tym JDL-Studio można go ładnie poprosić, żeby zaaplikował wygenerowany projekt do wybranego repozytorium na githubie poprzez stworzenie Pull Requesta. Zatem jak uzyskałem dostęp do kompa, można było zrobić git pull i zacząć naparzać kod!

Budowanie projektu to wykonanie ./mvnw. Rzecz jasna trzeba odczekać, aż Maven zaciągnie się sam, a potem zaciągnie pół internetu. Zależności front-endowe również są zaciągane automagicznie. Po jakimś czasie widzimy uruchomiony projekt w wersji developerskiej.

Development

Wygenerowane CRUDy wyglądają dość topornie i trzeba je znacznie podrasować (szczególnie formularz new/edit). Jakkolwiek style, layouty już istnieją predefiniowane i wyglądają nie najgorzej, zatem przynajmniej coś.

Fajne jest to, że do developerki JHipster generuje wstępnie dane użytkowników oraz losowe dane dla naszych encji – nie trzeba tyle klikać. Za to mvn clean czyści również całą bazę H2.

Gdyby ten projekt nie był „na szybkości”, to pewnie spodobało by mi się, że w ramach generowania kodu generowane są testy. I to nie tylko jednostkowe, ale też integracyjne, end to end, a nawet (co mnie zdziwiło) testy architektury aplikacji.

JHipster jednak nie tylko generuje model i widoki. Generuje również całą przydatną otoczkę aplikacyjną. Można wymienić rejestrację, autoryzację, uwierzytelnianie, metryki, zarządzanie loggerami, użytkownikami. Audyt – kto kiedy się logował, healthchecki, podgląd konfiguracji to również przyjemna sprawa. Wszystko to dostępne od ręki dla admina. Zwykły użytkownik może domyślnie tylko zarządzać encjami biznesowymi. Niezalogowany może się co najwyżej zarejestrować lub zalogować (zabezpieczone bodajże przez Spring Security).

Na produkcję z tym!

Wymagana konfiguracja produkcyjna projektu jest minimalna – u mnie ograniczyło się to do konfiguracji skrzynki pocztowej, żeby projekt mógł wysyłać maile do rejestracji. Zatem projekt jest prawie od razu gotowy na produkcje.

Na produkcję, czyli gdzie? Otóż JHipster również i tutaj ma wsparcie dla różnych rozwiązań: AWS, Azure, GCP, Kubernetes, Heroku oraz Openshift.

Osobiście wybrałem Heroku, bo tanio – domyślnie za free możesz testowo postawić Proof of Concept i postawić Postgresa do 10 000 wierszy.

Jednak z darmowym planem jest o tyle problem, że gdy aplikacja nie jest używana to ją ubijają. Za to za 7 $ miesięcznie będzie raz dziennie restartowana, lecz będzie działać cały czas. Limit pamięci – 512MB; metryki (nieco inne niż w JHipster) też ograniczone – do ostatniej doby. Deployment oczywiście z downtime (w przypadku jednej instancji serwisu).

Wrzucenie tego na produkcję z JHipsterem to bajka! Wystarczyło zainstalować integrację do heroku, wpisać jhipster heroku, wybrać wersję Javy i po kilku minutach nowa wersja jest na prodzie! A byłoby jeszcze szybciej, ale testy się „muszą” odpalić 😉

Ostatnie szlify

Nową apkę warto postawić pod jakąś bardziej ambitną domeną niż domyślna: https://<nazwaAplikacji>.herokuapp.com/. Osobiście kupiłem na OVH domenę za 7 zł na rok, więc to też nie jest jakiś super koszt. Domena gotowa do użycia w jeden dzień – tylko skonfigurować.

Warto wspomnieć, że Heroku samo podpina certyfikat od Let’s Encrypt za free i konfiguruje, więc HTTPSa mamy również zerowym kosztem.

Przyda się również pamiętać, żeby zmienić hasło z admin:admin i user:user na jakieś trudniejsze 🙂

Na szybkości zrobiłem też testy wydajnościowe i aplikacja klęka przy mniej więcej 20 req/s.

Epilog

Warto by powiedzieć co tak naprawdę było przedmiotem projektu 😉

Otóż jest taki kandydat na prezydenta, który bardzo mocno poszedł w internety. Codziennie przynajmniej jeden live z odpowiedziami na pytania ludzi. Jednak trudno się odnajduje potem te fragmenty, kiedy jaki temat był na tapecie.

Zatem poindeksowałem, co usłyszałem na 30 filmikach na Youtube, przeczytałem na 42 stronach pdfu z programem/wizją oraz na 8 z 13 stron www z programem w internetach.

Wyszło jakieś 200-300 przeróżnych tematów.
Co by nie mówić, to contentu jest naprawdę sporo… U innych kandydatów roboty byłoby mniej (a na jeszcze innych na program trzeba czekać do 4 dnia przed wyborami, więc bym nie zdążył).

Cały projekt, jeśli chcecie zobaczyć, dostępny na tej oto podlinkowanej stronie.

To by było na tyle. Mam nadzieję, że apka podziała jeszcze 3 tygodnie, a potem będzie można zaorać 😉

A potem wreszcie wrócić do pisania o JVMie!

Oceń wpis

Autor: jgardo

Programista Java od 2013 roku. Interesuje się niskopoziomową Javą, ekosystemem Jvm i jego wydajnością. Co jednak nie przeszkadza w przywiązywaniu uwagi do czystości kodu w życiu codziennym ;) Pracuje w PayU.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *