Skip to main content

Docker

Image: $DOCKERHUB_USERNAME/email-link-host (username comes from the DOCKERHUB_USERNAME GitHub Actions secret on release)
Architectures: linux/amd64, linux/arm64
Base: scratch + single static Go binary

Unlike CDN hosts, Docker reads config at runtime — no bun run build inside the container.

Customize for your app

FileChange?What to put
.envYesStore URLs, Android package + SHA-256, iOS Team/Bundle ID, optional theme/copy overrides
config/site.jsonOptionalMount into the container and set SITE_CONFIG_PATH (otherwise embedded defaults + env)
compose.ymlOptionalPort mapping, image tag/VERSION, uncomment volume + SITE_CONFIG_PATH

.env example (runtime)

ANDROID_PACKAGE_NAME="com.yourcompany.yourapp"
ANDROID_SHA256_CERT_FINGERPRINTS="AA:BB:CC:..."

IOS_TEAM_ID="ABCDE12345"
IOS_BUNDLE_ID="com.yourcompany.yourapp"

# Unprefixed or NEXT_PUBLIC_ both work for Go/Docker
ANDROID_STORE_URL="https://play.google.com/store/apps/details?id=com.yourcompany.yourapp"
IOS_STORE_URL="https://apps.apple.com/app/id1234567890"
SITE_BRAND="My App"

/__/auth/links* is included in AASA by default. Set IOS_INCLUDE_AUTH_LINKS=false only if you must disable it.

compose.yml — mount your site JSON

services:
web:
image: ${DOCKERHUB_USERNAME}/email-link-host:latest
ports: ["8080:8080"]
env_file: [.env]
volumes:
- ./config/site.json:/config/site.json:ro
environment:
SITE_CONFIG_PATH: /config/site.json
ADDR: ":8080"

Run (published image)

export DOCKERHUB_USERNAME=your-dockerhub-user

docker pull $DOCKERHUB_USERNAME/email-link-host:latest

docker run --rm -p 8080:8080 --env-file .env \
$DOCKERHUB_USERNAME/email-link-host:latest

Run (build from repo)

# edit .env + optional config/site.json
docker compose up --build
# → http://localhost:8080

Or:

bun run docker:build
bun run docker:run # passes --env-file .env

Env naming

Same dual naming as Go (SITE_BRAND or NEXT_PUBLIC_SITE_BRAND, …). See Configuration.

Release tags

Pushing a git tag v* builds multi-arch images and a GitHub Release with binaries. See Releases.