Restreamer on Ubuntu 24.04 on Azure User Guide
Overview
datarhei Restreamer is an open source, self hosted live streaming server. You ingest a live feed over RTMP or SRT (for example from OBS Studio or a hardware encoder), then restream and publish it to YouTube Live, Twitch, Facebook, Vimeo and other RTMP, SRT or HLS destinations, all from a polished web interface with no ongoing license cost. The cloudimg image installs Docker CE from the official Docker repository and runs the single official datarhei/restreamer container (which bundles the datarhei Core, FFmpeg and the web UI), bound to the loopback connector 127.0.0.1:8080 behind an nginx reverse proxy on port 80. Restreamer's own login gates the web UI and the datarhei Core API, and a unique admin password is generated on the first boot of every VM, so no default credential is baked into the image. Restreamer's configuration, database and recordings live on a dedicated Azure data disk. Backed by 24/7 cloudimg support.
What is included:
- datarhei Restreamer running as a container managed by Docker, pinned to
datarhei/restreamer:2.12.0 - Docker CE preinstalled from the official Docker apt repository
- The Restreamer web UI and datarhei Core API on
:80, fronted by nginx - A unique admin password generated on first boot and recorded in a root only file
- RTMP (
1935), RTMPS (1936) and SRT (6000/udp) ingest ports published for external encoders - A dedicated Azure data disk at
/var/lib/restreamerholding the configuration, database and recordings docker.serviceandnginx.serviceas systemd units, enabled and active- An unauthenticated
/healthzendpoint for Azure Load Balancer health probes - 24/7 cloudimg support
Prerequisites
An active Azure subscription, an SSH key pair, and a VNet plus subnet in the target region. Standard_B2s (2 vCPU / 4 GiB RAM) is a reasonable starting point for passthrough restreaming; if you plan to transcode your live feed with FFmpeg on the server, choose a larger CPU optimised size. NSG inbound: allow 22/tcp from your management network, 80/tcp for the web UI, and the ingest ports your encoder uses, 1935/tcp for RTMP, 1936/tcp for RTMPS and 6000/udp for SRT. Restreamer serves plain HTTP on port 80; for production, terminate TLS in front of it with your own domain and consider adding 443/tcp (see Maintenance).
Step 1 - Deploy from the Azure Marketplace
Sign in to the Azure Portal, choose Create a resource, search the Marketplace for Restreamer by cloudimg, and select Create. On Basics pick your subscription, resource group, region and size; under Administrator account choose SSH public key and paste your key; under Inbound port rules allow SSH (22) and HTTP (80), then add the ingest ports (1935, 1936, 6000/udp) after deployment. Review the dedicated data disk on the Disks tab, then Review + create -> Create.
Step 2 - Deploy from the Azure CLI
az vm create \
--resource-group <your-rg> \
--name restreamer \
--image <marketplace-image-urn> \
--size Standard_B2s \
--admin-username azureuser \
--ssh-key-values ~/.ssh/id_ed25519.pub \
--vnet-name <your-vnet> --subnet <your-subnet> \
--public-ip-sku Standard
az vm open-port --resource-group <your-rg> --name restreamer --port 80 --priority 1010
az vm open-port --resource-group <your-rg> --name restreamer --port 1935 --priority 1020
az vm open-port --resource-group <your-rg> --name restreamer --port 6000 --priority 1030
Step 3 - Connect to your VM
ssh azureuser@<vm-public-ip>
Step 4 - Confirm the services are running
systemctl is-active docker.service nginx.service
docker ps --filter name=restreamer --format 'table {{.Names}}\t{{.Image}}\t{{.Status}}'
Both systemd units report active, and Docker shows the restreamer container Up. Docker manages the Restreamer container (bound to the loopback connector 127.0.0.1:8080), and nginx fronts it on port 80. The RTMP, RTMPS and SRT ingest ports are published on all interfaces for your encoder.

Step 5 - Retrieve your login credentials
The Restreamer admin password is generated uniquely on the first boot of your VM and written to a root only file:
sudo cat /root/restreamer-credentials.txt
This file contains RESTREAMER_URL, RESTREAMER_USERNAME (which is admin) and RESTREAMER_PASSWORD. Store the password somewhere safe; it is the login for both the web UI and the datarhei Core API.

