Everyone says you can host "anything" on a $5 VPS. Fewer people show the invoice and the htop screenshot. iptvwebplayer.orgruns on a small Linux VM — not a Kubernetes cluster, not a managed Next.js platform. Here are the real numbers and the tips I wish I'd known before the first OOM kill.
This isn't a provider ad. Prices move. The shape of the bill doesn't: compute, disk, bandwidth, domain, email. Add those up and decide if self-hosting beats using the public instance for free.
The bill (monthly, rounded)
- VPS (1 vCPU, 2 GB RAM, 40–50 GB SSD) — about $5–7/moon common budget hosts (Hetzner CX22-class, Vultr/DO entry tiers, etc.). I wouldn't go below 2 GB RAM for production Next builds.
- Domain — ~$12/year amortized (~$1/mo) if you care about a clean URL instead of a raw IP.
- Email (Resend) — free tier covers early transactional volume (verification, password reset). Marketing broadcasts are separate math.
- TMDB + discovery APIs — free tiers; optional niceties, not required to watch TV.
All-in for a personal or small-family deployment: often $6–10/month depending on whether you already own the domain. The public Streamly site adds GA4 and Sentry — still pennies next to the VM.
What the box is actually doing
One Node process (next start on port 3000), SQLite on disk, optional ffmpeg when VOD transcode is enabled, nginx or Caddy on the host for TLS. No Redis, no Postgres, no worker fleet. That simplicity is why a cheap VPS works.
Typical steady state (1–3 household viewers): RAM: ~400–900 MB for Node + page cache CPU: low idle; spikes on deploy build + transcode jobs Disk: ~2 GB app + node_modules; SQLite < 100 MB early on Net: egress-heavy when YOU watch (streams proxy through the box)
Real numbers from deploy day
These are representative of what I see on the production host — your mileage varies with provider panel size and concurrent viewers:
npm ci— ~600 packages, ~15–20 seconds on a 1 vCPU VPS.next build --webpack— ~45–60 seconds with 3 workers; that's the spike that hurts on 1 GB RAM machines.- Cold start after restart — a few seconds to listen on
:3000; health check at/api/healthgoes green immediately after. - SQLite
db:push— sub-second when schema is current.
I deploy with rsync + remote build (see npm run deploy:vps in the repo). Full deploy is ~2–3 minutes end-to-end; quick deploys skip npm ciwhen lockfile didn't change.
Bandwidth — the hidden line item
Streamly proxies IPTV streams through /api/stream so browsers can play them. That means video bytes count against your VPS egress, not just HTML and JSON.
- Browsing catalogs, EPG, posters — negligible (tens of MB/day for active development).
- One HD live channel — often 2–5 Mbps sustained → roughly 1–2 GB/hour per stream through the proxy.
- Three family members watching different channels — multiply.
Budget VPS plans often include 1–2 TB/month. For personal use you're usually fine. For public multi-tenant hostingyou are not — that's a different product and a different bill.
Disk and SQLite hygiene
The database stays small early: users, favorites, watch progress, encrypted provider rows. Schedule backups:
npm run db:backup # copies stream.db with a timestamp
Keep at least one copy off the VPS (object storage, another machine, boring NAS folder). Cron examples live in scripts/crontab.example. If you enable VOD transcode, budget extra disk for ffmpeg cache — that grows faster than SQLite.
What I configure on the host
- TLS reverse proxy — Caddy or nginx terminating HTTPS, proxying to
127.0.0.1:3000. Non-negotiable for cookies and mixed content. - systemd unit — restart on failure, start on boot (
npm run app:install/app:autostarthelpers in the repo). - Firewall — expose 80/443 only; Node stays on localhost.
- Secrets in
.env—AUTH_SECRET,STREAM_SESSION_SECRET, Resend keys. Never commit them; deploy scripts preserve the server.env. - Rollback snapshot — deploy script copies the previous tree before swapping; health check fails → automatic restore.
When a $5 VPS is enough
- You + partner + kids, mostly one stream at a time.
- You're okay SSHing for updates.
- You want data and credentials on your metal.
- You're not trying to run a reseller business off the same box.
When to spend more (or don't self-host)
- Always-on transcode for heavy MKV libraries — CPU is the bottleneck, not RAM.
- Many concurrent viewers through one proxy — upgrade bandwidth and CPU, or split stream proxy from app server.
- Zero ops — use iptvwebplayer.org and spend the $5 on coffee.
Quick start if you're convinced
Spin up Ubuntu 22.04/24.04, install Docker, clone Streamly, follow the Docker setup guide. For the "why does this architecture exist" story, read how I built the frontend in a weekend.
Bottom line
A $5–7 VPS comfortably runs Streamly for personal IPTV if you respect RAM during builds and understand that proxied video eats bandwidth. My production bill is boring on purpose: small VM, SQLite, single Node process, nightly DB backup, rsync deploys. That's the whole secret.
Disclaimer: Streamly is a player only. It does not sell IPTV subscriptions or host licensed content. You are responsible for your provider and local law.