Applications Azure

Restreamer on Ubuntu 24.04 on Azure User Guide

| Product: Restreamer on Ubuntu 24.04 LTS on Azure

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/restreamer holding the configuration, database and recordings
  • docker.service and nginx.service as systemd units, enabled and active
  • An unauthenticated /healthz endpoint 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.

docker.service and nginx.service active, the restreamer container healthy on datarhei/restreamer:2.12.0, and the UI, RTMP and SRT listeners

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.

The pinned Restreamer image reference and the per-VM credentials file with the generated admin password and URL

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.

The datarhei Core login round trip: the upstream default admin datarhei rejected with 401 and the per-VM password returning an access token

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.

The Restreamer web UI login screen with username and password fields

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 Restreamer v2 welcome screen with the Next Video Setup action

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.

The Restreamer video setup wizard offering Network source, RTMP server, SRT server and Hardware device options

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.

The Restreamer RTMP settings page showing the RTMP and RTMPS ports, publishing app and stream token

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 new CORE_API_AUTH_PASSWORD value 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/restreamer on the dedicated Azure data disk; back this path up to preserve your configuration and content.
  • Upgrades: Restreamer runs as the restreamer container from the pinned datarhei/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.