docker-compose.hermes.yml. The host joins on its own if you opt in during install. This separation means Fox actions are logged as a distinct device, and you can revoke Fox from Tailscale without losing SSH access to the server.
Two identities, on purpose
Fox identity
The Fox container runs a Tailscale sidecar insidedocker-compose.hermes.yml. This sidecar creates a device in your tailnet named for the Fox instance. When you choose Tailscale-only access at install, Fox serves the WebUI over HTTPS on ports 443 and 80 using its MagicDNS name. You do not need a public domain or TLS certificate from an external provider.
Host identity
The host Tailscale install is a standard Tailscale daemon on the VPS. It is used for SSH and human day-2 operations. It is separate from the Fox sidecar and can be enabled or disabled independently.Why separate them
- Auditability: Fox actions appear as a distinct device in your tailnet logs.
- Revocation: You can remove the Fox device from Tailscale without disconnecting your own SSH session.
- Least privilege: Fox has no access to host-level Tailscale features like SSH key management.
Access modes at install
During install you choose how Fox and the storefront are exposed. The four modes are covered in detail on the production deploy page:- Tailscale (default): Fox serves HTTPS on its MagicDNS name. No public domain needed.
- Own domain: You provide domains for the shop, API, and preview.
- No domain: Uses sslip.io for local or test setups.
- Both: Tailscale and public domain coexist.
Getting a Fox auth key
- Open the Tailscale admin console and go to Settings → Keys.
- Generate a reusable, tagged auth key. Tag it for the Fox device so ACLs can target it separately from your human nodes.
- Copy the key and paste it into the Vulpy install wizard when prompted.
- Do not reuse the host auth key. Fox needs its own key so it appears as a separate device.
If you are installing non-interactively, set the auth key via the documented env var path in your install flow. The install wizard stores it for the Hermes stack.
Verify
After the Hermes stack is running, confirm the Fox sidecar is connected:Terminal
What Fox can and can’t do inside the tailnet
Fox has no Docker socket. It cannot create, delete, or modify Docker Compose environments. It runs environment actions (pull-data, logs, push-staging) only when you approve them in the WebUI. See Environment context for how Fox interacts with dev, staging, and live environments. Because Fox is isolated, it cannot escalate from the tailnet into host infrastructure. Its reach is limited to the services you expose and the actions you authorize.Reference
For more on auth keys, ACL tags, and MagicDNS, see the Tailscale documentation.Production deploy
Choose an access mode and configure domains for live environments.
IMDS lock
Learn how Vulpy blocks EC2 IMDS inside the Fox container and when to opt out.