Jak to działa?
Strona internetowa
Aplikacja wykorzystuje środowisko uruchomieniowe Node.js - generuje ona stronę internetową, wraz z panelem sterującym. Zmienne elementy strony są przechowywane w bazie MySQL, która jest replikowana pomiędzy serwerami. Aplikacja bazuje na potencjale kontenerów Docker, produkcyjnie uruchamiana jest w klastrze Kubernetes. Aby zapewnić szybkie wdrażanie kodu korzystamy z techniki CI/CD przy pomocy serwisów GitLab i Docker Hub.
Strona dla użytkownika jest dostarczana z najbliższego serwera poprzez usługę od firmy Cloudflare. Maszyny produkcyjne komunikują się między sobą poprzez VPN WireGuard pracujący w konfiguracji siatki (mesh). Infrastruktura jest zaprojektowana pod kątem wysokiej dostępności oraz możliwości szybkiego skalowania.
Użyte technologie:
Sterowanie oświetleniem
Informacje o kolorach lub efektach wysyłane są do sterownika w danej lokalizacji poprzez oprogramowanie Socket.io.
Każdy z nas ma różne autorskie sterowniki, jednak całość bazuje na kodzie klienta napisanym w języku programowania JavaScript. Do oświetlenia wykorzystujemy: karty z przekaźnikami, kontrolery jasności PWM, diody programowalne, taśmy LED. Do realizacji całości przydatny jest najczęściej mały komputer Raspberry Pi lub mikrokontroler ESP8266/ESP32. Na mikrokontrolerze zainstalowane jest oprogramowanie WLED lub ESP Easy.
Użyte technologie:
Transmisja obrazu
Nasz serwis streamingowy jest zbudowany na zasadach mikrousług, co zapewnia wyjątkową elastyczność i skalowalność infrastruktury. Używając konfiguracji docker-compose, tworzymy spójne środowisko, które jest zarówno łatwe w zarządzaniu, jak i wysoce konfigurowalne.
Jako odbiorca sygnału video służy nginx-rtmp, który jest pierwszym punktem przetwarzania strumienia i zarządza autoryzacją. Następnie sygnał kierowany jest do OvenMediaEngine, gdzie odbywa się dalsze przetwarzanie w celu dostarczenia transmisji z jak najmniejszym opóźnieniem. W obecnym ustawieniu nie dokonujemy transkodowania obrazu, co pozwala na bardzo szybką dystrybucję materiału do użytkownika końcowego.
System wykorzystuje skrypty do synchronizacji i generowania miniatur, które są następnie dystrybuowane między serwerami za pomocą rsync. Dzięki temu proces jest zautomatyzowany i efektywny, zapewniając bieżące aktualizacje bez nadmiernego obciążania sieci.
Użyte technologie:
Monitoring
Cała nasza infrastruktura oraz aplikacja jest monitorowana i testowana 24h/7. Monitoring dostępności zapewniony jest poprzez Uptime Kuma, Uptime Robot, Zabbix i LibreNMS. Do monitorowania zdarzeń aplikacji wykorzystujemy oprogramowanie Elasticsearch. Parametry sprzętowe oraz wydajnościowe maszyn wirtualnych monitorujemy przy użyciu Zabbix.
Użyte technologie:
Drukarka termiczna
Pomysł udostępnienia drukarki był całkowicie spontaniczny. Do realizacji tego zadania chcieliśmy wybrać drukarkę, która będzie mogła być bezobsługowa w najbardziej możliwym stopniu. Po przejrzeniu wielu ofert wybraliśmy drukarkę Epson TM-T88IV. Drukarka wspiera standard ESC/POS, więc można do niej "pisać" z wykorzystaniem gotowych bibliotek dostępnych w sieci.
Za przekazywanie wiadomości z Discord na drukarkę odpowiedzialny jest nasz autorski skrypt, korzystający z biblioteki DiscordPHP. Generowana jest odpowiednia wiadomość i przekazywana do RabbitMQ.
Za przekazywanie wiadomości z Tipply odpowiedzialna jest nasza autorska biblioteka, która również komunikuje się z RabbitMQ. Wykorzystujemy RabbitMQ do kolejkowania wiadomości wychodzących do drukarki. Drukarka do komputera podłączona jest portem RS232, który mógłby nie nadążyć przy dużej ilości wiadomości - dlatego kolejkujemy wiadomości.
Rzeczy wykorzystane do realizacji tej części projektu:
Oprogramowanie:
Masz dodatkowe pytania? Chcesz dowiedzieć się czegoś więcej?
Zobacz również zakładkę "O autorach"
Fanpage na Facebooku
Przejdź na FacebookCzat tekstowy i głosowy na Discordzie
Dołącz na Discord