
Oferta
Każdy rodzaj usługi ma kartę z ceną startową: hosting WWW, boty Discord, Minecraft, VPS, GTA i SCP:SL. Karta prowadzi do pakietów, a ceny przeliczają się na euro i dolary po kursie NBP.
WaveHost to dostawca hostingu serwerów gier, VPS i serwerów dedykowanych. Zbudowaliśmy mu nową stronę sprzedażową z własnym zapleczem, nowy panel klienta z automatycznym zakładaniem usług i przeprowadzkę kont ze starego panelu klienta.
Strona, panel klienta, panel gier i bot zespołu działają osobno i każde ma własne wdrożenie. Klient przechodzi przez nie w jednej marce: od oferty na stronie, przez zamówienie w panelu, po własny serwer gry.
Oferta gier, VPS i serwerów dedykowanych z konfiguratorem, ochroną DDoS, opiniami, pytaniami i kontaktem, w ośmiu językach i trzech walutach. Treści i ceny zmienia zespół WaveHost w panelu admina.
Zamówienia, portfel z fakturami, usługi z konsolą, program partnerski, zgłoszenia i ustawienia konta, w sześciu językach. Każdą zamówioną usługę zakłada sam proces roboczy.
Pterodactyl w barwach WaveHost. Panel klienta zakłada w nim serwery gier przez API, a klient ma ich konsolę, zasilanie i ustawienia także u siebie w panelu klienta.
Na Discordzie zespołu pokazuje statystyki strony: odsłony, kliknięcia w ofertę, otwierane pytania i ruch z linków polecających. Codziennie wysyła raport i daje znać, gdy wynik przekroczy kolejny próg.
Prowadzi od oferty do zamówienia w panelu klienta. Teksty w ośmiu językach, ceny i wszystkie treści zespół WaveHost zmienia sam, w panelu admina strony.

Każdy rodzaj usługi ma kartę z ceną startową: hosting WWW, boty Discord, Minecraft, VPS, GTA i SCP:SL. Karta prowadzi do pakietów, a ceny przeliczają się na euro i dolary po kursie NBP.

Pięć tematów marki w jednej przewijanej sekcji. Lista po lewej zostaje na miejscu i linią postępu pokazuje, przy którym temacie jest czytelnik.

