Sign inSign up

prplanit/static-site

By prplanit

•Updated 19 days ago

Base image for serving a static site from a container.

Image
0

669

prplanit/static-site repository overview

⁠static-site

Hardened, non-root nginx (with brotli) base image for prplanit static sites. Consumer repos are two-liners — FROM this image and COPY your static assets — and inherit non-root, readOnlyRootFilesystem-friendly, pinned, and security-scanned defaults.

GitHub GitLab license Open Issues Open PRs Contributors donate sponsor

release build Last Commit StageFreight

GHCR Docker pulls Harbor

latest updated size latest-dev updated size

⁠Image contents

Base:

alpine 3.23.5

Packages:

ca-certificates gettext nginx nginx-mod-http-brotli tzdata

⁠Usage

Your site repo is just static assets + a two-line Dockerfile:

FROM docker.io/prplanit/static-site:vX.Y.Z
COPY www-data/ /usr/share/nginx/html/

⁠Features

Non-rootruns as uid 10001 on port 8080 — no privileged port, no root
Brotli + gzipbrotli (with brotli_static) preferred, gzip fallback
Read-only friendlypid / temp / rendered config all live in /tmp → set readOnlyRootFilesystem: true
Pinned + scannedAlpine + nginx + brotli pinned to exact versions; Trivy/Grype + SBOM in CI
Configurable portLISTEN_PORT env (default 8080), applied via envsubst at startup
Security headersX-Content-Type-Options, Referrer-Policy, Permissions-Policy on every response
Health endpointGET /healthz → 200 (for k8s probes)

⁠Configuration

envdefaultpurpose
LISTEN_PORT8080listen port
LOG_LEVELwarnnginx error_log level
WORKER_PROCESSESautonginx worker_processes

⁠Kubernetes securityContext

Pairs with the image's non-root design:

securityContext:
  runAsNonRoot: true
  runAsUser: 10001
  runAsGroup: 10001
  seccompProfile:
    type: RuntimeDefault
containers:
  - securityContext:
      allowPrivilegeEscalation: false
      readOnlyRootFilesystem: true
      capabilities:
        drop: ["ALL"]
    ports:
      - containerPort: 8080

⁠License

Repository files (Dockerfile, nginx config, entrypoint): MIT. The built image bundles nginx (BSD-2-Clause), musl (MIT), busybox (GPL-2.0), brotli (MIT), and others under their own licenses. See LICENSE⁠.

Tag summary

Content type

Image

Digest

sha256:b1acd873f…

Size

8.4 MB

Last updated

about 2 months ago

docker pull prplanit/static-site