Deployment variants

August 19, 2026 · View on GitHub

Extra deployment material beyond the root docker-compose.yml: a standalone build-from-source compose file, and distribution templates for third-party platforms.

Two compose files deliberately stay at the repository root and out of this folder: docker-compose.yml (the default every release deployment uses — it pulls the published image) and docker-compose.override.yml (the local-quickstart port publish — Compose only auto-merges it under exactly that name in the project root).

Public HTTPS without a reverse proxy of your own is no longer a file here either: it is the https profile of the root compose file (docker compose -f docker-compose.yml --profile https up -d with DOMAIN set in .env — Caddy in front of the app, automatic Let's Encrypt certificates). See the main README's deploy section.

docker-compose.build.yml — build from source (standalone)

The root docker-compose.yml pulls the release image from GHCR — deploying never compiles anything. This file is for deployments that track a BRANCH instead of a release: a staging server building dev, a fork building its own changes. It is a standalone compose file, not an overlay, precisely so an orchestrator can be pointed at it directly — in Coolify, set the resource's Docker Compose Location to /deployment/docker-compose.build.yml.

docker compose --project-directory . -f deployment/docker-compose.build.yml up -d

--project-directory . (run from the repo root) is load-bearing, not ceremony: compose resolves the build context and the .env file against the PROJECT directory, which orchestrators set to the checkout root — this pins the manual command to the same behavior.

It mirrors the root file's services and env list; the root file's comments are the reference for what each knob means.

portainer-template.json — Portainer app template

A Portainer v3 app-template list with one entry, prompting for the four required values plus the version pin. Its stackfile is docker-compose.portainer.yml — the root file with the app port published on the host (APP_PORT, default 3001): Portainer activates no compose profiles and brings no reverse proxy, so an unpublished port would deploy an unreachable stack. TLS is the deployer's proxy's job. To use it, add this file's raw GitHub URL as a custom template list in Portainer (Settings → App Templates → URL), then deploy Hexis from the Templates view.

coolify-template.yml — Coolify service-template candidate

A service-template candidate in the format of Coolify's template repo (# documentation:/# slogan: headers, SERVICE_* magic variables that make Coolify generate secrets and the public URL). It exists as the basis for a future PR to that repo — not something to point a deployment at directly. Deploying on Coolify today works with the root compose file as a Docker Compose resource, per the main README's reverse-proxy section.