VulCode

Panel operatora Flaem

Panel, z którego firma hostingowa prowadzi całą instalację Flaem: węzły i ich podłączanie, pakiety, finanse, faktury w KSeF, sieć z BGP i zespół z uprawnieniami na każdą akcję. Pulpit zbiera sprzedaż, stan węzłów i sprawy czekające na człowieka, a konfiguracja startowa prowadzi od pustej instalacji do pierwszej sprzedaży. Ryzykowne działania czekają na drugi podpis i trafiają do dziennika audytu.

TypPanel operatora hostingu
FrontendReact 19, TypeScript, Tailwind 4
APIRust
InstalacjaNa serwerach operatora
Języki paneluPL, EN, DE, CS, UK
Panel operatora Flaem

Wprowadzenie

Flaem to system, na którym firma hostingowa sprzedaje i prowadzi serwery gier, VPS-y, strony, domeny i pocztę. Ten panel jest jego centrum dowodzenia: stąd operator stawia instalację, podłącza węzły, ustala pakiety i ceny, rozlicza klientów i resellerów, prowadzi sieć i zespół. Całość stoi na jego własnych maszynach, więc panel nie może zakładać, że ktoś inny pilnuje infrastruktury.

Zbudowaliśmy go wokół pytania, które operator zadaje sobie każdego ranka: co dziś wymaga człowieka? Pulpit, kolejki, alarmy i zatwierdzenia odpowiadają na nie jednym ekranem, a reszta panelu służy temu, żeby takich spraw było jak najmniej.

Od pustej instalacji do pierwszej sprzedaży

Świeża instalacja to licencja, a nie sklep. Zanim pierwszy klient cokolwiek kupi, trzeba podać dane sprzedawcy, włączyć bramki płatności, połączyć KSeF, wybrać rejestratora domen, dodać pule adresów IP, podłączyć węzły i opublikować pierwszą ofertę. Każdy z tych kroków łatwo pominąć, a pominięty wychodzi dopiero wtedy, gdy klient utknie w koszyku.

Konfiguracja startowa prowadzi przez całą tę drogę w kolejności, w jakiej operator naprawdę pracuje, i kończy się nie na węzłach, tylko na sklepie z czymś do kupienia. Stan każdego kroku panel czyta z samej konfiguracji przy każdym wejściu, więc kroku nie da się odhaczyć bez zrobienia go, a krok, który ktoś później cofnął, wraca na listę. Panel zapisuje tylko decyzję "niepotrzebne": krok, którego instalacja nie potrzebuje, zostaje na swoim miejscu z jednym zdaniem wyjaśnienia, zamiast znikać.

setup_checklist.rs · rust
pub const STEPS: &[&str] = &[
    "licence",
    "staff_two_factor",
    "company_details",
    "domain_and_smtp",
    "currency_and_tax",
    "payment_gateways",
    "ksef",
    "sms",
    "domain_registrar",
    "push",
    "network",
    "nodes",
    "catalogue",
    "storefront",
];

Drugi na liście jest obowiązkowy drugi składnik logowania dla zespołu. To świadomy wybór: pytanie, kto w ogóle może prowadzić instalację, trzeba rozstrzygnąć, zanim ktokolwiek podepnie do niej pieniądze.

Pulpit, który zaczyna od tego, co czeka

Na pulpicie są liczby, które operator i tak sprawdza każdego dnia: MRR, sprzedaż, aktywni klienci i aktywne usługi, każda ze zmianą wobec poprzedniego okresu. Obok wykres przychodu, węzły na żywo z zajętością procesora i pamięci oraz lista spraw czekających na człowieka: opłacona usługa bez wolnego adresu, kopia zapasowa, która nie wyszła w nocy, faktura odrzucona przez KSeF, pilne zgłoszenia i zwroty czekające na drugi podpis.

Ta lista jest sercem ekranu. Każda pozycja mówi, czego dotyczy i od kiedy czeka, a kliknięcie prowadzi prosto do miejsca, w którym da się ją załatwić. Dyżurny nie przegląda dziesięciu zakładek w poszukiwaniu problemu, bo problemy same ustawiają się w kolejce.

Węzły prowadzone z panelu, nie przez SSH

Węzeł podłącza się komendą, którą panel sam przygotowuje. Od tej chwili jego telemetria, aktualizacje, sieć i kopie są w panelu: każdy rdzeń, dysk i karta sieciowa, oczekujące pakiety systemu, poprawki bezpieczeństwa i potrzeba restartu. Każda paczka aktualizacji przechodzi kontrolę podpisu, a jeśli nowa wersja agenta nie wstanie, węzeł sam wraca do poprzedniej. Zmiana sieci węzła ma ustalony czas na potwierdzenie łączności z centralą i bez potwierdzenia wycofuje się sama, więc operator nie odetnie się od zdalnej maszyny jednym złym zapisem.

Gdy węzeł przestaje odpowiadać, nic nie przenosi się samo w środku nocy. Decyzję podejmuje człowiek, a resztę robi system.

Węzeł nie odpowiada

jego usługi stoją, a reszta instalacji działa normalnie.

Panel czeka

tyle, ile ustawił operator, bo krótka przerwa w sieci to jeszcze nie awaria.

Dyżurny dostaje alarm

a gdy nikt nie zareaguje, alarm idzie wyżej po drabinie.

