ADR-001: Container Hosting Platform¶
Context and Problem Statement¶
The portfolio website consists of a React frontend and a FastAPI backend, both packaged as Docker containers. A hosting platform was needed that could run both containers in production on Azure, with HTTPS ingress, environment variable configuration, and automatic scaling — without requiring significant operational overhead for a personal project.
Considered Options¶
-
Azure Kubernetes Service (AKS) — a fully managed Kubernetes cluster offering maximum control over networking, scaling policies, and workload placement. Requires cluster provisioning, node pool management, and ongoing maintenance.
-
Azure App Service (Web App for Containers) — a PaaS offering for containerized apps with built-in HTTPS, scaling, and deployment slots. Well suited for single containers but multi-container setups require Docker Compose, which has limitations in App Service.
-
Azure Container Apps — a serverless container platform built on Kubernetes and KEDA. Handles ingress, scaling to zero, managed certificates, and container-to-container networking without exposing cluster management.
-
Azure Virtual Machines — full control over the host OS. Maximum flexibility but requires managing OS updates, Docker runtime, TLS certificates, and load balancing manually.
Decision Outcome¶
Chosen option: "Azure Container Apps". The portfolio is a small, two-container application — frontend and backend — that does not require the operational surface of a full Kubernetes cluster. Container Apps provides built-in HTTP ingress with managed TLS, revision-based deployments, and scale-to-zero which minimises cost during periods of low traffic. The KEDA-based scaling is sufficient for the expected load, and the Bicep provider for Container Apps is mature.
Consequences¶
- Good, because there is no cluster to manage — no node pool updates, no control plane costs, no
kubectlrequired for day-to-day operations. - Good, because scale-to-zero reduces cost to near zero when the site is not receiving traffic.
- Bad, because Container Apps abstracts away the underlying Kubernetes — advanced networking scenarios (e.g. strict egress control, custom sidecars) are harder to implement than on AKS.
- Bad, because the platform is Azure-specific; migrating to another cloud would require rewriting the hosting layer.
Page history
| Field | Value |
|---|---|
| Last updated | — |