Stos technologiczny NameOcean: Python, Django, Redis i Proxmox

Stos technologiczny NameOcean: Python, Django, Redis i Proxmox

Lis 08, 2026 infrastructure python django redis rabbitmq proxmox web hosting devops

W skrócie: NameOcean to aplikacja napisana w Pythonie i Django. Dane przechowuje PostgreSQL, Redis pełni rolę cache, zadania w tle obsługują dwa systemy kolejek (RQ na Redis do krótkich zadań i Dramatiq na RabbitMQ do cięższych potoków), hosting klientów działa w kontenerach LXC na Proxmox na naszych własnych serwerach, a wszystkim można zarządzać z przeglądarki, z narzędzia wiersza poleceń napisanego w Go lub przez asystenta AI za pomocą MCP. W tym artykule omawiamy kolejne warstwy i wyjaśniamy, dlaczego je wybraliśmy.

Stos w pigułce

  • Język i framework: Python z Django, serwowany przez Gunicorn za Nginx.
  • Baza danych: PostgreSQL z kopiami zapasowymi umożliwiającymi odtworzenie do dowolnego punktu w czasie (PITR), przechowywanymi na osobnym serwerze.
  • Cache: Redis, wykorzystywany przez django-redis i django-cacheops.
  • Kolejki: RQ (django-rq) na Redis oraz Dramatiq na RabbitMQ.
  • Hosting: hosty Proxmox VE, na których każdy serwer klienta działa jako kontener LXC.
  • DNS: własne serwery PowerDNS, od ns1 do ns4.
  • Magazyn obiektów: samodzielnie utrzymywany, zgodny z S3 magazyn na pliki, kopie zapasowe i obrazy z bloga.
  • Narzędzia klienckie: CLI nameocean (Go) i nasz zdalny serwer MCP dla klientów AI – oba zbudowane na tym samym publicznym API.
  • Wdrożenia: git push i jedno polecenie Fabric. Nikt nie edytuje kodu bezpośrednio na serwerze.

Chcą Państwo sprawdzić, na czym zbudowana jest dowolna inna strona? Nasz bezpłatny Website Technology Checker pokazuje dostawcę hostingu, CMS, język programowania i framework dowolnej domeny. Wypróbuj go na nameocean.net.

Masz pomysł? Znajdź do niego idealną domenę

Nasz generator nazw domen z AI podpowiada dostępne nazwy w setkach rozszerzeń. Bezpłatny SSL, DNS i ochrona danych Whois w cenie.

Dlaczego Python i Django

Z zewnątrz rejestrator domen wygląda prosto: wyszukujesz nazwę, płacisz, zarządzasz DNS. Pod spodem kryje się jednak mnóstwo logiki biznesowej: API rejestratorów, transfery z własnymi maszynami stanów, odnowienia, faktury w kilku walutach, wystawianie certyfikatów SSL, strefy DNS, skrzynki pocztowe i serwery hostingowe – a wszystko to w 21 językach. Potrzebowaliśmy stosu, który utrzyma tę logikę czytelną i pozwoli małemu zespołowi bezpiecznie wdrażać zmiany. Django daje nam właśnie to.

„Batteries included” naprawdę

Django od pierwszego dnia dostarcza elementy, których potrzebuje każdy rejestrator:

  • ORM i migracje. Nasze modele (domeny, strefy, transfery, rachunki, serwery) zmieniają się co tydzień. Dzięki migracjom Django każda zmiana schematu to przejrzany plik w git, który działa tak samo lokalnie, w testach i na produkcji.
  • Panel administracyjny. Praca wsparcia i operacji odbywa się w panelu admina Django. Nie musieliśmy budować wewnętrznego zaplecza. Dostosowujemy go tam, gdzie to ważne, np. przy bezpiecznym usuwaniu i operacjach rozliczeniowych.
  • Uwierzytelnianie i bezpieczeństwo. Sesje, ochrona CSRF, hashowanie haseł i własny model użytkownika oparty na adresie e-mail są wbudowane. Dodaliśmy do tego uwierzytelnianie dwuskładnikowe.
  • Internacjonalizacja. Serwis jest przetłumaczony na 21 języków przy użyciu narzędzi gettext z Django i adresów URL z prefiksem języka. Wersja angielska nie ma prefiksu, pozostałe otrzymują /tr/, /de/ itd.
  • Mapy witryny, cache, szablony. Wszystko standardowe i dobrze udokumentowane.

Jeden język od strony WWW po serwery

