Diagram: a phone, encoder, or OBS sends to the restreamer container on ports 1935 (RTMP), 1936 (RTMPS), or 6000 (SRT). The web interface runs on 8080 and 8181. The config and data folders are kept. Outputs go to platforms, players, and other receivers.

What does datarhei Restreamer do?

Restreamer is a self-hosted streaming server solution with a web interface. It can receive video sources, process them, serve them on its own player page, and forward them as a publication to platforms or other servers.

Open the official datarhei website

Phone / Encoder / OBS → Restreamer on your own server
                                      ├→ YouTube / Twitch / another service
                                      ├→ Player or HLS web page
                                      └→ OBS or another receiver
Do not mix them up: This guide covers the open-source project datarhei Restreamer, not the external multistreaming service Restream.io.

In this guide

1. Requirements and checking your system

This guide is written for the 64-bit systems that Docker currently supports:

Show the distribution, version, and architecture:

cat /etc/os-release && \
dpkg --print-architecture

Then switch to a root shell. On Ubuntu:

sudo -i

On Debian without sudo set up:

su -

If your prompt already shows root@…, you are already root.

Root rights: Check every command before you paste it. The root shell only applies to this installation, so the following commands need no further sudo.
Choosing Ubuntu or Debian: In the next section, run only the block for your operating system. The rest of the Restreamer setup is identical afterward.

2. Installing Docker Engine and Compose

Check for an existing Docker first

If Docker is already installed and other containers are running, do not replace packages carelessly. On a fresh server you can look for conflicting packages with dpkg -l docker.io docker-compose docker-compose-v2 containerd runc. If such packages exist, follow the "Uninstall old versions" section of the official Docker guide for your system, linked below. The procedure that follows assumes a server without conflicts.

Install base packages

apt update && \
apt install ca-certificates curl -y && \
install -m 0755 -d /etc/apt/keyrings

Option A: Ubuntu 26.04, 24.04, or 22.04

curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc && \
chmod a+r /etc/apt/keyrings/docker.asc && \
tee /etc/apt/sources.list.d/docker.sources > /dev/null <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF

Option B: Debian 13 or 12

curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc && \
chmod a+r /etc/apt/keyrings/docker.asc && \
tee /etc/apt/sources.list.d/docker.sources > /dev/null <<EOF
Types: deb
URIs: https://download.docker.com/linux/debian
Suites: $(. /etc/os-release && echo "$VERSION_CODENAME")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF

Install Docker on both systems and verify

apt update && \
apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y && \
systemctl enable --now docker && \
docker run --rm hello-world && \
docker compose version
Expected result: The test container reports a successful Docker installation, and docker compose version shows the Compose plugin.

Official sources: Docker on Ubuntu and Docker on Debian.

3. Deploying Restreamer with Compose

The container comes straight from the official datarhei project. This guide uses the multi-arch image datarhei/restreamer:latest, which Docker pulls to match your processor architecture.

See Restreamer at datarhei Download the ready-made Compose file

Download the prepared file straight into the install directory:

install -d -m 0755 /opt/restreamer/config /opt/restreamer/data && \
curl -fsSL --retry 3 https://irl4you.de/downloads/compose-restreamer.yaml -o /opt/restreamer/compose.yaml && \
chown root:root /opt/restreamer/compose.yaml && \
chmod 0644 /opt/restreamer/compose.yaml

The file uses the storage paths and ports documented by datarhei:

services:
  restreamer:
    image: datarhei/restreamer:latest
    container_name: restreamer
    restart: unless-stopped
    ports:
      - "8080:8080/tcp"
      - "8181:8181/tcp"
      - "1935:1935/tcp"
      - "1936:1936/tcp"
      - "6000:6000/udp"
    volumes:
      - /opt/restreamer/config:/core/config
      - /opt/restreamer/data:/core/data
Secure it before starting: The ready-made Compose file publishes all five listed ports on all network interfaces. That means the admin interface on port 8080 can be reachable from the internet right away. First set up the firewall at your hosting provider or the router port forwards properly, and remove port lines you do not need from /opt/restreamer/compose.yaml. The local UFW alone does not reliably limit ports published by Docker.

Pull the container and start it:

cd /opt/restreamer && \
docker compose config && \
docker compose pull && \
docker compose up -d && \
docker compose ps
Expected result: The restreamer service shows Up. The folders /opt/restreamer/config and /opt/restreamer/data are kept even when the container is recreated.
No unnecessary full privileges: The default file deliberately uses neither privileged: true nor direct device access. Those rights are only needed for local USB cameras or certain GPU hardware, and should be added selectively only after the normal functional check.

4. Ports and firewall

Restreamer default ports
PortProtocolPurposeOpen it?
8080TCPHTTP web interfacefor setup, secure it later
8181TCPHTTPS web interfaceif you use HTTPS
1935TCPRTMPonly for RTMP
1936TCPRTMPSonly for RTMPS
6000UDPSRTonly for SRT

