website/content/use-happyDomain/devops.en.md
Pierre-Olivier Mercier 24eb85edc1
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
Improve persona page with browser-like screenshots and background color
2026-06-11 22:53:12 +09:00

4.8 KiB

+++ title = "happyDomain for DevOps Engineers" description = "Automate DNS management with happyDomain's REST API. Integrate domain operations into your CI/CD pipelines and infrastructure workflows." layout = "usage" +++

{{< usage-lead >}} A REST API and web interface to automate domain management in the cloud, with suppliers and on premise. {{< /usage-lead >}}

{{< usage-points title="Does this sound familiar?" >}} {{< usage-point icon="mouse" title="ClickOps doesn't scale" >}} Everything in your stack is code, except DNS. Records are still changed by hand in a provider's console: unscriptable, unreviewable, unrepeatable. {{< /usage-point >}} {{< usage-point icon="plug" title="One API per provider" >}} Each host has its own API, its own auth, its own quirks. Your automation is a pile of fragile glue scripts that breaks every time a client changes provider. {{< /usage-point >}} {{< usage-point icon="git" title="DNS bypasses your pipeline" >}} Deployments are reviewed, tested and rolled back. DNS changes go straight to production with none of that. {{< /usage-point >}} {{< /usage-points >}}

{{< usage-feature title="One REST API for all your domains' operations." image="/img/screenshots/features/rest.png" url="app.happydomain.org/swagger/index.html" alt="Our REST API, commented and exposed with Swagger"

}} Everything that's done in the happyDomain web interface can be done with the API, in your language of choice. Script it once, run it everywhere.

Our REST API is fully documented, and thanks to Swagger, you can browse it and generate a client in any supported language.

See the API documentation and try it out now! {{< /usage-feature >}}

{{< usage-feature title="Forget the quirks of each provider. One abstraction for over 25 hosts." image="/img/screenshots/domain-abstract.webp" url="app.happydomain.org/domains/example.com" alt="A zone displayed the same way, whatever the provider behind it" flip="true" bg="green"

}} Write your automation against happyDomain once; it speaks to every provider for you:

  • cloud services : Route53, Azure DNS, Google Cloud DNS, DigitalOcean, Linode, Oracle Cloud, ...
  • CDN : Akamai Edge DNS, Cloudflare, ...
  • registrar : OVH, Gandi, Namecheap, Vultr, ...
  • your local setup : BIND, PowerDNS, knot, ...

See the list of supported DNS hosts. {{< /usage-feature >}}

{{< usage-feature title="Bring DNS into your review workflow." image="/img/screenshots/zone-diff.webp" url="app.happydomain.org/domains/example.com/diff" alt="Review and confirm the changes that will be applied"

}} Before anything is published, happyDomain shows the exact diff between the current zone and the new one, and waits for confirmation.

You can even cherry-pick which changes ship now and which ones wait. It works like a pull request, for your DNS. {{< /usage-feature >}}

{{< usage-feature title="Tooling that plugs into what you already use." image="/img/screenshots/sdk-python.webp" url="pypi.org/project/happydomain" alt="Python SDK usage" flip="true" bg="plum"

}}

  • Ansible collection: add or modify zone records, manage new domains through their registrar, manage happyDomain's users, or deploy happyDomain itself with the official collection.
  • Python SDK: automate all aspects of your domains, with the simplicity of Python.
  • and counting…
{{< /usage-feature >}}

{{< usage-feature title="Monitoring included, no extra stack to deploy." image="/img/screenshots/checks-dashboard.webp" url="app.happydomain.org/domains/example.com/checks" alt="Monitoring dashboard showing the status of every check on a domain"

}} happyDomain's checkers continuously verify expirations, DNSSEC, delegation, certificates and service availability for every domain you manage.

Each check reports a clear status and notifies you the moment it changes state, so a broken delegation never waits for a failed deployment to be noticed. {{< /usage-feature >}}