Host Jellyfin for Free on Oracle Cloud: ARM VM Setup Guide (2026)
What if you could run a Jellyfin server with 4 CPU cores, 24 GB of RAM, a static public IP, and 10 TB of monthly bandwidth - permanently, for free? That is exactly what Oracle Always Free Tier offers in 2026.
While Oracle Cloud is not the most obvious Jellyfin host, its free ARM instance is one of the most generous no-cost compute options available anywhere. This guide walks you through the complete setup.
What Oracle Always Free Tier Gives You
Oracle's Always Free Tier includes resources that are permanently free - not a trial, not time-limited:
| Resource | Free Allocation |
|---|---|
| CPU | Up to 4 Ampere A1 ARM cores |
| RAM | Up to 24 GB |
| Boot volume | Up to 200 GB |
| Outbound bandwidth | 10 TB per month |
| Static public IPv4 | 1 (free when attached to a running instance) |
| OS options | Ubuntu, Oracle Linux, Debian (aarch64) |
A VM with 4 ARM cores and 24 GB RAM can comfortably run Jellyfin for a small household - as long as you rely on Direct Play. There is no GPU on the free tier, which means hardware transcoding is not available.
Is Oracle Cloud Right for Your Jellyfin Setup?
Good use case:
- You want remote access to your Jellyfin library without exposing your home IP
- Your clients (Apple TV, Android TV, modern browsers) can Direct Play your media
- You store media on a NAS or cloud storage and mount it remotely
- You want a zero-cost always-on server with a stable public URL
Bad use case:
- Your users frequently trigger transcodes (mobile clients on weak connections, mixed codec libraries)
- You need hardware transcoding for 4K HDR tone-mapping
- You want to store a large media library directly on the VM (200 GB fills quickly)
Key constraint: Software transcoding on ARM CPUs is feasible for 1080p but struggles with 4K HEVC. One simultaneous 4K software transcode can saturate all 4 cores. Design your setup around Direct Play.
Step 1: Create Your Oracle Cloud Account
- Go to cloud.oracle.com and click Start for free
- A credit card is required for identity verification - you will not be charged if you stay within the Always Free limits
- Choose a Home Region geographically close to your users - this cannot be changed after account creation
- Complete identity and phone verification
Account tip: Use your real name, a billing address that matches your card, and a professional email address. Oracle has been known to terminate accounts flagged as suspicious. A personal or business Google Workspace account works well.
Step 2: Provision Your ARM Instance
- In the Oracle Cloud Console, go to Compute → Instances → Create Instance
- Name your instance (e.g.,
jellyfin-server) - Under Image, click Change Image → select Ubuntu 22.04 with architecture aarch64
- Under Shape, click Change Shape:
- Select Ampere (ARM processor)
- Choose VM.Standard.A1.Flex
- Set 4 OCPUs and 24 GB memory (the full free-tier allocation)
- Under Networking, ensure Assign a public IPv4 address is checked
- Under SSH Keys, paste your public SSH key (or generate a new key pair and download the private key)
- Click Create
Your instance will be ready in 1-3 minutes. Note the Public IP address - you will need it throughout this guide.
Step 3: Open Required Network Ports
Oracle's default security rules block all incoming traffic. You must open ports in two places.
In Oracle Cloud Console (Security List):
- Go to Networking → Virtual Cloud Networks → [Your VCN] → Security Lists → Default Security List
- Click Add Ingress Rules and add:
| Source CIDR | Protocol | Port | Purpose |
|---|---|---|---|
| 0.0.0.0/0 | TCP | 22 | SSH |
| 0.0.0.0/0 | TCP | 80 | HTTP |
| 0.0.0.0/0 | TCP | 443 | HTTPS |
On the VM (OS firewall):
ssh ubuntu@YOUR_PUBLIC_IP
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
Step 4: Install Docker
# Install Docker Engine
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker ubuntu
newgrp docker
# Verify
docker run hello-world
Step 5: Deploy Jellyfin with Caddy
Create your project directory and configuration:
mkdir -p ~/jellyfin && cd ~/jellyfin
Create docker-compose.yml:
services:
caddy:
image: caddy:2-alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- caddy_data:/data
restart: unless-stopped
jellyfin:
image: jellyfin/jellyfin:latest
container_name: jellyfin
volumes:
- ./config:/config
- ./cache:/cache
- /mnt/media:/media:ro
restart: unless-stopped
volumes:
caddy_data:
Create Caddyfile:
jellyfin.yourdomain.com {
reverse_proxy jellyfin:8096
}
Point your domain's DNS A record to your Oracle VM's public IP, then launch:
docker compose up -d
Caddy automatically obtains and renews an SSL certificate. Jellyfin is accessible at https://jellyfin.yourdomain.com.
Step 6: Mount Your Media
The VM's 200 GB boot volume is not enough for a serious media library. Mount your media from an external source.
Option A: Rclone (Google Drive, OneDrive, S3)
Mount cloud storage directly into the VM:
sudo apt install rclone -y
rclone config # follow the wizard for your provider
mkdir -p /mnt/media
# Mount (add to /etc/fstab or a systemd service for persistence)
rclone mount remote:jellyfin-media /mnt/media \
--vfs-cache-mode full \
--vfs-cache-max-size 10G \
--daemon
Option B: SSHFS from Your Home NAS
If you have a home server with your media, mount it over SSH:
sudo apt install sshfs -y
sshfs user@your.home.nas:/media /mnt/media \
-o reconnect,ServerAliveInterval=15,IdentityFile=~/.ssh/id_rsa
Bandwidth note: With SSHFS, every stream pulls data from your home internet connection through the Oracle VM. Your home upload speed becomes the bottleneck - 50 Mbps upload handles one or two 4K Direct Play streams comfortably.
Option C: Oracle Object Storage
Oracle provides free object storage in the Always Free tier (10 GB standard, more with pay-as-you-go). Mount it via rclone using the S3-compatible API. Best for small libraries or frequently-accessed content.
Performance Expectations
| Scenario | Oracle ARM Free Tier |
|---|---|
| Direct Play - H.264 1080p | Excellent - near-zero CPU |
| Direct Play - HEVC 4K | Excellent - ARM handles it natively |
| Audio transcode only (EAC3 → AAC) | Good - minimal CPU load |
| Video transcode - 1080p H.264 (software) | Acceptable - 1-2 streams |
| Video transcode - 4K HEVC (software) | Poor - 1 stream max, high CPU |
| Simultaneous 4K transcodes | Not recommended |
For 2-4 users watching pre-compatible content (H.264/HEVC Direct Play, EAC3 audio), the Oracle free tier is a reliable daily driver.
Bandwidth: Is 10 TB Really Enough?
Streaming 4K at 25 Mbps for 4 hours/day consumes roughly 36 GB/day - about 1.1 TB/month for one user. Oracle's 10 TB monthly free allocation comfortably supports 5-8 simultaneous daily-use users streaming 4K at streaming-service bitrates.
For 4K Blu-ray remuxes at 60-80 Mbps, the math changes: one user streaming 2 hours/day uses ~2.1 TB/month. Adjust your expectations based on your library's bitrates.
Keeping Your Instance Alive
Oracle may reclaim idle Always Free instances. To prevent termination:
- Keep the instance running - do not stop it unless necessary
- Oracle monitors CPU utilization; a Jellyfin server in idle mode (near 0% CPU) can trigger reclamation warnings
- Install a lightweight cron job that generates occasional minimal CPU activity if needed
- Respond promptly to any Oracle emails about your account
Hosting Jellyfin on Oracle Cloud? Download JellyWatch on Google Play - monitor your remote Oracle server sessions from your Android phone, get push notifications when users connect, and catch CPU spikes before they affect playback quality.
Oracle Always Free Tier specifications accurate as of March 2026. Oracle may change free tier limits at any time - verify current allocations at cloud.oracle.com/free before provisioning.




Comments 2
4 ARM cores, 24 GB RAM, 10 TB bandwidth, for free. Oracle's free tier is absurdly generous. Running Jellyfin + Caddy with zero issues.
Rclone mount with Google Drive works great for media storage. VFS cache on the SSD keeps things smooth. Clever setup.
Leave a comment