Skip to content

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 kubectl required 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