How to Set Up Wowza Streaming Engine on a Linux VPS
Technical walkthrough to install Wowza Streaming Engine on an Ubuntu VPS, configure the live RTMP application, enable HLS transmuxing, and open the right firewall ports.
Wowza Streaming Engine is a Java media server that handles RTMP, RTSP, and SRT ingest, transmuxes to HLS/DASH, and records live streams to file — all inside a single process. Teams leaving a SaaS like Wowza Video, Mux, or Vimeo Livestream usually end up here for predictable cost: past roughly one hundred broadcast hours per month, running your own infrastructure becomes drastically cheaper than paying per minute consumed.
This tutorial is for anyone running a streaming platform, OTT service, church with regular broadcasts, or an agency producing client live streams who wants their own origin server on a Linux VPS. You will finish with Wowza installed on Ubuntu 24.04, a live application configured to receive RTMP from OBS and deliver HLS to viewers, with the firewall closed on everything that does not need to be open.
Estimated execution time: 35 to 50 minutes, including the installer download (~280 MB) and the first engine boot.
Prerequisites
A VPS with Ubuntu Server 24.04 LTS, 4 vCPUs, 8 GB of RAM, and 60 GB of disk as a realistic starting point. SSH access with a sudo-capable user. A free wowza.com account with a 30-day trial license generated (format EDU-... or ENG-...). Your own domain pointing to the VPS IP is optional but recommended for playback over HTTPS.
The engine consumes RAM in proportion to concurrent connections and buffered chunks. Servers with less than 4 GB start swapping when the audience crosses 200 HLS viewers, which kills perceived latency. SSD storage is non-negotiable — spinning disks stall the transmuxer when you also enable recording.
1935 1935 (same) or 80/443 8088 /usr/local/WowzaStreamingEngine Prepare the system
Before downloading the installer, bring the VPS to the minimum state for running a long-lived Java service — packages up to date, swap in place, and the timezone set correctly for logs.
Refresh the package index and apply pending upgrades:
sudo apt update && sudo apt upgrade -yCloud base images usually ship with an outdated kernel. Applying the upgrade before installing Wowza avoids having to restart the engine right after.
Install the utilities this tutorial will use:
sudo apt install -y curl wget unzip ufw htophtop helps debug CPU usage during transcoding; ufw is the firewall we will configure at the end.
Confirm the VPS has at least 2 GB of swap configured:
swapon --show
free -hIf there is no swap (empty output), create 4 GB:
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstabSwap is not a substitute for RAM, but it prevents the JVM from being OOM-killed during audience peaks.
Download and install Wowza
The official installer is a self-extracting shell script that detects the distro and creates the service user automatically. The current stable line is 4.9.x; the download link is generated inside your Wowza account after you accept the license terms.
Log in to wowza.com, go to Downloads, copy the direct link for the .deb or the Linux shell installer, and pull it on the VPS:
cd /tmp
wget -O wowza-installer.deb "https://www.wowza.com/downloads/WowzaStreamingEngine-4-9-x/WowzaStreamingEngine-4.9.x-linux-x64-installer.deb"Replace the URL with the real link generated in your account — they include an authentication token in the query string.
Install the package:
sudo dpkg -i wowza-installer.debThe installer asks you to accept the EULA, choose the Streaming Manager admin password, and paste the trial license key. Use a strong generated password — you will need it to log into the web panel.
The Streaming Manager admin password is stored hashed at /usr/local/WowzaStreamingEngine/conf/admin.password, but the installer does NOT show it again. If you lose it, run sudo /usr/local/WowzaStreamingEngine/bin/setpassword.sh to reset it.
Enable and start both services (engine + manager):
sudo systemctl enable --now WowzaStreamingEngine
sudo systemctl enable --now WowzaStreamingEngineManagerThe main service is the engine that processes streams; the manager is the administrative web panel on port 8088.
Confirm that both came up without errors:
sudo systemctl status WowzaStreamingEngine
sudo systemctl status WowzaStreamingEngineManagerLook for active (running) in green. If it shows failed, read the log at /usr/local/WowzaStreamingEngine/logs/wowzastreamingengine_access.log — it is almost always an invalid license or a port already in use.
Configure the live application
Wowza ships with an application named live pre-configured for RTMP ingest and HLS playback. In production you create separate applications per use case (live, vod, recording) with their own settings. To get started, we will validate the default live.
Open Streaming Manager in the browser:
http://VPS_IP:8088/enginemanagerLog in with the admin user you defined during installation. You will land on the home page with server status, uptime, and active connections (zero for now).
In the side menu, click Applications and pick live. On the Properties tab, confirm that:
- Application Type is set to
Live - Streaming Type is set to
Live Single Server - Playback Types has HLS, MPEG-DASH, and RTMP checked
Hit Save (top-right corner) and click Restart Application if prompted.
On the Incoming Security tab, set the mode to Open (no authentication required) only for initial testing. In production switch to Username/Password required for all publishing and register publishers under Server > Source Authentication.
Without publishing authentication, anyone who discovers the IP and application name can inject streams — that is a classic abuse vector on an exposed server.
A Wowza server with publishing open on the public internet is an invitation for your application name to be used by third parties to distribute pirated content. Always enable authentication before sharing the IP outside your team.
Open the firewall ports
The engine listens on several ports, but you only need to open the ones accessed externally. UFW is the cleanest way to configure this on Ubuntu.
Set the default policies and allow SSH first (so you do not lock yourself out):
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcpOpen the RTMP port for ingest and playback:
sudo ufw allow 1935/tcpPort 1935 serves both RTMP publishing and HLS playback over HTTP-on-RTMP — Wowza multiplexes both on the same socket.
Open Streaming Manager only to your admin IP (do not leave it exposed to the internet):
sudo ufw allow from YOUR.IP.HERE to any port 8088 proto tcpReplace YOUR.IP.HERE with the fixed IP you administer from. For dynamic IPs, consider a VPN or an SSH tunnel instead of opening the port.
Enable the firewall:
sudo ufw enable
sudo ufw status verboseThe confirmation prompt asks you to type y. Check that the output lists every expected rule before closing the SSH session.
Verification — publish a test stream
To confirm everything works, use OBS Studio on your desktop to publish a test stream and open the HLS playback in a player.
In OBS, go to Settings > Stream and configure:
- Service: Custom
- Server:
rtmp://VPS_IP:1935/live - Stream Key:
myTest1
Click Start Streaming. In Streaming Manager, under Applications > live > Incoming Streams, you should see myTest1 appear with real bitrate and FPS within seconds.
Open the HLS playback in VLC or a web player:
http://VPS_IP:1935/live/myTest1/playlist.m3u8Typical latency lands between 20 and 40 seconds with 10s chunks. For lower latency, configure LL-HLS on the Stream Files tab of the application — it requires chunkDurationTarget=2 and a compatible client.
Troubleshooting
The stream shows up in the manager but the player does not load
It is almost always the firewall or boot order. Confirm that port 1935 is open for TCP in both directions on the host running the player. On corporate networks, RTMP/HLS over port 1935 is sometimes blocked — test from 3G/4G on a phone to rule that out.
CPU at 100% during the broadcast
You probably enabled adaptive transcoding without noticing. Go to Applications > live > Transcoder and disable it if you do not need it. If you do need transcoding, separate ingest from transcoding on different servers.
”License expired” error after 30 days
The trial has ended. Buy a Perpetual or Subscription license on wowza.com, go to Server > Licenses in the manager, paste the new key, and restart the engine with sudo systemctl restart WowzaStreamingEngine.
Next steps
With the engine on air, there are several ways to evolve the operation:
- Set up HTTPS for playback using Let’s Encrypt in front of Wowza with a reverse proxy, to eliminate mixed-content warnings on HTTPS sites.
- Enable automatic recording of publications under Applications > live > Stream Recorders, generating MP4s for a VOD archive.
- Implement publishing authentication with a custom module or SecureToken to prevent misuse of your ingest.
- If your audience grows beyond what a single VPS can serve, separate the origin (Wowza) from delivery on a CDN — Cloudflare Stream, Bunny.net, or AWS CloudFront all accept HLS as a source.
If you are putting this in production and need a server with a Brazilian IP, low latency for in-country viewers, and bandwidth sized for sustained streaming, a Hostini VPS delivers traffic without per-GB billing and daily snapshots, which save the day when a fresh configuration breaks a live broadcast.
Frequently asked questions
Is the Wowza trial license usable in production?
The trial is valid for 30 days, watermarks every stream, and caps concurrent connections. For real production you need a Perpetual or Subscription license issued by Wowza and registered in the console under Server > Licenses. After the trial expires, the engine still boots but rejects publishing and playback.
What is the difference between Wowza Streaming Engine and Wowza Video (Cloud)?
Wowza Video is the managed SaaS — you pay per minute and never touch a server. Streaming Engine is the self-hosted software you install on a VPS or bare metal. Engine gives you full control (custom Java modules, fine-grained transmuxing, DVR, automatic recording) with predictable per-server cost; Video removes the operations work but scales expensive.
How many concurrent viewers can a mid-range VPS handle?
For pure RTMP-to-HLS transmuxing without transcoding, a VPS with 4 vCPUs and 8 GB RAM serves 800-1500 HLS viewers depending on bitrate. If you enable adaptive transcoding (one 1080p input into 3 renditions), CPU becomes the bottleneck and each rendition burns 1-2 sustained vCPUs. For transcoding at scale, bare metal pays off.
Why does the live stream stutter even when bandwidth is fine?
Three common causes: HLS chunkDurationTarget too low (use 6-10s, not 2s), encoder bitrate higher than the actual upload of the source, and missing keyframes every N seconds. HLS requires a keyframe at the start of every segment — in OBS, set the keyframe interval to match the chunk duration.
Can I put Wowza behind Cloudflare?
RTMP on port 1935 does not pass through Cloudflare HTTP — you publish straight to the server IP or via a DNS-only subdomain with the proxy disabled. HLS playback over HTTPS (port 443) can ride a CDN normally. In serious production, separate the ingest server (origin) from the delivery edges (CDN) to scale viewers without overloading the engine.
Does Wowza need Java installed separately on Ubuntu?
No. The official installer bundles a JRE under /usr/local/WowzaStreamingEngine/java and ignores any system Java. If you already have OpenJDK for other reasons, leave it alone — pointing Wowza at a different Java without testing usually breaks native modules.