| Filename | Latest commit message | Latest commit date |
|---|---|---|
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. |
||
| AGENTS.md | ||
| docker-compose.yml | ||
| README.md | ||
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
-
Add this repo under Customization → Git Repositories (PAT auth for HTTPS is easiest)
-
Projects → Create Project → From Git Repo, branch
main, Compose File Pathdocker-compose.yml, enable Auto Sync -
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.ioHost port
35285is hardcoded indocker-compose.yml— do NOT set anINKER_PORTenv 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 likehttps://inker.gsingh.io:35285/.... Host port lives only in the compose port mapping; withINKER_PORTunset, a Host header with a port is used verbatim (LAN access works) and a port-less Host stays port-less (proxy access works). -
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.