2026-09-06 17:05:42 +12:00
2026-09-06 17:05:42 +12:00
2026-09-06 09:40:35 +12:00
2026-09-06 17:05:42 +12:00
2026-09-06 09:40:35 +12:00
2026-09-06 09:40:35 +12:00
2026-09-06 09:40:35 +12:00
2026-09-06 09:40:35 +12:00
2026-09-06 09:40:35 +12:00

docker-release

Builds every Fennec Hub project into a Docker image and pushes it to Docker Hub.

Key Image Source
backend <namespace>/fennec-hub-backend fennec-hub-multi-tenant-shared-db (+ fennec-hub-platfrom)
admin <namespace>/fennec-hub-admin-ui fennec-hub-angular-ui
commerce <namespace>/fennec-hub-commerce fennec-hub-commerce

fennec-hub-platfrom produces no image of its own — it is a Maven library that the backend Dockerfile installs from the repo-root build context before packaging the Spring Boot jar.

Setup (once)

cd docker-release
cp .env.example .env
$EDITOR .env        # set DOCKERHUB_NAMESPACE, DOCKERHUB_USERNAME, DOCKERHUB_TOKEN

Create the token at Docker Hub → Account Settings → Personal access tokens with Read & Write scope. .env is gitignored; leaving DOCKERHUB_TOKEN empty makes docker login prompt instead.

Use

./build-and-push.sh list              # what would be built, and under which tag
./build-and-push.sh all               # login, build all three, push to Docker Hub
./build-and-push.sh build             # build locally, push nothing
./build-and-push.sh all -s admin      # one image only (-s is repeatable)
./build-and-push.sh all -t 2026.09.05 # pin the tag instead of auto-generating
./build-and-push.sh all --dry-run     # print the docker commands, run nothing

Every run also tags :latest unless you pass --no-latest.

Tags

With no -t / TAG=, the tag is <backend-git-sha>-<UTC timestamp>, e.g. a1b2c3d-20260905T2015Z, falling back to just the timestamp when the backend directory is not a git checkout. That keeps every push traceable and immutable while :latest moves.

Architectures

PLATFORMS defaults to linux/amd64 (the Fennec servers). For a multi-arch image, pass -p linux/amd64,linux/arm64 — the script then creates a docker-container buildx builder automatically. Multi-platform results cannot be loaded into the local image store, so they must be pushed: use push/all, not build. The Angular builds are slow under arm64 emulation.

Deploying what you pushed

docker-compose.yml in this folder is the deployment counterpart of the repo-root one: same services and ports, but pulling the published images instead of building from source. It needs no source tree, so this file plus a .env can be copied to a server on its own.

cd docker-release
docker compose pull
docker compose up -d

Compose loads the same .env the build script uses, so DOCKERHUB_NAMESPACE and TAG carry over — set TAG to the tag you pushed (empty means :latest), or override per-run:

TAG=a1b2c3d-20260905T2015Z docker compose up -d

SPRING_DATASOURCE_PASSWORD is required and has no default — compose refuses to start without it. Set it in .env (gitignored) or in the environment. The datasource URL, username, CORS origins and Spring profile all have working defaults and are overridable the same way.

docker-compose.hub.yml is the identical file under its original name, kept for anyone already referencing it with -f. Edit both if you change one.

Adding a project

Append a line to images.conf:

key | image-name | build-context | path/to/Dockerfile | description

Paths are relative to the repo root. Nothing in the script needs to change.

Description
No description provided
Readme 44 KiB
Languages
Shell 100%