Python to nie tylko aplikacja webowa. W tym samym języku działają workery kolejek, polecenia zarządzające uruchamiane przez cron, skrypty komunikujące się z Proxmox, narzędzia DNS (dnspython) i nasze skrypty wdrożeniowe (Fabric). Inżynier, który potrafi przeczytać widok koszyka, przeczyta też kod tworzący kontener hostingowy czy odnawiający certyfikat. Dla małego zespołu to ważniejsze niż surowa wydajność.

Wyjątkiem są narzędzia działające na Państwa komputerze. Wymaganie od każdego użytkownika instalacji Pythona i zestawu pakietów byłoby kiepskim pierwszym wrażeniem, dlatego CLI napisaliśmy w Go (więcej o nim poniżej). Nie zawiera ono własnej logiki biznesowej: wszystko przechodzi przez to samo API Django.

Dojrzały ekosystem

Niemal wszystko, z czym się integrujemy, ma solidną bibliotekę w Pythonie: Stripe do płatności, Django REST framework dla naszego publicznego API, klienty S3 w stylu boto, API Proxmox, raportowanie błędów zgodne z Sentry. Nasz zdalny serwer MCP, który pozwala asystentom AI zarządzać domenami i DNS w imieniu klienta, również jest częścią aplikacji Django.

Z czego rezygnujemy i jak sobie z tym radzimy

Python nie jest najszybszym językiem, a synchroniczne żądanie w Django nie powinno czekać na powolne API rejestratora. Radzimy sobie z tym na trzy sposoby: ciężka lub powolna praca trafia do kolejki, często odczytywane dane pochodzą z Redis, a baza danych jest dostrojona i zindeksowana pod nasze wzorce zapytań. W praktyce wąskim gardłem prawie zawsze jest zewnętrzne API, a nie Python.

PostgreSQL: jedno źródło prawdy

Każda domena, strefa, faktura i serwer są przechowywane w PostgreSQL. Wybraliśmy go ze względu na ścisłe transakcje (pieniądze i własność domen nigdy nie mogą zostać zapisane w połowie), bogate typy danych, takie jak pola JSON i adresy sieciowe, oraz niezawodne kopie zapasowe. Kopie wykonywane są w sposób ciągły: dziennik zapisu z wyprzedzeniem (WAL) jest przesyłany na osobny serwer kopii zapasowych, dzięki czemu możemy odtworzyć bazę do dowolnego momentu, a nie tylko do wczorajszego zrzutu. Serwer WWW w trybie gorącej rezerwy korzysta z tej samej bazy i może przejąć ruch, jeśli główny serwer WWW ulegnie awarii.

Redis: przede wszystkim cache

Redis to nasz cache. Sprawdzanie dostępności i cen domen, wyrenderowane fragmenty stron i limity zapytań – wszystko to trzymamy w Redis, więc powtórne żądanie nigdy nie trafia do API rejestratora ani do bazy danych. Każdy klucz cache zawiera język, ponieważ ta sama strona wygląda inaczej pod / i pod /tr/. Korzystamy też z django-cacheops, które buforuje querysety ORM i automatycznie je unieważnia po zmianie wiersza.

Wybór Redis był prosty: jest szybki, łatwy w utrzymaniu i ma doskonałe wsparcie w Django. A skoro już i tak działa, obsługuje też naszą lekką kolejkę zadań.

Kolejki: RQ na Redis i Dramatiq na RabbitMQ

Wiele operacji uruchamianych przez klienta nie powinno blokować strony, którą akurat ogląda. Rejestracja domeny w rejestrze, wystawienie certyfikatu SSL, utworzenie adresu e-mail czy uruchomienie kontenera hostingowego trwają sekundy lub minuty. Takie zadania trafiają do kolejki, skąd pobierają je workery. Używamy dwóch systemów kolejek, każdego do tego, w czym sprawdza się najlepiej.

RQ (django-rq) na Redis

RQ to najprostsza kolejka w świecie Pythona: zadanie to funkcja w Pythonie wraz z argumentami, przechowywana w Redis. Używamy jej do codziennych zadań serwisu:

  • zakładania konta klienta u rejestratora po rejestracji w serwisie,
  • wystawiania i odnawiania certyfikatów SSL,
  • synchronizacji statusu domen i stref DNS,
  • dodawania adresów e-mail i reguł przekierowań,
  • uruchamiania i zatrzymywania kontenerów hostingowych, otwierania portów i konfigurowania Nginx dla serwera klienta,
  • tworzenia rachunków i wysyłania przypomnień o odnowieniu.

Proces harmonogramu uruchamia zadania cykliczne, a panel django-rq pokazuje zadania oczekujące, wykonywane i zakończone błędem bezpośrednio w panelu admina. W środowisku deweloperskim kolejka działa synchronicznie, więc zadanie wykonuje się od razu, a jego błędy są natychmiast widoczne.

