Hosting
Where immutable files are served.
01 · The absurdity
A qualifying static site should inherit an approved publishing system rather than implement its own delivery pipeline.
The deliverable is a directory of HTML, CSS, JavaScript, images, and approved downloads. The process often arrives dressed as a transactional application: container images, bespoke pipelines, manual credentials, security tickets, infrastructure handoffs, and evidence rebuilt from scratch.
Security checks are legitimate. Rebuilding the same mechanics, controls, credentials, and proof in every repository is not. A bad process written in YAML remains a bad process, merely with better indentation.
02 · The actual problem
Where immutable files are served.
What invokes the reusable contract.
Which checks apply to this risk tier.
Who authorizes an environment transition.
What proves the artifact and checks.
Who supports, reviews, and retires it.
The governing principle: encode the applicable controls once, publish them as a versioned product, and let repositories declare intent through a thin adapter.
03 · Choose your view
Each view changes the nearby summary, proof signals, objections, and actions. Your explicit choice persists on this device.
Engineering view selected
Commit the source, declare the output directory, keep secrets and server behavior out, run the same checks locally, and receive an immutable preview plus receipt.
outputPath and runtime.Objection answered: “Every site is unique” does not mean every site needs unique delivery mechanics.
Platform and DevOps view selected
The central team owns qualification, build, evidence, immutable versioning, credentials, promotion, observability, and template upgrades. Jenkins, Azure DevOps, GitHub Actions, and GitLab CI remain interchangeable callers.
Objection answered: standardizing Jenkins is not the same as standardizing the operating model.
Security and compliance view selected
Mandatory inherited controls, central versions, deterministic failure, traceable exceptions, artifact integrity, and automatic evidence strengthen review. Static content can still be confidential, regulated, proprietary, malicious, or simply wrong.
Objection answered: “Security requires the current pipeline” is a claim to test against controls, not a reason to preserve duplication.
Cloud and network view selected
Start with a purpose-built static host. Treat subscription placement, resource groups, Entra authentication, private endpoints, DNS, certificates, diagnostics, ingress, egress, and environment separation as explicit policy inputs.
Objection answered: private endpoints narrow ingress; they do not decide who an authenticated user may be.
Operations and service ownership view selected
Every site needs an accountable owner, support route, deployed version, history, health check, incident path, rollback target, review date, decommission process, and stale-site signal.
Objection answered: a static site is operationally simpler, not operationally ownerless.
Leadership view selected
The outcome is shorter lead time with equal or stronger control: fewer manual actions, handoffs, credentials, bespoke pipeline lines, and specialist dependencies—without making the central team a ticket queue.
Objection answered: a central platform becomes a bottleneck only when it is operated as a bespoke approval desk instead of a self-service product.
04 · Classify the workload
This guide identifies a likely lane. It is not an authoritative corporate approval engine and cannot replace local architecture, security, privacy, legal, or records review.
Current deterministic result
Purpose-built static hosting; evaluate authentication and network posture separately.
Any server runtime, state mutation, user-submitted data, or runtime secret moves the workload to S2.
Confirm content classification, audience, identity, network, records, and release requirements.
05 · Current versus target
Current state selected
Control intent may be legitimate, but implementations, credentials, evidence, approvals, and failures fragment across repositories.
Failure signature: the organization standardizes tools while preserving implementation variance.
Success signature: the second repository inherits the same controls with less bespoke code and no weaker evidence.
06 · The pipeline contract
Illustrative site-manifest.yaml
schemaVersion: 1
site:
name: example-architecture-guide
owner: platform-engineering
classification: internal
runtime:
type: static
outputPath: dist
authentication:
mode: enterprise-identity
network:
exposure: private
Illustrative thin Jenkins adapter
governedStaticSite {
outputPath = "dist"
classification = "internal"
runtime = "none"
authentication = "entra"
targetEnvironment = "development"
}
Reference patterns only. Map fields, identity, controls, credentials, and approvals to local policy and tooling. These are not drop-in corporate configurations.
07 · Security without repetition
| Control area | S0 · static content | S1 · static application | S2 · dynamic application |
|---|---|---|---|
| Qualification | Static files; no client application logic | Client-side logic or approved API consumption | Server, state, secrets, writes, input, or sensitive processing |
| Baseline | Secrets, file types, malware, HTML, links, classification, headers, accessibility, ownership, checksum, receipt | All S0 controls | Exit the Static Publishing Lane |
| Software supply chain | Generated-file provenance where applicable | Locked dependencies, SCA, SBOM, license policy, client static analysis | Organization application-delivery policy |
| Browser security | Header policy and no unexpected origins | CSP validation, endpoint allowlist, browser security tests | Application threat model and runtime testing |
| Content risk | Classification, accuracy, privacy, legal, records, export, harm, and audience review remain independent of runtime tier. | ||
| Exceptions | Named owner, justification, scope, compensating control, approval, and expiry | Handled by the receiving application lane | |
A repository cannot silently omit a required control.
Control changes are pinned, tested, receipted, and deliberately adopted.
Unknown runtime, missing owner, invalid classification, and unmatched bytes stop the lane.
Exceptions are records with expiry, not comments that outlive their context.
08 · Why not Docker?
Containers are justified when the workload needs a server process, runtime-specific behavior, controlled native dependencies, a consistent application execution environment, or an accepted platform boundary. They are weak justification when the only job is serving immutable files.
| Question | Static host | Container runtime |
|---|---|---|
| Server process required? | No | Yes, or a documented platform constraint requires it |
| Operational additions | Artifact, host, headers, access, receipt | Registry, image scanning, base-image patching, runtime health, orchestration, capacity |
| Rollback unit | Immutable file artifact | Image plus runtime configuration |
| Good reason | Simple static delivery | Real server/runtime requirement or approved uniform platform contract |
| Bad reason | “Everything goes in Docker” without measuring the additional control and operational surface. | |
Balanced decision: do not prohibit containers. Require the requirement that earns them.
09 · Azure worked example
Capabilities, plan availability, regions, tenant configuration, network design, and enterprise policy can change. Verify the linked Microsoft documentation and local standards during implementation.
Use when purpose-built static hosting, route/header configuration, supported authentication, and the required network posture fit. Microsoft documents preconfigured GitHub and Microsoft Entra ID authentication, route authorization in staticwebapp.config.json, and Standard-plan private endpoints.
Use when Static Web Apps cannot satisfy a requirement but a container still adds no value. App Service documents built-in authentication, private endpoints, access restrictions, diagnostic logs, and deployment slots on supported tiers.
Use only for deliberately public, anonymous, low-complexity content when limitations are acceptable. Microsoft states that the static website feature does not provide AuthN/AuthZ and cannot configure headers without another service such as CDN.
Use Container Apps, App Service runtime, Kubernetes, or another application platform when server execution, state, secrets, transactions, background work, or sensitive processing makes the workload S2.
Static Web Apps supports custom source providers through a build job and deployment job using a deployment token. Store the token in the approved secret system, scope access, rotate on exposure or lifecycle policy, and update the calling pipeline after reset.
Authentication identifies a user; route rules authorize access. A private endpoint restricts network reachability and does not replace user authorization. DNS is part of the private-endpoint design.
Azure DevOps required-template checks can fail a pipeline that does not extend the required template. Approvals and checks live on protected resources rather than in pipeline YAML and can stop a stage before execution.
Preserve one artifact checksum across environments. Keep environment routing, identity, and policy outside the artifact where possible; if bytes change, call it a new artifact rather than “the same build.”
Documentation reviewed for this candidate on 2026-07-30. The bibliography download records page titles, URLs, and bounded claims used.
10 · Other platforms
Managed static-site products, object storage plus an edge layer, or a governed internal static-hosting service.
Jenkins, Azure DevOps, GitHub Actions, GitLab CI, Buildkite, or another approved orchestrator.
Central templates, reusable actions, policy engines, signed attestations, and immutable artifact registries.
Identity, private reachability, headers, custom domains, observability, immutable promotion, cost, support, and exit portability.
11 · Metrics and proof
Baseline the current path before the pilot. Compare the same workload and report the result without manufacturing a victory.
| Measure | Current baseline | 90-day target evidence |
|---|---|---|
| Commit to Development | Elapsed and queue time | Same start/stop definition; lower median and tail |
| Human work | Manual actions and handoffs | Fewer, with approvals preserved where required |
| Repository burden | Pipeline lines and credential count | Thin adapter and centrally held environment credentials |
| Reliability | Failed deployment rate and diagnosis time | Named failure domains and faster reproduction |
| Evidence | Assembly time and missing artifacts | Automatic human and machine receipts |
| Recovery | Rollback steps and elapsed time | Redeploy exact known-good checksum |
| Scale | Second-repository onboarding effort | Materially lower than the first without weaker controls |
| Governance | Exceptions and inherited controls | Exceptions visible; inherited percentage rising |
12 · Serious objections
List the required controls and prove which mechanism enforces each one. Preserve the controls; replace repository-specific mechanics only when the new lane provides equal or stronger evidence.
They make a runtime portable. A static artifact is already portable across conforming HTTP hosts. Add a container only when its runtime contract earns the cost.
Static narrows runtime risk. It says nothing about confidentiality, accuracy, malicious content, regulated material, intellectual property, or inappropriate public release.
A new orchestrator can host the same fragmented model. The solution is the reusable contract, qualification, controls, artifact identity, and evidence—not the logo on the YAML runner.
Move host, identity, DNS, headers, and environment policy into the deployment plane where possible. When environment-specific bytes are unavoidable, produce a new checksum and stop calling it the same artifact.
It will if it requires bespoke tickets. Operate it as a self-service product with versioned contracts, clear service levels, observable failures, bounded exceptions, and contribution paths.
13 · Adoption roadmap
Exit: agreed baseline and approved Development experiment.
Exit: exact artifact reaches Development without portal deployment.
Exit: evidence-backed go, revise, or stop decision.
14 · Download the implementation kit
Sanitized reference material. No credentials, employer-specific policy, production endpoint, or claim of enterprise validation is included.
Standalone edition: binary downloads are intentionally not embedded as data URIs. Obtain the separate implementation-kit or static-directory package from the canonical protected candidate.
site-manifest.yaml15 · Recommendation
Give teams a narrow contract, inherited controls, immutable artifacts, observable failures, usable receipts, and a real rollback path. Keep content authority, security judgment, and Production approval intact.
This Development candidate demonstrates the static mechanics. It does not prove adoption results, validate a real enterprise environment, authorize a cloud design, or justify public publication. Those decisions require local evidence and separate authority.