Tailscale only
Tailscale is the recommended way to run Cobblr with real HTTPS and nothing exposed
to the internet. It puts your devices on a private mesh, hands each one an
auto-renewed ts.net certificate, and the same URL works at home or away. That
certificate is what the phone camera needs, and the private network doubles as
secure remote access.
The full walkthrough lives in Install. This page is the map of the two ways to ride it, so you can pick before you open that guide.
Own hostname (tsnet)
The bundled proxy joins your tailnet as its own node and serves the address you
choose, so cobblr.your-tailnet.ts.net shows up as the node cobblr. The box
needs no Tailscale install; only the devices you browse from do. This is the easier
path and gives the tidier URL.
In .env it looks like:
COBBLR_SITE_ADDRESS=cobblr.your-tailnet.ts.net
COMPOSE_PROFILES=caddy
COBBLR_TLS_MODE=tsnet
On first start the proxy prints a one-time sign-in link in its logs
(docker compose logs caddy | grep -iE 'to authenticate|login.tailscale'); open
it, approve the new node, and you're done. There is no key to mint. If you would
rather the box join unattended, add a reusable auth key as
TS_AUTHKEY=tskey-auth-... and it skips the approval step.
The setup builder produces this when you pick Tailscale, then Own hostname. It needs MagicDNS and HTTPS certificates enabled on your tailnet, both one-time steps covered in Install.
The server's own name (tailscale serve)
If the box is already on your tailnet, skip the bundled proxy and let the machine
serve Cobblr under its own name. The stack runs without Caddy, the web container
stays on loopback, and tailscale serve on the host publishes it with a real
certificate:
COBBLR_SITE_ADDRESS=myserver.your-tailnet.ts.net
COMPOSE_PROFILES=
Then, after the stack is up, run sudo tailscale serve --bg 8088 on the box. This
is the Server's name option in the builder. The steps, including reaching it
from outside the tailnet with tailscale funnel, are in
Install.
Which to pick
Choose own hostname unless the box is already a tailnet node you want to serve from directly. It keeps Tailscale off the host and gives you a clean per-service URL. The serve variant fits when the machine is already on the tailnet and you would rather not run a second proxy.