Jak zapewnić hosting dla ponad 230 rodzin dzieci z cukrzycą, jak nagiąć polskie prawo i jak może w tym pomóc serwer VPS 🤔
Historia niemałego problemu ze szczęśliwym zakończeniem.
Wątek 🧵 ↓
7 września 2023 roku dostałem na Facebooku powiadomienie o nowej, prywatnej wiadomości.
Konto z małą dziewczynką ustawioną jako zdjęcie profilowe, a nazwa konta... hmm... no brzmi jak typowy spamer. Chciałem dać bana nawet bez czytania wiadomości.
Otworzyłem ją jednak.
To nie była krótka notka "cześć! Jesteś?" czy tam "mam pytanie...".
To był DŁUGI list przedstawiający problem, o którego istnieniu, do tego dnia nie miałem pojęcia.
Odezwał się do mnie Tomek, tata Olgi (to jej fotka była na zdjęciu profilowym), który opisał, czym się zajmuje.
Tomek jest założycielem grupy "Technologie Diabetyka" zrzeszającej rodziców dzieci z cukrzycą. Opracowują oni, rozwiązania technologiczne służące do zdalnego monitorowania poziomu glukozy u dzieci.
Mówiąc prościej: siedząc w domu, wiesz, jak się ma Twoje dziecko.
Głównym backendem do realizacji takiego zadania jest otwartoźródłowa aplikacja Nightscout.
Dzięki niej możliwe jest podglądanie statystyk z systemów CGM (Continuous glucose monitor) przez internet.
Jest tylko jeden, malutki problem...
Aby używać tego systemu i nie płacić tysięcy złotych rocznie za sprzęt medyczny, musisz:
- mieć serwer VPS
- zainstalować Dockera + node w wersji 18.x + git
- postawić 4 kontenery Dockera
- postawić MongoDB
- postawić backupDB
- dodać certa SSL
- postawić reverse proxy na nginx
Oczywiście trzeba to też co jakiś czas aktualizować, aby współpracowało ze zmieniającymi się API od systemów CGM, więc co jakiś czas wypada na nowo zrobić pull-a kodu z GitHuba, zbudować obraz Dockera i postawić.
Jeśli jesteś nietechnicznym rodzicem, to masz OGROMNY problem.
Na szczęście organizacja, o której wcześniej wspomniałem (głównie za sprawą Dominika Dzieni), przygotowała gotowe instalatory, które szybko konfigurują Nightscouta.
Godzinka pracy i system można postawić na Heroku, FlyIO oraz na darmowym serwerze od Oracle.
No to, jeśli wszystko działa, to w czym problem?
• Heroku zwinął darmową ofertę 😢
• FlyIO to koszt kilkuset złotych rocznie per dziecko + trudna instalacja
• Oracle rozdaje losowe bany bez powodu 🤷♂️
Soft był gotowy, a stabilnego i taniego hostingu brak.
Wspomniany już Dominik, szukając tanich hostingów VPS, na które mogliby pozwolić sobie rodzice dzieci, trafił na Mikrusa.
Kupił wersję 2.1 (1 GB RAM, 10 GB dysku) i ręcznie postawił na nim Nightscouta.
Udało się! System ruszył i działał bardzo stabilnie.
Dominik stworzył liczący niemal 2000 linii kodu instalator (i updater zarazem) Nightscouta, dedykowany dla Mikrusa.
System dało się postawić w ciągu maksymalnie 30 minut, a zaktualizować w dosłownie 5 minut.
Sukces 💪
Po drodze pojawiły się tylko problemy z nieszczęsną domeną i HTTPS.
Tego nie dało się łatwo zautomatyzować. Każdy rodzic musiałby wykombinować swoją domenę, ustawić odpowiednie DNS-y, podpiąć ją np. do Cloudflare, ustawić rekord AAAA na IPv6 Mikrusa... no koszmar 😬
Zdecydowaliśmy się na wykorzystanie nie domen, a subdomen. Jedna domena skonfigurowana dla wszystkich z wildcardem na DNS i wildcardem w certyfikacie.
Pozostawał problem podpięcia domeny do konfiguracji Nigthscouta, do reverse proxy i restart tego wszystkiego.
Rozbudowałem API Mikrusa (tak, mamy coś takiego 😏) w taki sposób, aby możliwe było automatyczne dodawanie domeny do serwera na poziomie API, aby użytkownik nie musiał wchodzić do panelu, wyklikiwać konfiguracji i wracać do instalatora.
Czas instalacji skrócił się o ~10 minut.
Kolejnym problemem było umieszczenie przygotowanego instalatora na maszynie docelowej. Do tej pory poradnik instalacji zakładał przeklejenie polecenia typu "curl -s URL | bash" do terminala i czekanie.
Później instalator zaciągał dockera, nodejs, klienta gita itp.
Poszliśmy z adminami krok dalej i stworzyliśmy coś, co na własne potrzeby nazwaliśmy "Ubuntu Nightscout Edition" 😃
Jest to Ubuntu 22.04 z już zainstalowanymi wszystkimi pakietami wymaganymi przez aplikację + podczas instalacji zaciąga on najnowszą wersję instalatora z repo
To pozwoliło skrócić czas działania instalatora i to znacznie.
Z kilkunastu minut przygotowywania instalatora do... 5 sekund.
Chciałem pójść o krok dalej i przygotować "one click install" dla Nightscouta. Zero pracy w terminalu i 100% w UI.
Nooo... tak nie można.
Okazuje się, że (zweryfikowane u prawnika), to co chciałem przygotować, według polskiego prawa klasyfikuje się jako dedykowana usługa medyczna i to niestety w naszym kraju wymaga certyfikacji, która kosztuje 6 cyferek.
User musi inicjować instalator ręcznie na pustej maszynie.
Zautomatyzowaliśmy więc wszystko, co się da, ale nie za dużo, tak aby nie podpadać pod specyficzne wytyczne polskiego prawa.
Trzeba jednak przyznać, że powstała platforma, na której najłatwiej i najszybciej stawia się Nightscouta 😎
Przy okazji, w ramach obniżenia kosztów po stronie rodziców, przygotowany został oddzielny (ukryty) pakiet hostingowy przeznaczony dla rodziców ze wspomnianej grupy.
Jest to pakiet pozbawiony zysku.
Pokrywa jedynie koszty maszyn, więc jest śmiesznie tani.
Nadeszła premiera 🚀
Mikrus przeznaczony jest do zastosowań developerskich i hobbystycznych. Jesteśmy w stanie przyjąć około 100-200 nowych użytkowników miesięcznie bez kupowania dodatkowych dedyków (taki mamy 'zapas').
Problem w tym, że JEDNEGO DNIA powstało 150+ nowych VPS-ów 😱
Monitoring pewnego sektora naszej infrastruktury zaczął świecić najpierw na żółto, później już na czerwono.
Wszystko niby działało, ludzie byli zadowoleni, ale trzycyfrowy load, niekoniecznie z jedynką, czy dwójką na początku to nie jest coś, co admin chce oglądać.
Trzeba było przebudować infrastrukturę i to ASAP.
Nightscout nie jest aplikacją zoptymalizowaną. Jest zasobożerny i powolny.
Przepuściliśmy więc 100% ruchu webowego z Nightscoutów przez nasz serwer będący akceleratorem webowym (Cytrus). Tam dodaliśmy odpowiednie cachowanie.
Dodatkowo zakupiony został kolejny dedyk, a admini rozpoczęli procedurę migracji VPS-ów, aby równomiernie rozłożyć ruch.
Trochę tego było, ale Maciek i Mikołaj z zespołu Mikrusa świetnie ogarnęli temat w kilka dni. Dzięki im za to 🙂👍
To rozwiązało problem. Load się ustabilizował, a diabetycy zyskali stabilne środowisko do monitorowania stanu zdrowia swoich dzieci.
Przy okazji, społeczność Mikrusa zaangażowała się aktywnie w pomoc w tworzeniu narzędzi webowych na potrzeby projektu.
Dodatkowo skonfigurowaliśmy dedykowanego firewalla dla Nightscoutów (wycinanie ogromnego ruchu od kolegów z Azji + otwieranie tylko użytecznych portów).
Tę aplikację poznaliśmy na tyle dobrze, że dało się skroić usługę specjalnie pod nią. Globalnie nie jest to takie proste.
Od czasu rozpoczęcia współpracy, pakiet hostingowy dla Nightscouta został aktywowany ponad 230 razy. Nie wiem, ile dzieci to obsługuje, bo jedna instancja może hostować ich kilka.
Cieszy mnie, że udało nam się pomóc w rozwoju ciekawego i społecznie pożytecznego projektu.