Hosting on Microsoft Azure

Behind every website is a question visitors should never see: is it up? Since recently we answer it for the entire CARECOM family on Microsoft Azure – reliably, securely, scalably. An open look behind the scenes and at the past few weeks' work.

DistributionHarald Mühlhoff 3 min read

Web hosting is the most inconspicuous of our disciplines – and the one that's noticed most when it's missing. Since recently, the entire CARECOM family runs on Microsoft Azure. We've been a Microsoft partner for decades; the move was less a leap than a home game. An open look at why we host this way – and what it means for reliability, security and scalability.

Reliability: updates you don't notice

A new version doesn't simply go „live" with us. It is first deployed to a separate pre-production area (a staging slot), warmed up and checked automatically – and only swapped into live operation once it reports itself healthy via a health check. If it doesn't, the old version stays put. Every release is „all or nothing": the package is mounted as an immutable whole and runs read-only. The result is exactly what good operations should be: ideally, you don't notice an update at all.

Security: passwordless, on a private network

Encryption (HTTPS) goes without saying – what's more interesting is what happens beneath it:

  • Passwordless. Our applications authenticate to the database, storage and key vault with an Azure-managed identity (managed identity). There are simply no database passwords left in configuration files – what doesn't exist can't be lost.
  • Database on a private network. For the database we use Azure's managed PostgreSQL service (Azure Database for PostgreSQL) – not reachable from the public internet at all; the apps talk to it solely over a private Azure network (VNet).
  • Keys in the vault. The keys for encrypted cookies and sign-in tokens live encrypted in an Azure Key Vault – separate from the application itself.
  • A German region. Sites and data sit in a German Azure data centre: short distances and data residency in Germany – a clear plus when it comes to the GDPR.

Scalability: growing along, without moving house

The whole family shares one common foundation – which is economical and low-maintenance. If one site gets cramped, we scale its capacity up in minutes, without a move; and when needed, several instances run in parallel.

A word on the technology behind it: our sites run as Blazor Server – each session holds some state on the server. That's comfortable, but it costs memory per connection. Multiple instances were never the problem; the real edge was that on an instance or version switch the session state briefly dropped – the familiar „reconnecting". With .NET 10, Distributed Circuit Persistence largely closes that gap: state you deliberately preserve now survives an instance or deployment switch, too. Only what you deliberately preserve becomes fully seamless – but the normal case grows noticeably calmer.

From the workshop: the past few weeks

This isn't theory; it's exactly what we built most recently. We migrated carecom.de from its previous host to Azure and put the whole family on the same basis: bestes-wetter.de, 3d-spielplatz.de, em-foto-design.de and the latest addition its-all-right.de. All moved onto a shared, privately connected PostgreSQL service (Azure Database for PostgreSQL), and sign-in to database and vault now runs passwordless via managed identities.

Much of this came about in close collaboration with Claude Code (Anthropic's AI) – from the infrastructure to this very post.

What this means for you

This very foundation is our hosting offering: the same reliability, the same security and the same data residency as for our own sites – without you having to deal with slots, identities and networks yourself. Sounds like something for your project? Get in touch.

Yours, Harald Mühlhoff

An unhandled error has occurred. Reload 🗙

Rejoining the server…

Rejoin failed… trying again in seconds.

Failed to rejoin.
Please retry or reload the page.

The session has been paused by the server.

Failed to resume the session.
Please retry or reload the page.