Remote access
Homestead never opens ports to the internet by itself. To use it away from home, on your phone or from an agent on another machine, put one of these in front of it. The project recommends them in this order.
Pick a way in
Section titled “Pick a way in”The simplest choice, and it works for the phone app too. Your devices join a private network, and nothing is exposed to the public internet.
-
Install Tailscale on the Homestead machine and on each phone or computer that should reach it, following Tailscale’s own documentation.
-
Reach Homestead at the machine’s Tailscale address (the API and phone app use port 8080), or at a Tailscale HTTPS name if you’ve set one up. The agent examples in the app’s docs use a name like
https://homestead.example.ts.net. -
Set
HOMESTEAD_BASE_URLto that address so links and QR codes carry it.
A tunnel connects out from your machine to Cloudflare and serves Homestead at a name you own, with no open ports.
-
Create a tunnel by following Cloudflare’s documentation, pointing it at
http://localhost:8080on the Homestead machine. -
Set
HOMESTEAD_BASE_URLto the tunnel’s publichttps://address.
A reverse proxy with TLS on your own domain. The repository has a ready example in
deploy/Caddyfile.example:
home.example.com { encode zstd gzip
request_body { max_size 50MB }
reverse_proxy homestead:8080
header { Strict-Transport-Security "max-age=31536000" }}-
Replace
home.example.comwith your own name and point its DNS records at the machine. -
Set
HOMESTEAD_BASE_URL=https://home.example.comon the Homestead container. -
With Compose, start the bundled Caddy service:
Terminal window docker compose -f deploy/compose.yaml --profile caddy up -d --build
Keep the 50 MB body limit: it matches Homestead’s own upload limit. Caddy obtains and renews certificates on its own. The Docker Compose guide has the details.
Set the base URL
Section titled “Set the base URL”HOMESTEAD_BASE_URL is the public address of your Homestead, without a trailing slash, for
example https://home.example.com. Set it whenever Homestead sits behind a proxy or tunnel.
It is used for:
- share links and their QR codes,
- invite links, and the server address inside phone pairing QR codes,
- the MCP URL in agent setup snippets,
- signed media URLs.
It also changes how the server treats browsers. With an https:// base URL, sign-in cookies
are marked Secure, and writes from the web app must come from that exact origin. That’s what
you want behind TLS, but it means the base URL must match the address people actually type.
Without it, Homestead uses the address from each request.
With docker run, pass it with -e:
docker run -d --name homestead -p 8080:8080 -v homestead-data:/data -e HOMESTEAD_BASE_URL=https://home.example.com homesteadTrusted proxies
Section titled “Trusted proxies”HOMESTEAD_TRUSTED_PROXIES takes a comma-separated list of CIDRs, such as 172.18.0.0/16,
that are allowed to set X-Forwarded-* headers. It’s empty by default. Each entry must be a
valid CIDR or the server refuses to start.
Use TLS when you expose it
Section titled “Use TLS when you expose it”If Homestead is reachable from the internet, use HTTPS. Session cookies are only Secure over
HTTPS, and while media URLs are signed, everything else rides on the connection. Nothing in
Homestead phones home, so the only traffic is yours.
Check that it worked
Section titled “Check that it worked”From a machine outside your home network (or a phone with Wi-Fi off), ask the health endpoint at your public address:
curl https://home.example.com/api/v1/healthThen sign in in a browser and add a note to someone. If saving fails, recheck the base URL.