De techstack van NameOcean: Python, Django, Redis en Proxmox
Kort antwoord: NameOcean is een applicatie in Python en Django. PostgreSQL bewaart de data, Redis is de cache, achtergrondtaken draaien op twee queuesystemen (RQ op Redis voor korte taken, Dramatiq op RabbitMQ voor zwaardere pipelines), klanthosting draait in Proxmox LXC-containers op onze eigen servers, en u beheert alles via de browser, een commandoregeltool geschreven in Go of uw AI-assistent via MCP. In dit artikel lopen we elke laag door en leggen we uit waarom we ervoor hebben gekozen.
De stack in één oogopslag
- Taal en framework: Python met Django, geserveerd door Gunicorn achter Nginx.
- Database: PostgreSQL, met point-in-time-recoverybackups naar een aparte backupserver.
- Cache: Redis, gebruikt via django-redis en django-cacheops.
- Queues: RQ (django-rq) op Redis, plus Dramatiq op RabbitMQ.
- Hosting: Proxmox VE-hosts die elke klantserver als LXC-container draaien.
- DNS: onze eigen PowerDNS-servers, ns1 tot en met ns4.
- Objectopslag: een zelfgehoste, S3-compatibele opslag voor bestanden, backups en blogafbeeldingen.
- Clienttools: de
nameocean-CLI (Go) en onze remote MCP-server voor AI-clients, allebei gebouwd op dezelfde publieke API. - Deploys:
git pushplus één Fabric-commando. Niemand past code aan op een server.
Benieuwd hoe een andere website in elkaar zit? Onze gratis Website Technology Checker toont de hostingprovider, het CMS, de programmeertaal en het framework van elk domein. Probeer het eens met nameocean.net.
Heb je een idee? Vind er het perfecte domein bij
Onze AI-domeinnaamgenerator stelt beschikbare namen voor met honderden extensies. Gratis SSL, DNS en Whois-privacy inbegrepen.
Waarom Python en Django
Van buitenaf lijkt een domeinregistrar eenvoudig: een naam zoeken, betalen, DNS beheren. Onder de motorkap zit echter veel bedrijfslogica. Er zijn registrar-API's, transfers met hun eigen state machines, verlengingen, facturen in meerdere valuta, uitgifte van SSL-certificaten, DNS-zones, mailboxen en hostingservers, en dat alles in 21 talen. We wilden een stack die die logica leesbaar houdt en waarmee een klein team veilig kan opleveren. Django biedt precies dat.
Echt 'batteries included'
Django levert de onderdelen die elke registrar vanaf dag één nodig heeft:
- ORM en migraties. Onze modellen (domeinen, zones, transfers, facturen, servers) veranderen wekelijks. Dankzij Django-migraties is elke schemawijziging een gereviewd bestand in git dat lokaal, in tests en in productie op dezelfde manier draait.
- De admin. Support- en operationeel werk gebeurt in de Django-admin. We hoefden geen eigen backoffice te bouwen. Waar het ertoe doet, passen we die aan, bijvoorbeeld voor veilig verwijderen en factureringsacties.
- Authenticatie en beveiliging. Sessies, CSRF-bescherming, wachtwoordhashing en een eigen gebruikersmodel op basis van e-mail zijn ingebouwd. Daarbovenop hebben we tweefactorauthenticatie toegevoegd.
- Internationalisatie. De site is in 21 talen vertaald met de gettext-tooling van Django en URL's met een taalprefix. Engels heeft geen prefix nodig, de andere talen krijgen
/tr/,/de/enzovoort. - Sitemaps, caching, templates. Allemaal standaard en goed gedocumenteerd.
Eén taal van website tot servers
Python is niet alleen de webapp. Dezelfde taal draait de queueworkers, de management commands achter onze cronjobs, de scripts die met Proxmox communiceren, de DNS-tooling (dnspython) en onze deployscripts (Fabric). Een engineer die de checkout-view kan lezen, kan ook de code lezen die een hostingcontainer aanmaakt of een certificaat verlengt. Voor een klein team weegt dat zwaarder dan pure snelheid.
De uitzondering zijn de tools die op uw computer draaien. Elke gebruiker vragen Python en een reeks packages te installeren zou een slechte eerste ervaring zijn, dus de CLI is in Go geschreven (daarover verderop meer). Die tools bevatten zelf geen bedrijfslogica: alles loopt via dezelfde Django-API.
Een volwassen ecosysteem
Vrijwel alles waarmee we integreren heeft een degelijke Python-library: Stripe voor betalingen, Django REST framework voor onze publieke API, S3-clients in boto-stijl, de Proxmox-API en Sentry-compatibele foutrapportage. Ook onze remote MCP-server, waarmee AI-assistenten domeinen en DNS voor een klant kunnen beheren, maakt deel uit van de Django-app.
Wat we inleveren, en hoe we daarmee omgaan
Python is niet de snelste taal, en een synchroon Django-request hoort niet te wachten op een trage registrar-API. Dat vangen we op drie manieren op: zwaar of traag werk gaat naar een queue, veelgebruikte reads komen uit Redis, en de database is getuned en geïndexeerd voor onze querypatronen. In de praktijk is de bottleneck bijna altijd een externe API, niet Python.
PostgreSQL: de bron van waarheid
Elk domein, elke zone, factuur en server staat in PostgreSQL. We kozen ervoor vanwege strikte transacties (geld en domeineigendom mogen nooit half worden weggeschreven), rijke datatypes zoals JSON-velden en netwerkadressen, en een betrouwbare backupstrategie. Backups gebeuren continu: de write-ahead log wordt naar een aparte backupserver verzonden, zodat we de database naar elk willekeurig moment kunnen terugzetten en niet alleen naar de dump van afgelopen nacht. Een warme standby-webserver gebruikt dezelfde database en kan het overnemen als de primaire webserver uitvalt.
Redis: cache eerst
Redis is onze cache. Beschikbaarheids- en prijsopvragingen voor domeinen, gerenderde paginafragmenten en rate limits staan allemaal in Redis, zodat een herhaald verzoek nooit de registrar-API of de database raakt. Elke cachesleutel bevat de taal, omdat dezelfde pagina verschilt tussen / en /tr/. Daarnaast gebruiken we django-cacheops om ORM-querysets te cachen en automatisch ongeldig te maken zodra een rij verandert.
Redis was een makkelijke keuze: snel, eenvoudig te beheren en uitstekend ondersteund in Django. En omdat het er toch al is, draait ook onze lichtgewicht jobqueue erop.
Queues: RQ op Redis en Dramatiq op RabbitMQ
Veel acties die een klant start, horen de pagina waarop hij zit niet te blokkeren. Een domein registreren bij de registry, een SSL-certificaat uitgeven, een mailadres aanmaken of een hostingcontainer starten kost allemaal seconden tot minuten. Die taken gaan naar een queue, waar workers ze oppakken. We draaien twee queuesystemen, elk voor het werk waar het het best in is.
RQ (django-rq) op Redis
RQ is de eenvoudigste queue in de Python-wereld: een job is een Python-functie met argumenten, opgeslagen in Redis. We gebruiken het voor de dagelijkse taken van de website:
- het account van de klant bij de registrar aanmaken na registratie,
- SSL-certificaten uitgeven en verlengen,
- domeinstatus en DNS-zones synchroniseren,
- mailadressen en doorstuurregels toevoegen,
- hostingcontainers starten en stoppen, poorten openen en Nginx configureren voor een klantserver,
- facturen aanmaken en verlengingsherinneringen versturen.
Een schedulerproces voert periodieke taken uit, en het django-rq-dashboard toont wachtende, lopende en mislukte jobs direct in de admin. Tijdens ontwikkeling draait de queue synchroon, zodat een job inline wordt uitgevoerd en fouten meteen zichtbaar zijn.
Dramatiq op RabbitMQ
Voor zwaardere en langere pipelines gebruiken we Dramatiq met RabbitMQ als broker. RabbitMQ is een speciale message broker: berichten worden pas bevestigd nadat een worker ze heeft afgerond, zodat een job niet verloren gaat als een worker halverwege crasht. Dramatiq voegt daar automatische retries met exponentiële backoff, tijdslimieten, prioriteiten en middleware aan toe. Dat past bij workloads met veel stappen, een hoog volume of externe diensten die af en toe falen.
Waarom twee queues?
RQ houdt eenvoudige taken eenvoudig: geen extra dienst, makkelijk debuggen, en Redis draait toch al. RabbitMQ en Dramatiq bieden sterkere afleveringsgaranties en een hogere doorvoer wanneer een taak dat echt nodig heeft. Door per workload te kiezen, betalen we niet de operationele kosten van een volwaardige message broker voor een taak van vijf seconden, en vertrouwen we een kritieke pipeline niet toe aan het simpelste gereedschap.
Hosting: Proxmox en LXC-containers
Onze hosting- en vibe hosting-pakketten draaien op onze eigen Proxmox VE-servers. Elke klantserver is een LXC-container, geen volledige virtuele machine.
- Containers delen de kernel van de host, waardoor ze binnen enkele seconden starten en veel minder geheugen gebruiken dan VM's. Een groter deel van de hardware gaat naar de applicatie van de klant in plaats van naar een tweede besturingssysteem.
- Elke container is geïsoleerd, met een eigen bestandssysteem, eigen processen, eigen netwerk en eigen resourcelimieten voor CPU, geheugen en schijf.
- Alles is geautomatiseerd via de Proxmox-API. Wanneer u een server bestelt, stuurt Django een job naar de queue, en een worker maakt de container aan vanuit een template, stelt de limieten in, koppelt het netwerk, opent poorten en configureert de reverse proxy en SSL voor uw domein.
- Schalen, backups en restores zijn knoppen in het dashboard die dezelfde API aanroepen. Containers kunnen ook tussen Proxmox-hosts worden verplaatst wanneer we de belasting herverdelen.
Doordat we onze eigen hardware draaien, hebben we voorspelbare prijzen en volledige controle over het netwerk, de backups en de locatie van de data.
DNS, e-mail en opslag
- DNS: zones worden geserveerd door onze eigen PowerDNS-servers (ns1 tot en met ns4). Wijzigingen die u in het DNS-paneel maakt, worden naar de primaire server geschreven en automatisch doorgegeven aan de secundaire servers. Van de primaire server wordt elke nacht een backup gemaakt.
- E-mail: e-mailhosting en gratis e-maildoorsturing draaien op onze eigen mailservers, met SPF, DKIM en DMARC ingesteld voor uw domein.
- Objectopslag: een zelfgehoste, S3-compatibele opslag bewaart geüploade bestanden, backups en afbeeldingen.
De nameocean-CLI en de MCP-server
Het webdashboard is niet de enige toegangsweg. Alles wat het doet, loopt via onze publieke REST API en onze remote MCP-server op https://nameocean.net/mcp, en de nameocean-CLI is daarop gebouwd.
De nameocean-CLI
nameocean is één statische binary, geschreven in Go en gebouwd voor macOS, Linux en Windows op zowel amd64 als arm64. We kozen hier voor Go om precies de omgekeerde reden waarom we voor de server Python kozen: een CLI moet in seconden te installeren zijn en overal zonder runtime draaien, en Go compileert naar één bestand dat precies dat doet.
- Eén keer inloggen.
nameocean loginopent de browser en meldt u aan met OAuth 2.1 en PKCE. Tokens worden opgeslagen in de sleutelhanger van het besturingssysteem (macOS Keychain, Windows Credential Manager of libsecret op Linux) en automatisch vernieuwd. Op servers en in CI werkt in plaats daarvan een API-sleutel uit het dashboard. - Servers en poorten.
nameocean servers ls,servers infovoor SSH- en git-gegevens, enports open/ports closeom een poort op uw container open te zetten. - Domeinen op servers.
nameocean bind example.com <server>regelt DNS, SSL en de load balancer met één commando. - DNS en SSL.
dns ls,dns addendns rmvoor A-, CNAME-, MX-, TXT- en andere records, plusssl statusenssl issue --wait. - Domeinen.
domains lsendomains checkvoor beschikbaarheid en prijs. De CLI geeft nooit geld uit: registraties en verlengingen blijven in het dashboard. - Gemaakt voor scripts en AI-agents. Elk commando accepteert
--jsonen geeft de JSON van de API ongewijzigd terug, zodat u de uitvoer direct kunt doorsturen naarjq, shellscripts of een agent. - Eén commando voor AI-clients.
nameocean mcp installvindt Claude Code, Cursor en OpenCode op uw computer en voegt de NameOcean MCP-server aan elk ervan toe.
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'
Installeer de CLI met Homebrew (brew install nameocean/tap/nameocean) of download een archief voor uw platform.
De remote MCP-server
Bij vibe hosting communiceert uw AI-assistent rechtstreeks met NameOcean. Met één commando koppelt u Claude Code: claude mcp add --transport http nameocean https://nameocean.net/mcp. U logt één keer in via de browser, en vanaf dat moment kunt u de assistent vragen te deployen, een poort te openen of een domein naar uw server te laten verwijzen, zonder een configuratiebestand aan te raken. Cursor, Claude Desktop, claude.ai en andere MCP-clients maken verbinding met dezelfde URL; in de MCP-documentatie leest u hoe. Er draait niets op uw computer, dus er valt niets te installeren of bij te werken.
Vroeger leverden we hiervoor een desktopapp. Die startte een lokale MCP-server en logde in met een wachtwoord, wat met inloggen in twee stappen niet mogelijk is. De remote server doet hetzelfde werk zonder installatie, dus hebben we de app in november 2026 uitgefaseerd.
Waarom allebei?
Mensen werken op verschillende plekken. De CLI is voor developers die in de terminal leven en scriptbare, herhaalbare commando's willen. De MCP-server is voor mensen die liever beschrijven wat ze willen en de rest aan hun AI-assistent overlaten. Omdat beide dunne lagen boven dezelfde API zijn, komt een functie die aan de Django-app wordt toegevoegd tegelijk beschikbaar in het webdashboard, de CLI en elke MCP-client.
Monitoring en deploys
Elke fout in productie wordt gemeld aan een zelfgehoste, Sentry-compatibele error tracker. Uptimechecks bewaken elke webserver, en metrics gaan naar een time-seriesdatabase. Deploys zijn bewust saai: we pushen naar git, voeren één Fabric-commando uit, en dat werkt elke webserver bij, installeert de requirements, voert migraties uit, verzamelt statische bestanden, compileert vertalingen en herstart de app. Draait een server verouderde code, dan is de oplossing een nieuwe deploy, nooit een handmatige aanpassing.
Samenvatting
- Python en Django voor leesbare bedrijfslogica, de admin, i18n en één taal overal.
- PostgreSQL als enige bron van waarheid, met point-in-time recovery.
- Redis als cache én als backend van de RQ-jobqueue.
- RQ voor eenvoudige achtergrondtaken, Dramatiq op RabbitMQ voor zware pipelines die niets mogen verliezen.
- Proxmox LXC-containers voor snelle, geïsoleerde en betaalbare hosting.
- De nameocean-CLI (Go) en de remote MCP-server als dunne lagen boven dezelfde API.
Benieuwd wat een andere website aandrijft? Haal hem door onze Website Technology Checker. Klaar om zelf te bouwen? Zoek een domein en zet het op NameOcean-hosting.
Heb je een idee? Vind er het perfecte domein bij
Onze AI-domeinnaamgenerator stelt beschikbare namen voor met honderden extensies. Gratis SSL, DNS en Whois-privacy inbegrepen.