Dramatiq na RabbitMQ

Do cięższych i dłuższych potoków używamy Dramatiq z RabbitMQ jako brokerem. RabbitMQ to wyspecjalizowany broker wiadomości: wiadomość jest potwierdzana dopiero po zakończeniu pracy przez worker, więc zadanie nie przepada, jeśli worker ulegnie awarii w trakcie. Dramatiq dokłada do tego automatyczne ponawianie z wykładniczym odstępem, limity czasu, priorytety i middleware. To idealne rozwiązanie dla zadań wieloetapowych, dużych wolumenów lub zewnętrznych usług, które od czasu do czasu zawodzą.

Po co dwie kolejki?

RQ pozwala zachować prostotę prostych zadań: żadnej dodatkowej usługi, łatwe debugowanie, a Redis i tak już działa. RabbitMQ i Dramatiq zapewniają silniejsze gwarancje dostarczenia i większą przepustowość tam, gdzie zadanie naprawdę tego wymaga. Dobierając narzędzie do rodzaju pracy, nie ponosimy kosztów utrzymania pełnego brokera wiadomości dla pięciosekundowego zadania i nie powierzamy krytycznego potoku najprostszemu narzędziu.

Hosting: Proxmox i kontenery LXC

Nasze plany hostingu i vibe hostingu działają na własnych serwerach Proxmox VE. Każdy serwer klienta to kontener LXC, a nie pełna maszyna wirtualna.

  • Kontenery współdzielą jądro hosta, dzięki czemu uruchamiają się w kilka sekund i zużywają znacznie mniej pamięci niż maszyny wirtualne. Większa część sprzętu pracuje na rzecz aplikacji klienta, a nie drugiego systemu operacyjnego.
  • Każdy kontener jest odizolowany – ma własny system plików, procesy, sieć oraz limity zasobów CPU, pamięci i dysku.
  • Wszystko jest zautomatyzowane przez API Proxmox. Gdy zamawiają Państwo serwer, Django wysyła zadanie do kolejki, a worker tworzy kontener z szablonu, ustawia jego limity, podłącza sieć, otwiera porty oraz konfiguruje reverse proxy i SSL dla Państwa domeny.
  • Zmiana rozmiaru, kopie zapasowe i przywracanie to przyciski w panelu, które wywołują to samo API. Kontenery można też przenosić między hostami Proxmox, gdy równoważymy obciążenie.

Własny sprzęt oznacza przewidywalne ceny i pełną kontrolę nad siecią, kopiami zapasowymi i lokalizacją danych.

DNS, poczta e-mail i magazyn danych

  • DNS: strefy obsługują nasze własne serwery PowerDNS (ns1–ns4). Zmiany wprowadzone w panelu DNS trafiają na serwer główny i są automatycznie przekazywane do serwerów zapasowych. Serwer główny jest co noc archiwizowany.
  • E-mail: hosting poczty i bezpłatne przekierowanie e-maili działają na naszych własnych serwerach pocztowych z SPF, DKIM i DMARC skonfigurowanymi dla Państwa domeny.
  • Magazyn obiektów: samodzielnie utrzymywany, zgodny z S3 magazyn przechowuje przesłane pliki, kopie zapasowe i obrazy.

CLI nameocean i serwer MCP

Panel WWW to nie jedyna droga. Wszystko, co robi, przechodzi przez nasze publiczne REST API i zdalny serwer MCP pod adresem https://nameocean.net/mcp, a CLI nameocean jest zbudowane właśnie na nich.

CLI nameocean

nameocean to pojedynczy, statycznie skompilowany plik binarny napisany w Go, dostępny dla macOS, Linuksa i Windows na architekturach amd64 i arm64. Go wybraliśmy tu z odwrotnego powodu niż Pythona na serwer: CLI musi instalować się w kilka sekund i działać wszędzie bez środowiska uruchomieniowego, a Go kompiluje się do jednego pliku, który robi dokładnie to.

  • Logowanie tylko raz. nameocean login otwiera przeglądarkę i loguje Państwa przez OAuth 2.1 z PKCE. Tokeny są przechowywane w pęku kluczy systemu operacyjnego (macOS Keychain, Windows Credential Manager lub libsecret w Linuksie) i odświeżane automatycznie. Na serwerach i w CI można zamiast tego użyć klucza API z panelu.
  • Serwery i porty. nameocean servers ls, servers info z danymi SSH i git oraz ports open / ports close do udostępniania portu w kontenerze.
  • Domeny na serwerach. nameocean bind example.com <server> konfiguruje DNS, SSL i load balancer jednym poleceniem.
  • DNS i SSL. dns ls, dns add i dns rm dla rekordów A, CNAME, MX, TXT i innych, a także ssl status i ssl issue --wait.
  • Domeny. domains ls i domains check do sprawdzania dostępności i ceny. CLI nigdy nie wydaje pieniędzy: rejestracje i odnowienia pozostają w panelu.
  • Stworzone dla skryptów i agentów AI. Każde polecenie przyjmuje --json i wypisuje JSON z API bez zmian, więc można go przekazać prosto do jq, skryptów powłoki lub agenta.
  • Jedno polecenie dla klientów AI. nameocean mcp install wyszukuje na komputerze Claude Code, Cursor i OpenCode i dodaje do każdego z nich serwer MCP NameOcean.