Step 6 - Confirm the health endpoint
nginx serves an unauthenticated health endpoint for load balancers and probes:
curl -s http://localhost/healthz
It returns ok. This endpoint never requires authentication, so it is safe for an Azure Load Balancer health probe.
Step 7 - Confirm the login password is enforced
Because an admin password is set on first boot, the upstream default credential (admin / datarhei) is rejected, so nobody reaches your streams with a known password. The datarhei Core login API returns 401 for the default:
curl -s -o /dev/null -w '%{http_code}\n' -H 'Content-Type: application/json' \
-d '{"username":"admin","password":"datarhei"}' http://127.0.0.1/api/login
It prints 401. Only the per-VM password from Step 5 authenticates and returns a JWT access_token:
curl -s -H 'Content-Type: application/json' \
-d '{"username":"admin","password":"<RESTREAMER_PASSWORD>"}' http://127.0.0.1/api/login
The response body contains an access_token, confirming the per-VM admin login works end to end.

Step 8 - Sign in to the web UI
Browse to http://<vm-public-ip>/. Restreamer shows its login screen; enter admin and the password from Step 5, then select LOGIN. This authenticates against the datarhei Core API over the same per-VM credentials.

Step 9 - Complete the welcome and video setup
On first sign in Restreamer greets you with a short welcome screen. Select NEXT: VIDEO SETUP to begin configuring your live source.

The Video setup wizard lets you choose where your live feed comes from: a Network source (such as a network camera or an RTSP or HLS URL), the internal RTMP server (for example OBS streaming into Restreamer), the internal SRT server, or a Hardware device. Pick the option that matches your encoder.

Step 10 - Enable the RTMP ingest server for OBS
Choose RTMP server and enable it to receive a stream from OBS Studio or any RTMP encoder. Restreamer shows the RTMP settings: the listen port (1935), the RTMPS port (1936), the publishing App path and an optional Token stream key. In OBS, set the server to rtmp://<vm-public-ip>:1935<app> and the stream key to your token, then start streaming. For SRT encoders, use srt://<vm-public-ip>:6000 with the streamid shown in the UI.

Once a source is live you can add publication services in the Restreamer UI to restream it to YouTube Live, Twitch, Facebook, Vimeo, a generic RTMP or SRT target, or an HLS output for embedding on your own website.
Step 11 - Confirm your data lives on the dedicated disk
Restreamer's configuration, database and recordings are stored under /var/lib/restreamer on the dedicated Azure data disk, so they survive OS changes and can be resized independently:
findmnt /var/lib/restreamer
The mount is backed by a separate Azure data disk captured into the image and re-provisioned on every VM.
Maintenance
- Admin password: the Restreamer admin login is generated on first boot and stored in
/var/lib/restreamer/config. You can change it in the Restreamer UI under Settings -> Authorization, or by recreating the container with a newCORE_API_AUTH_PASSWORDvalue against a fresh config. - Publication services: restreaming targets (YouTube, Twitch, Facebook, Vimeo, generic RTMP or SRT, HLS) are added and managed inside the Restreamer UI; their configuration is stored in the VM's own database on the data disk.
- Recordings and data: Restreamer's database and any recordings live under
/var/lib/restreameron the dedicated Azure data disk; back this path up to preserve your configuration and content. - Upgrades: Restreamer runs as the
restreamercontainer from the pinneddatarhei/restreamer:2.12.0. To move to a newer release,sudo docker pull datarhei/restreamer:<new-tag>then recreate the container with the same port and volume bindings (-p 127.0.0.1:8080:8080 -p 1935:1935 -p 1936:1936 -p 6000:6000/udp -v /var/lib/restreamer/config:/core/config -v /var/lib/restreamer/data:/core/data). - TLS: Restreamer serves plain HTTP on port 80; front it with TLS (for example certbot with your own domain) before production use.
- Security patches: unattended-upgrades remains enabled so the OS continues to receive security updates automatically.
- License: Restreamer is Apache 2.0 licensed. This image ships the open source Restreamer; the cloudimg charge covers packaging, security patching, image maintenance and support.
Support
cloudimg provides 24/7 expert support for this image. Contact support@cloudimg.co.uk.