Pytania rozwijają się jedno pod drugim, a przycisk pod nimi przenosi rozmowę na Discorda WaveHost. Stopka zbiera ofertę gier, kontakt i dane firmy.
Ceny, pakiety i konfigurator VPS zespół WaveHost wpisuje raz, w panelu admina strony. Panel klienta bierze je stamtąd, a proces roboczy pilnuje, żeby w sprzedaży był tylko pakiet, który zmieści się na serwerach.
Nazwa, cena, opis, lista cech, wyróżnienie i widoczność każdego pakietu.
Kroki, pytania, opcje i dopłaty, z których klient składa własny serwer.
Pytania, opinie, pliki, strona o firmie i teksty w ośmiu językach, a obok analityka, linki polecające i zniżki.
Osobny obszar z własnym logowaniem: użytkownicy, serwery klientów, adresy IP, węzły, lokalizacje, wsparcie i maile.
Kategorie i pakiety przychodzą ze strony. Pakiet usunięty ze strony tylko się chowa, więc działające usługi zachowują swoją ofertę.
Panel czyta konfigurator ze strony, więc nowa cena albo opcja działa w nim bez nowego wdrożenia.
Węzeł, grę, rdzenie, pamięć i dysk ustawia zespół, a puste pola panel wypełnia z listy cech pakietu.
Klient wybiera lokalizację, a panel stawia usługę na najmniej obciążonym węźle z wolnymi adresami IP.
Proces roboczy co kilka minut sprawdza na każdym węźle wolną pamięć i dysk, z zapasem, oraz wolne adresy IP.
Pakiet, który już się nie zmieści, wypada ze sprzedaży, a wraca, gdy zasoby się zwolnią.
Dostępność każdej oferty zespół może przełączyć na ręczną i decydować o niej sam.
Niedostępny węzeł zostawia swoje oferty bez zmian, zamiast przełączać je tam i z powrotem.
Klient zamawia, płaci i zarządza usługą z jednego konta, w jednym z sześciu języków panelu. Pulpit od razu pokazuje saldo, usługi, najbliższą płatność, ostatnią aktywność, faktury i link polecający.
VPS w gotowym pakiecie albo złożony w konfiguratorze, serwer gry z wyborem lokalizacji i wersji gry, na przykład Paper albo Vanilla w Minecrafcie.
Saldo klient doładowuje przez Stripe: BLIK-iem, Przelewami24 albo kartą. Z portfela płaci za zamówienia i przedłużenia, a każda płatność ma fakturę do wydruku.
VPS ma konsolę, zasilanie, statystyki, kopie zapasowe, firewall, reinstalację i podużytkowników. Serwer dedykowany włącza się i pokazuje podzespoły przez IPMI albo Redfish.
Dłuższy okres przedłużenia wychodzi taniej, a przejście na większy pakiet kosztuje tylko różnicę za dni, które zostały do końca okresu.
Po zapłacie zamówienie trafia do kolejki BullMQ w Redisie, a osobny proces roboczy zakłada usługę bez udziału zespołu. API panelu tylko dodaje zadanie, więc klient od razu widzi usługę w instalacji.
Maszyna wirtualna przez API Proxmoxa
Panel wybiera w lokalizacji klienta najmniej obciążony węzeł, który ma wolne adresy IP i szablon wybranego systemu.
Proces roboczy zakłada maszynę z szablonu systemu, z adresami IP i z hasłem albo kluczem SSH, który podał klient.
Klient dostaje adres, port i użytkownika: SSH i root dla Linuksa albo RDP i Administrator dla Windowsa.
Panel oznacza maszynę jako aktywną i od razu daje konsolę, zasilanie, statystyki i kopie zapasowe.
Serwer w Pterodactylu przez jego API
Proces roboczy zakłada klientowi konto w Pterodactylu albo używa tego, które klient już ma.
Przy wybranej lokalizacji Pterodactyl sam dobiera węzeł, a bez niej panel bierze wolny port na węźle.
Pamięć, dysk i procesor przychodzą z pakietu, a puste hasła gry, na przykład RCON, dostają losową wartość.
Gdy gra tego wymaga, panel czeka na koniec instalacji, wgrywa pliki startowe, na przykład eula.txt Minecrafta, i dopiero wtedy włącza serwer.
Stan każdej usługi prowadzi proces roboczy według daty wygaśnięcia, więc zespół WaveHost nie pilnuje terminów ręcznie.
Zakłada maszynę albo serwer gry. Do końca instalacji panel wstrzymuje akcje, które mogłyby jej przeszkodzić, na przykład przedłużenie.
Zarządza usługą i przedłuża ją z portfela o miesiąc, dwa albo trzy. Każde przedłużenie ma fakturę i wpis w dzienniku aktywności.
Po terminie zatrzymuje VPS albo zawiesza serwer gry w Pterodactylu. Dane zostają na miejscu przez siedem dni.
Po siedmiu dniach bez przedłużenia usuwa maszynę albo serwer gry, więc miejsce na węźle wraca do sprzedaży.
Zapłata za zawieszoną usługę przywraca ją jako aktywną, z nowym okresem liczonym od dnia zapłaty.
Klient wybiera inny system, maszyna instaluje się od nowa, a nowe dane dostępu przychodzą mailem.
Zmiana pakietu dokłada zasoby do końca opłaconego okresu, a klient płaci tylko różnicę za pozostałe dni.
Klient pisze w panelu, a zespół WaveHost odpowiada tam, gdzie i tak pracuje: na swoim Discordzie. Obie strony rozmowy spina bot wsparcia.
Krok 1 z 5: Nowe zgłoszenie
Klient podaje temat, priorytet i pierwszą wiadomość w zakładce Wsparcie, bez wychodzenia z panelu.
Krok 2 z 5: Prywatny kanał zgłoszenia (w tle)
Bot zakłada kanał widoczny tylko dla zespołu i przypina na nim kartę z tematem, priorytetem, pierwszą wiadomością i przyciskiem z danymi klienta.
Krok 3 z 5: Odpowiedź z Discorda
Wiadomość napisana na kanale trafia do wątku w panelu. Bot oznacza ją jako dostarczoną, a gdy klient ją otworzy, jako przeczytaną.
Krok 4 z 5: Dalsza rozmowa
Odpowiedzi klienta pojawiają się na kanale pod jego nazwą, a zespół widzi, kiedy klient pisze. Odpisać można też z zakładki Wsparcie w panelu admina.
Krok 5 z 5: Zamknięcie
Zgłoszenie zamyka klient w panelu albo zespół przyciskiem na kanale, po potwierdzeniu. Kanał blokuje się i zostaje w historii jako zamknięty.
Klienci WaveHost mieli konta, saldo i historię płatności w poprzednim panelu. Napisaliśmy skrypt, który przenosi je do nowego panelu: czyta starą bazę zapytaniami SQL i zapisuje dane przez model nowego panelu, z jego walidacją.
Poziomy partnerskie, konta z saldem portfela, polecenia, płatności, zamówienia i historia prowizji, w kolejności, w jakiej od siebie zależą.
Z flagą --dry-run skrypt tylko wypisuje, co przeniesie, i niczego nie zapisuje, więc zespół widzi wynik przed zmianą bazy.
Każdy przeniesiony wiersz niesie identyfikator ze starego panelu, więc ponowne uruchomienie pomija to, co już przeszło.
Stare kody polecające dostają przedrostek, żeby nie zderzyły się z nowymi, a zamówienie bez odpowiednika w nowym katalogu czeka na ręczne przejrzenie.
Panel trzyma saldo klientów i dostęp do ich maszyn, więc ochrona obejmuje logowanie, dostęp do usług i płatności.
Kody TOTP z aplikacji uwierzytelniającej i klucze dostępu, którymi klient loguje się bez hasła.
Konto działa po potwierdzeniu adresu. Konto niepotwierdzone w ciągu doby proces roboczy usuwa.
Cloudflare Turnstile na rejestracji, logowaniu i resecie hasła, a w Redisie osobne limity prób dla logowania, płatności, zakupów, reinstalacji i firewalla.
Właściciel daje innej osobie dostęp do jednej usługi i wybiera, co jej wolno: zasilanie, konsolę, kopie, firewall albo przedłużenie. Współzarządzający przekaże dalej tylko to, co sam ma.
Logowania, przedłużenia i akcje na usługach zapisują się z czasem, a w ustawieniach klient widzi swoje zalogowane urządzenia i może je wylogować.
Saldo rośnie dopiero po zdarzeniu Stripe ze sprawdzonym podpisem, a każda płatność z portfela dostaje fakturę.
Pozostałe case studies i usługi, w których korzystamy z tego doświadczenia.