Installation
Tailscale
Keep the panel off the internet. Run kogut on your tailnet with HTTPS from Tailscale.
The Compose setup runs kogut in Tailscale’s network namespace, and Tailscale proxies HTTPS to kogut on loopback.
Deploy
-
In the Tailscale admin console, enable MagicDNS and HTTPS certificates. Create an auth key under Settings → Keys.
-
Download the Compose and Serve files:
curl -fsSLO https://raw.githubusercontent.com/piotrkowski/kogut/main/deploy/docker/tailscale.compose.yml curl -fsSLO https://raw.githubusercontent.com/piotrkowski/kogut/main/deploy/docker/tailscale-serve.json -
Put the key in
.envand keep that file out of git:.env TS_AUTHKEY=tskey-auth-... -
Add your tailnet URL to the
kogutservice’senvironmentlist:- KOGUT_URL=https://kogut.<tailnet>.ts.net -
Start the services:
docker compose -f tailscale.compose.yml up -d -
From a device on the tailnet, open
https://kogut.<tailnet>.ts.netand create your account with the setup token from the log:docker compose -f tailscale.compose.yml logs kogut | grep setup_token
Tailscale ACLs control access to the device, and kogut’s roles access inside the panel.
Sign in as your Tailscale user
Create the first account with your Tailscale login as the email address. Then add to
kogut.toml:
[auth.proxy]
trusted_proxies = ["127.0.0.1", "::1"]
preset = "tailscale"To mount the file, see Docker configuration. New users become viewers. Add other admins in Settings → People with their Tailscale login and an empty password before their first visit. See Forward auth for the trust rules.
Connect agents
Use the command from Hosts → Add a server with the tailnet HTTPS URL:
curl -fsSL https://kogut.dev/install | sh -s -- agent --server https://kogut.<tailnet>.ts.net --token <token>Each agent needs access to the tailnet.
Publish selected endpoints
To accept traffic from outside the tailnet, publish only the paths in Paths outside the gate through a public reverse proxy or Tailscale Funnel. With a status domain, publish that whole domain, not the panel domain.
For Funnel, configure handlers for only the public paths in tailscale-serve.json and
allow Funnel on port 443 in the tailnet policy. Funnel exposes the whole listener, so
remove the panel’s / handler first. See
Tailscale Funnel.
Keep a notification channel that reaches you outside the tailnet, such as ntfy or Telegram.