Skip to content

Set up Tilecast on a local network

Use this setup when Tilecast Server and every Player are at the same site. Players connect straight to the server over your local network. Nothing has to be reachable from the Internet, so you don’t need Cloudflare Tunnel, port forwarding, or a domain name.

This page covers the decisions that are specific to a local network. The commands that start the server are in the installation guide, so they stay in one place.

Players and browsers use one address to reach the server. Tilecast calls it the public URL, and you set it in TILECAST_PUBLIC_URL.

Pick an address that won’t change. If the address changes after you pair Players, they can’t find the server until you update them.

Address style Example Notes
Reserved private IP address http://192.0.2.10:8080 Works on any network. Reserve it in your router (a DHCP reservation) so it doesn’t change.
A .local name http://tilecast.local:8080 Easier to read, but whether a Player can resolve it depends on the device and your network. Test it on a real display. If it fails, use an IP address.

The addresses above are examples. Replace them with your server’s real address.

The Player accepts HTTP only for private IP addresses, localhost, and .local names. A name from your own DNS, such as signage.lan, needs HTTPS. HTTP isn’t encrypted, so use it only on a network you trust.

Follow Start Tilecast Server. In step 3, use the Trusted LAN over HTTP row:

deploy/docker/.env
TILECAST_PUBLIC_URL=http://192.0.2.10:8080
TILECAST_COOKIE_SECURE=false

TILECAST_COOKIE_SECURE=false lets Studio sign in over plain HTTP. Set it to true only when the public URL is HTTPS.

Passkeys need HTTPS and a hostname, so they aren’t available on an HTTP address or an IP address. Authenticator apps and recovery codes still work. See Sign-in security.

The server listens on port 8080 (TILECAST_PORT). Use the host’s firewall to allow it from your local network and block it from anywhere else. Don’t forward this port on your router.

Never expose PostgreSQL. Compose doesn’t publish its port, and you shouldn’t add one.

The Player needs the server’s address typed in, or found by discovery.

  • Manual entry always works. Enter the address as you set it in TILECAST_PUBLIC_URL, without a path. Include http://: the Android Player assumes HTTPS when you leave the scheme out.
  • Discovery is optional. The Compose file turns off mDNS (TILECAST_MDNS_ENABLED=false) because multicast doesn’t pass through Docker’s default networking on every system. Multicast can also be blocked by VLANs, guest Wi-Fi, and access-point isolation. See Check that Players can reach the server.

Then install the Player on each display and pair it.

From a computer on the same network as your Players, open the public URL in a browser. You should see the Tilecast sign-in or setup page.

Check readiness from the command line. Replace the address with your own.

Check server readiness
curl --fail http://192.0.2.10:8080/readyz

A failed check returns HTTP 503. Use /healthz to see whether the server process answers at all.

A browser on your network that opens the page proves the route from that computer, not from the display’s network. If Players are on different Wi-Fi or a different VLAN, use Check that Players can reach the server before you install on displays.

If staff later need Studio from outside the site, add a Cloudflare Tunnel hostname. The local Players with remote Studio guide explains how to do it while Players keep using the local address.