Prerequisites
Before you begin, ensure you have:Tailscale account
Create a free account at tailscale.com if you don’t have one already.
Generate an auth key
Navigate to Tailscale Admin Console and generate an auth key:
- Mark it as Reusable if you plan to deploy multiple services
- Set an appropriate expiration time (or never expire)
- Save the key securely - you’ll need it in the next step
Docker installed
Verify Docker and Docker Compose are installed:If not installed, follow the official Docker installation guide.
Deploy Jellyfin with Tailscale
Configure environment variables
Create a
.env file with your configuration:.env
Replace
TS_AUTHKEY with your actual Tailscale auth key. The TS_CERT_DOMAIN will be your Tailscale hostname once the service is running.Create required directories
Create directories for Jellyfin media and configuration:
Add your media files to
media/movies and media/tvseries directories. You can do this before or after starting the service.Start the services
Launch both Tailscale and Jellyfin containers:Check that both containers are running:You should see both
tailscale-jellyfin and app-jellyfin with status “Up” and “healthy”.Access Your Service
Find your Tailscale hostname
Your service is accessible at
https://jellyfin.tail-scale.ts.net:443 (replace with your actual Tailnet name).You can also check the Tailscale Admin Console to see your new device and its hostname.Complete Jellyfin setup
Open your browser and navigate to your Jellyfin Tailscale URL. You’ll see the Jellyfin setup wizard:
- Select your preferred language
- Create an admin account
- Add your media libraries (pointing to
/data/moviesand/data/tvshows) - Configure any additional settings
Understanding the Configuration
Here’s what the Jellyfin Docker Compose file does:- Tailscale container: Manages the secure network connection
- Application container: Runs Jellyfin using Tailscale’s network via
network_mode: service:tailscale - Health checks: Ensures Tailscale is ready before starting Jellyfin
- Serve configuration: Exposes Jellyfin on port 8096 through Tailscale HTTPS
Next Steps
Explore Core Concepts
Learn about Tailscale sidecars, Serve vs Funnel, and how the network stack works
Browse More Services
Discover 95+ pre-configured services you can deploy with Tailscale
Configuration Guide
Modify environment variables, health checks, and serve configurations
Deployment Guide
Run multiple services on the same host with Docker Compose
Troubleshooting
Container shows as unhealthy
Container shows as unhealthy
Check the health check logs:Common issues:
- Invalid
TS_AUTHKEY- generate a new key - TUN device not available - ensure
/dev/net/tunexists - Network connectivity issues - check your internet connection
Cannot access service from other devices
Cannot access service from other devices
Verify:
- Other devices are connected to the same Tailnet
- The Tailscale container shows as “healthy”
- You’re using the correct Tailscale hostname
- Tailscale Serve is configured correctly (check
compose.yamlconfigs section)
Jellyfin doesn't see media files
Jellyfin doesn't see media files
Check volume mappings:Ensure:
- Media files exist in
./media/moviesand./media/tvserieson your host - File permissions allow the container to read them (PUID=1000, PGID=1000)