For SSH and other services directly on the host, you can use UFW. Before enabling it, check that the port shown really matches your current SSH connection; with several SSH ports you have to allow all the ports in use. Run the following block only once that is right:

SSH_PORT=$(/usr/sbin/sshd -T | awk '$1=="port" {print $2; exit}') && \
test -n "$SSH_PORT" && \
printf 'Erkannter SSH-Port: %s\n' "$SSH_PORT" && \
apt install ufw -y && \
ufw allow "${SSH_PORT}/tcp" && \
ufw default deny incoming && \
ufw default allow outgoing && \
ufw --force enable && \
ufw status verbose
Important with Docker: UFW may not protect the ports a container publishes. So limit ports 8080/8181 and the streaming ports in your server provider's firewall or at the router. Open only the protocols and sources you actually need there. The command above does not replace that external access control. Docker explains this behavior itself.

5. Setting up the web interface and first user

After starting, open this in your browser:

http://YOUR-SERVER-IP:8080/ui

On first launch, create your own admin account with a long, unique password. The wizard then walks you through video source, audio, and the publication you want. Do not use example passwords, and do not leave the admin interface publicly exposed without protection.

If something goes wrong, check the container:

cd /opt/restreamer && \
docker compose ps && \
docker compose logs --tail=100

6. Setting up source and destination

  1. Create a new video source in the Restreamer web interface.
  2. Pick the right input protocol: RTMP, RTMPS, SRT, or another supported source.
  3. Copy the server address and stream key shown there into your phone app, encoder, or OBS.
  4. Check picture, audio, codec, and input bitrate in the preview.
  5. Under publication, create the destination you want and enter its server address and stream key.
  6. Start with a private test stream first and check picture, audio, and stability at the destination.
Transcoding costs performance: If the input and output codecs already match, copying or remuxing uses fewer resources. Recalculating resolution, codec, or bitrate takes much more CPU or suitable hardware acceleration.

7. Security and HTTPS

For public operation, the official port forwarding typically calls for 80 → 8080 and 443 → 8181. Whether Restreamer's automatic certificate feature or your own reverse proxy makes more sense depends on your domain, router, and existing server setup.

Watch out for existing servers: If Nginx, Apache, or another service already uses port 80, 443, 1935, or 6000, Restreamer must not take the same host ports without checking. In that case, change the left-hand port number in the Compose file or adjust the existing reverse proxy.

8. Update, backup, and troubleshooting

Updating

cd /opt/restreamer && \
docker compose config && \
docker compose pull && \
docker compose up -d

Back up configuration and data

tar -C / -czf /root/restreamer-backup-$(date +%F-%H%M%S).tar.gz \
  opt/restreamer/config \
  opt/restreamer/data \
  opt/restreamer/compose.yaml

Watch the live log

cd /opt/restreamer && \
docker compose logs -f --tail=200

Leave the root shell

exit
Back up before updates: The latest tag makes updating easier, but it can also bring in a new program version. Back up the persistent folders and check inputs, publications, and players after the update.

More details: the official datarhei website, the Restreamer Quick Start, and datarhei Restreamer on GitHub.

9. Video: installing Restreamer on a virtual machine

The video by Akinos01 "Akinos" shows the Restreamer installation on a virtual machine as a practical companion to this written guide. The video is in German.

Written alternative to the video: The steps for Docker, the Compose configuration, and starting and checking are right on this page.

10. FAQ

Is datarhei Restreamer the same as Restream.io?

No. This is about the open-source datarhei Restreamer project that you host yourself. The multistreaming service Restream.io is something different.

Which ports does Restreamer use by default?

8080 (HTTP web interface), 8181 (HTTPS web interface), 1935 (RTMP), 1936 (RTMPS), and 6000 UDP (SRT). Open only the ones you actually need. More under Ports and firewall.

Is UFW enough to secure the Docker ports?

Not necessarily. UFW may not apply to ports that a container publishes. Also block access in your server provider's firewall or at your router.

Do my settings survive an update?

The folders /opt/restreamer/config and /opt/restreamer/data are kept when you recreate the container. With the latest tag, though, a new program version can come in. So back up first anyway, see Update, backup, and troubleshooting.

When does Restreamer need a lot of CPU power?

When transcoding, that is, when resolution, codec, or bitrate are recalculated. If the input and output codecs already match, copying (remuxing) is enough. That takes much less CPU.

Thanks to the datarhei team

A heartfelt thank you goes to the developers and contributors of datarhei Restreamer. With the freely available open-source project, the official Docker image, and thorough documentation, they give the streaming community a capable solution for hosting and distributing live streams yourself.

This IRL4YOU guide is an independently written practical help, originally in German. It has no official connection to the datarhei project. Bug reports, source code, and contributions to the original project belong in the official Restreamer repository on GitHub.

Last technical review: · Updated: · Published by IRL4YOU