Skip to content

Installation

Targetlog is a single Go binary with the web app embedded, shipped as a container image. PostgreSQL is the only dependency.

Requirements

  • PostgreSQL 18 (any 15+ should work), one database per installation.
  • The container image registry.berg-systems.ch/targetlog/server (distroless, runs as a non-root user, read-only root filesystem works).
  • A reverse proxy or ingress for HTTPS that passes WebSocket upgrades (Traefik does by default).

Running the container

docker run -d --name targetlog -p 8080:8080 \
  -e DATABASE_URL='postgres://targetlog:secret@db:5432/targetlog?sslmode=require' \
  -e TARGETLOG_ADMIN_TOKEN="$(openssl rand -base64 32)" \
  -e TARGETLOG_TRUST_PROXY=true \
  registry.berg-systems.ch/targetlog/server:latest
  • Port 8080 serves the app, the API and the admin panel; port 9090 serves Prometheus metrics (see Operations).
  • The database schema is migrated at startup. Several replicas may start at the same time; an advisory lock makes them wait for each other.
  • All configuration comes from environment variables, see Configuration.

Image tags: the short commit SHA of every build, bleeding_edge for the latest master build and latest for the latest release. Pin a release tag in production.

Health checks

Path Meaning
/healthz the process is up (liveness)
/readyz the database answers within two seconds (readiness)

First steps

  1. Open /admin and log in with TARGETLOG_ADMIN_TOKEN.
  2. Create a club and a user, and make the user admin of the club (see Admin panel).
  3. The user logs in to the app and continues with Your first event.

For Kubernetes, use the Helm chart, see Kubernetes.