2026 devops webudvikling

domainwd.dk, EU-hostet domæneovervågning uden framework eller kø

Et overvågningsværktøj der dagligt slår WHOIS op på de overvågede domæner.

Problem

Et bureau med 50 klientdomæner har den samme opgave hver måned: holde øje
med hvornår domænerne udløber, om SSL-certifikaterne stadig er gyldige, og
om DNS-records (især SPF og DMARC) er blevet ændret bag om ryggen på dem.
Markedet har to slags værktøjer der svarer på det: amerikanske SaaS der
ikke ligger i EU, eller enterprise-platforme bygget til
trusselsefterforskning. For et dansk bureau der bare vil vide hvornår de
skal sende en faktura for fornyelse, er begge dele forkerte.

Løsning

Et overvågningsværktøj der dagligt slår WHOIS op på de overvågede
domæner, advarer 90, 30, 7 og 1 dag før udløb, tjekker SSL-certifikater
på samme skema og opdager ændringer i NS, A, MX og TXT-records, inklusive
SPF og DMARC. Hele produktet kører på én VPS i Frankfurt med cron som
scheduler og PostgreSQL-advisory-locks som overlap-beskyttelse. Ingen
queue-daemon, ingen Redis, intet framework. Mailguns EU-region håndterer
mail, så al kundedata og trafik bliver inden for EU.

Resultater

domainwd er live. Den fulde SaaS-feature-liste der typisk kræver et
udviklingshold er bygget og driftet af én person: signup og login med
selvbygget auth, organisationer med flere brugere, daglige WHOIS-sweeps,
SSL-tjek, DNS-snapshot-diff, idempotent alarm-dispatch, Stripe-billing
med webhooks og prisniveauer der kan ændres i databasen uden deploy,
GDPR self-service, audit-log på login og admin-handlinger, og
Mailgun-webhook-verifikation.

Hele cron-arkitekturen kører uden en eneste worker-proces. Fem sweeps
ligger som standard cron-entries, hver beskyttet af pg_try_advisory_lock så overlap ikke kan ske, selv hvis
en kørsel hænger.

Tech stack

PHP 8.3 PostgreSQL 16 Apache 2.4 + PHP-FPM hjemmestrikket MVC på omkring 700 linjer kode vanilla PDO med named parameters Tailwind v4 og Alpine.js Vite Mailgun EU API ramt direkte med Guzzle Stripe Billing DigitalOcean Droplet i Frankfurt.

Tilbage til cases