Hoist React apps can be deployed via Docker containers running Tomcat (for Hoist's Grails based back-end) and nginx (to serve compiled client JS/CSS and other assets).
This repo contains a minimal Dockerfile to build the base nginx container, which can be used by app-specific Docker
deployments with additional configurations. A -brotli variant is also published, built on fholzer/nginx-brotli to
enable Brotli compression alongside gzip.
Images are published to Docker Hub as xhio/xh-nginx, producing the variants
below.
| Variant | Base image | Docker tag(s) |
|---|---|---|
| next | nginx:1.30 |
next |
| next-brotli | fholzer/nginx-brotli:v1.30 |
next-brotli |
| release | nginx:1.30.0 |
latest, 3.0.0 |
| release-brotli | fholzer/nginx-brotli:v1.30.0 |
latest-brotli, 3.0.0-brotli |
next / next-brotli tags are fully mutable. Every variant is rebuilt on every commit to develop and on a weekly schedule
(Wednesday ~20:00 ET) so they pick up upstream patches to the floating major.minor base image tags. They are intended
for testing and snapshot-style deployments.
release / release-brotli builds publish two tags per variant: an immutable tag (the xh-nginx semver release
recorded in CHANGELOG.md), and a mutable latest (or latest-brotli) tag that floats to the most recent release of
that variant.
This repo uses a single develop branch (and a master branch tracking the most recent release). Both variants build
from develop via dedicated Dockerfiles (Dockerfile and Dockerfile-brotli)
and share the unified xh-nginx version and docker tag version.
GitHub Actions workflows live in .github/workflows/:
buildNext.yml— runs on every push todevelop, on a weekly schedule, and on manual dispatch. Builds and pushes bothnextvariants in parallel via a matrix.buildRelease.yml— manual dispatch frommasteronly. Takes a semver release version as input. The locked nginx patch version is pinned in the workflow's build matrix (with theDockerfileandDockerfile-brotliNGINX_VERSIONARG defaults kept in sync for local builds). Builds and pushes thereleasevariants, then creates the corresponding git tag and GitHub release. To release with a newer nginx patch, bump the matrix entries (and the Dockerfile defaults) and updateCHANGELOG.mdin a normal PR before dispatching the workflow.
📫☎️🌎 info@xh.io | https://xh.io/contact
Copyright © 2026 Extremely Heavy Industries Inc.