No description
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Gurbakhshish Singh 4389cfc904 Hardcode host port 35285, drop INKER_PORT env
INKER_PORT made Inker append :35285 to device image URLs whenever the
device polled via a port-less Host header (reverse proxy on 443), so the
device got https://inker.gsingh.io:35285/... -> connection refused.

Host port now lives only in the compose port mapping. INKER_PORT stays
unset: Host headers with a port are used verbatim (LAN ip:35285) and
port-less Hosts get no port appended (Caddy https). Docs updated, incl.
actual CORS_ORIGINS values.
2026-08-18 14:15:09 -04:00
AGENTS.md Hardcode host port 35285, drop INKER_PORT env 2026-08-18 14:15:09 -04:00
docker-compose.yml Hardcode host port 35285, drop INKER_PORT env 2026-08-18 14:15:09 -04:00
README.md Hardcode host port 35285, drop INKER_PORT env 2026-08-18 14:15:09 -04:00

Inker Server — Arcane Deployment

Docker Compose stack for deploying Inker (self-hosted e-ink device management server for TRMNL and BYOD e-ink displays) on TrueNAS via Arcane.

This repo contains deployment config only — no application code. It deploys the prebuilt multi-arch image wojooo/inker:latest (x86-64 and arm64).

Deploying in Arcane

  1. Add this repo under Customization → Git Repositories (PAT auth for HTTPS is easiest)

  2. Projects → Create Project → From Git Repo, branch main, Compose File Path docker-compose.yml, enable Auto Sync

  3. In the project's Environment Configuration (.env) editor, set:

    ADMIN_PIN="your-pin"        # quotes required; image default is 1111
    TZ=America/New_York
    CORS_ORIGINS=http://192.168.2.119:35285,https://inker.gsingh.io
    

    Host port 35285 is hardcoded in docker-compose.yml — do NOT set an INKER_PORT env var. Inker uses it to append the port to device image URLs whenever the Host header has none (i.e. reverse-proxy requests on 80/443), which produces unreachable URLs like https://inker.gsingh.io:35285/.... Host port lives only in the compose port mapping; with INKER_PORT unset, a Host header with a port is used verbatim (LAN access works) and a port-less Host stays port-less (proxy access works).

  4. Deploy, then open http://<truenas-ip>:35285

No .env is committed to this repo — all values are managed in the Arcane UI and never touch git.

Reverse proxy (Caddy)

Plain Caddyfile, one block on the TrueNAS host:

inker.gsingh.io {
	reverse_proxy localhost:35285
}

Automatic HTTPS via Let's Encrypt; no websockets or special headers needed.

Data & backups

All Inker data (embedded SQLite DB at uploads/inker.db plus screens, widgets, firmware) lives in the named volume inker_uploads. Back up that volume to back up everything. Never run "Destroy" with volume deletion in Arcane or docker compose down -v — it deletes all data.

Updating

Use Arcane's Redeploy (pulls the latest image). Inker applies database migrations automatically on startup. Compose file changes go through this repo — commit, push, and Arcane syncs.