Container

The released image is multi-arch (amd64, arm64), distroless, and runs as a non-root user. Storage defaults to SQLite, so one compose service and one named volume are the complete install on any box with Docker. If the box is a TrueNAS SCALE machine, use the TrueNAS guide instead — same image, pasted into the Apps screen.

Registry access

The registry is the private Forgejo host. Sign in once with a token that has package:read:

docker login forgejo.lihnet.mallon.ie   # username + token

The compose file

Save as docker-compose.yml. The server applies its schema on boot, so there is no migration step. The one-shot init service exists because the image runs as uid 65532 and a fresh named volume starts root-owned. It hands the volume to the server once and exits:

services:
  init:
    image: busybox
    command: chown 65532:65532 /data
    volumes:
      - eagraiclainne-data:/data

  eagraiclainne:
    image: forgejo.lihnet.mallon.ie/eagraiclainne/app:v1.0.0
    restart: unless-stopped
    ports:
      - "8080:8080"
    environment:
      EAG_DB_PATH: /data/eagraiclainne.db
    volumes:
      - eagraiclainne-data:/data
    depends_on:
      init:
        condition: service_completed_successfully
    healthcheck:
      test: ["CMD", "/server", "healthcheck"]
      interval: 30s
      timeout: 5s
      retries: 3
      start_period: 10s

volumes:
  eagraiclainne-data:

The image is distroless — no shell, no curl — so the health check is a subcommand of the server binary itself: /server healthcheck dials the listening port and exits 0 or 1.

All the family's data lives in the eagraiclainne-data volume as a single SQLite file. Back that up and you have backed up the family (or use the export archive).

If you prefer PostgreSQL, drop the volume and the EAG_DB_PATH line. Set EAG_DB_DRIVER: postgres plus the EAG_DB_* connection settings from the environment reference, and add a postgres:17 service beside it.

Run and verify

docker compose up -d
docker compose ps                 # eagraiclainne up, init exited (0)
docker compose logs eagraiclainne     # schema apply, then serving
curl -sS http://localhost:8080/ | head -c 200

Then open http://your-server:8080first sign-in takes it from there.

Upgrades

Releases are tagged. To upgrade, edit the image tag, pull, and re-create the service:

sed -i 's/eagraiclainne:v1.0.0/eagraiclainne:v1.0.1/' docker-compose.yml
docker compose pull eagraiclainne
docker compose up -d eagraiclainne

Schema changes apply themselves on the new binary's first boot.