In this NDC Porto 2022 talk, Hanselman recounts moving hanselman.com, his podcast site and his DasBlog blog off a dying physical server and onto Azure platform as a service without anyone noticing. He ends up with all of it on .NET 6, running on Linux or Windows from a single cheap App Service plan, with nearly everything held in memory. His closing argument is that the cloud's tooling, not individual brilliance, is what lets one person run like a team.
The server under the desk. As an MVP he was given what he believed was a free virtual machine. When disk-full errors began, the host, since sold to a Quebec company, found it was a physical mini-tower once kept under an employee's desk. It ran Windows Server 2003 on a 30 GB spinning drive, could not do TLS 1.3, and was 19 years old against a five-to-seven-year mean time before failure. He backed everything up first, but he no longer trusted that he could rebuild the sites.
Choosing the target. He dismisses lift-and-shift, imaging the disk with disk2vhd and running it in the cloud, as keeping a dying machine alive in the matrix. IaaS is "free like a puppy", since you still maintain the kernel. PaaS lets him care only about the runtime version.
Porting, easiest first. He moved the brochure site, then the podcast site, then the blog, from .NET 2 and 4 to .NET 6, building on both Windows and Ubuntu under WSL. The only bugs were hard-coded backslash paths. Running on Linux opened hosting about 30% cheaper and allowed Docker, where a multi-stage build compiles in a roughly 300 MB SDK image and ships a roughly 100 MB runtime image. He recommends running a personal site as the way to learn production, since only the owner carries the pager.
Making it better, not just moved. Cloud machines are slower but rich in RAM, so DasBlog's 4,964 XML files (about 384 MB for 20 years of posts) load into memory at startup. Images sit on a CDN on a separate subdomain for parallel DNS lookups, and podcast art is named by show number instead of being stored in a database. Sponsors are a text file he edits on Thursdays. Four sites share one $35 plan at about 12% CPU and 65% memory, which he says is fine to run hot in the cloud.
Tools as the 10x. Application Insights produces a dashboard showing about 5 ms average response time. Each footer links the runtime version, live commit and build log. An Azure Front Door reverse proxy split traffic 50/50 between the Quebec box and the cloud before an IP swap. He notes that load balancing, once a consultant's job, is now a checkbox.
Questions. About 70% of DasBlog was .NET Standard and recompiled unchanged, while its Web Forms templates were rewritten as Razor Pages. He says WinForms apps moved to .NET 6 run 30–50% faster and can ship as a single self-contained executable, which tree trimming shrinks to about 118 MB.