nameocean login
nameocean dns add example.com A @ 203.0.113.10 --ttl 5m
nameocean bind example.com 3f9a1c2e
nameocean servers ls --json | jq '.servers[].default_domain'

Można je zainstalować przez Homebrew (brew install nameocean/tap/nameocean) lub pobrać archiwum dla swojej platformy.

Zdalny serwer MCP

W vibe hostingu Państwa asystent AI komunikuje się z NameOcean bezpośrednio. Claude Code podłącza się jednym poleceniem: claude mcp add --transport http nameocean https://nameocean.net/mcp. Logują się Państwo raz w przeglądarce, a potem można poprosić asystenta o wdrożenie, otwarcie portu lub skierowanie domeny na serwer bez dotykania żadnego pliku konfiguracyjnego. Cursor, Claude Desktop, claude.ai i inni klienci MCP łączą się z tym samym adresem URL; szczegóły znajdą Państwo w dokumentacji MCP. Na Państwa komputerze nic nie jest uruchamiane, więc nie ma czego instalować ani aktualizować.

Wcześniej udostępnialiśmy do tego aplikację desktopową. Uruchamiała lokalny serwer MCP i logowała się hasłem, co wyklucza logowanie dwuetapowe, a serwer zdalny wykonuje to samo zadanie bez instalacji, dlatego wycofaliśmy ją w listopadzie 2026 roku.

Dlaczego oba?

Różni ludzie pracują w różny sposób. CLI jest dla programistów, którzy żyją w terminalu i chcą powtarzalnych poleceń do skryptów. Serwer MCP jest dla tych, którzy wolą opisać, czego chcą, i zostawić resztę asystentowi AI. Ponieważ oba to cienkie warstwy nad tym samym API, funkcja dodana w aplikacji Django trafia jednocześnie do panelu WWW, CLI i każdego klienta MCP.

Monitoring i wdrożenia

Każdy błąd produkcyjny jest zgłaszany do samodzielnie utrzymywanego, zgodnego z Sentry systemu śledzenia błędów. Kontrole dostępności monitorują każdy serwer WWW, a metryki trafiają do bazy szeregów czasowych. Wdrożenia są celowo nudne: wypychamy zmiany do git, uruchamiamy jedno polecenie Fabric, a ono aktualizuje wszystkie serwery WWW, instaluje zależności, uruchamia migracje, zbiera pliki statyczne, kompiluje tłumaczenia i restartuje aplikację. Jeśli na serwerze jest nieaktualny kod, rozwiązaniem jest kolejne wdrożenie, nigdy ręczna edycja.

Podsumowanie

  • Python i Django – dla czytelnej logiki biznesowej, panelu admina, i18n i jednego języka wszędzie.
  • PostgreSQL jako jedno źródło prawdy, z odtwarzaniem do dowolnego punktu w czasie.
  • Redis jako cache oraz backend kolejki zadań RQ.
  • RQ do prostych zadań w tle, Dramatiq na RabbitMQ do ciężkich potoków, w których nic nie może zginąć.
  • Kontenery LXC na Proxmox – dla szybkiego, odizolowanego i przystępnego cenowo hostingu.
  • CLI nameocean (Go) i zdalny serwer MCP jako cienkie warstwy nad tym samym API.

Ciekawi Państwa, co napędza inną stronę? Sprawdźcie ją w naszym Website Technology Checker. Gotowi zbudować własną? Znajdźcie domenę i umieśćcie ją na hostingu NameOcean.

Masz pomysł? Znajdź do niego idealną domenę

Nasz generator nazw domen z AI podpowiada dostępne nazwy w setkach rozszerzeń. Bezpłatny SSL, DNS i ochrona danych Whois w cenie.

Przeczytaj w innych językach:

BG CS DA DE EL EN ES FI FR HU IT NB NL PT RO RU SV TR UZ ZH-HANS