Człowiek decyduje

jedno polecenie rozkłada usługi na pozostałe węzły tak, żeby żaden nie przekroczył ustalonego progu.

Pieniądze, faktury i KSeF w tym samym miejscu

Faktura powstaje w chwili płatności, a plik FA(3) idzie do KSeF w tle. Zakup nigdy nie czeka na KSeF, więc przerwa po stronie systemu podatkowego nie blokuje sprzedaży ani odnowienia. Ekran faktur pokazuje przy każdym dokumencie jego drogę: wystawiona, wysłana, przyjęta z numerem KSeF albo odrzucona z powodem. Odrzucona trafia na listę spraw dla człowieka, a poprawka idzie korektą tą samą kolejką.

Obok są serie numeracji, stawki VAT, procedura OSS dla klientów z innych krajów Unii, kursy NBP przy fakturach w obcej walucie i rejestr podatkowy. Po zamknięciu miesiąca operator pobiera jedną paczkę dla księgowej: przychód, MRR, zwroty, prowizje resellerów, rentowność węzłów i zobowiązania z portfeli klientów, razem z plikiem JPK.

Sieć sprzedawana jak każda usługa

Operator z własną siecią sprzedaje nie tylko serwery, ale też tranzyt, adresy IP i sesje BGP. W panelu ma numery AS, prefiksy z obiektami route w RIPE i ważnością w RPKI, sesje BGP z właścicielem, filtrem tras i historią oraz ochronę przed atakami u dostawców takich jak Path.net i OVH. Trasa nieważna w RPKI jest odrzucana, zanim trafi do zapisu, a każdy adres ma swój stan: wolny, przypisany do usługi, przypisany do konta albo wydzierżawiony. Ten sam adres nigdy nie trafi do dwóch maszyn.

Zespół, w którym każdy może tyle, ile mu dano

Role składa się z pojedynczych uprawnień, z dokładnością do jednej czynności, więc wsparcie może czytać faktury, a nie robić zwrotów. Rolę da się też zawęzić do wybranych węzłów albo do marki jednego resellera. Granicy pilnuje backend przy każdym żądaniu, a nie ukryty przycisk w interfejsie: trasa panelu bez wpisanego uprawnienia dostaje odmowę, zamiast stać otworem.

scope.rs · rust
fn axis_covers(assignment: Option<Uuid>, target: Option<Uuid>) -> bool {
    match (assignment, target) {
        (None, _) => true,
        (Some(_), None) => false,
        (Some(assigned), Some(actual)) => assigned == actual,
    }
}

Najważniejszy jest środkowy przypadek. Rola zawężona do jednego węzła nie obejmuje działania, które węzła w ogóle nie dotyczy, bo inaczej opiekun jednej maszyny mógłby zmieniać ustawienia całej instalacji. Działania, których nie da się cofnąć, czyli usunięcie usługi, usunięcie węzła i ruch pieniędzy, zamieniają się we wniosek dla drugiej uprawnionej osoby, a zatwierdzenie od razu wykonuje zapisane działanie. Każdy ruch personelu trafia do dziennika audytu: kto, co, kiedy, skąd i na kim.

Oszustwa, nadużycia i przejście z innego panelu

Hosting gier przyciąga kradzione karty, bo usługa jest gotowa w kilka minut, a obciążenie zwrotne przychodzi po tygodniach. Panel ocenia każde zamówienie i każdą rejestrację, zanim cokolwiek zostanie uruchomione: przyjmuje, odkłada do przeglądu z wstrzymaną dostawą albo odrzuca z numerem sprawy. Osobno pilnuje tego, co maszyny klientów robią innym: koparek, spamu, skanowania i wychodzących ataków, z reakcją, która rośnie stopniowo i którą zawsze da się cofnąć.

Do Flaem przechodzi się z dotychczasowego systemu rozliczeń, panelu gier, panelu VPS albo panelu hostingu WWW. Import zaczyna się od próby na sucho, a w nowym systemie nic nie powstaje, dopóki operator nie zatwierdzi raportu. Przeniesione usługi działają od pierwszej chwili, ale nie są rozliczane ani zawieszane, dopóki operator ich nie wyceni, więc w trakcie przejścia nikt nie dostanie faktury ani blokady przez przypadek.

Jaki jest finalny efekt?

Operator prowadzi hosting z jednego panelu: od pustej instalacji, przez pierwszą sprzedaż, po codzienną obsługę węzłów, pieniędzy i ludzi. Nie skacze między billingiem, panelem gier i terminalem, bo zamówienie, maszyna, faktura i zgłoszenie żyją w jednej instalacji i znają się nawzajem.

Najważniejsze dzieje się w tle. Ryzykowne zmiany mają przygotowaną drogę powrotu, nieodwracalne czekają na drugą osobę, a wszystko, co wymaga uwagi, ustawia się w jednej kolejce zamiast ginąć w skrzynce. Dzięki temu instalację może prowadzić mały zespół, a każda decyzja zostawia ślad, do którego da się wrócić.

Pytania o Panel operatora Flaem

Więcej projektów

Inne realizacje z tej samej kategorii - zobacz, jak podchodzimy do podobnych wyzwań.

Masz podobny projekt?

Napisz do nas - wycena jest bezpłatna i wraca w godzinę.