A few minutes, one command
Install streamars on your server.
One command sets up the panel with automatic TLS on a Linux server you control. The free trial covers everything you do here.
curl -fsSL --proto '=https' --proto-redir '=https' https://get.streamars.com | STREAMARS_PULL_KEY=<your-pull-key> TLS_DOMAIN=panel.example.com bashCopy the command with your own pull key from the customer portal.

Step 1
Prepare the server.
Start from a fresh VPS. The installer checks all of this again and warns about anything it finds, but it is quicker to have it right before you run it.
- A supported Linux server
- Ubuntu 22.04 or 24.04, or Debian 12, on x86_64 or arm64, with root access. Other distributions work once Docker is installed on them first.
- Enough memory and disk
- At least 2 GB of RAM and 10 GB of free disk to try streamars. Live video is buffered in memory, so a production panel with many channels wants more RAM.
- A DNS record for the panel
- An A record (AAAA for IPv6), for example panel.example.com, pointing at the server's public IP address before you install.
- Behind Cloudflare?
- A proxied record works. Set the zone's SSL/TLS encryption mode to Full (strict), so Cloudflare connects to the panel over its own certificate.
- A registry pull key
- Create one on your licence in the customer portal. The installer uses it to download the panel, which works while your licence is active.
Open the ports
Allow these in your provider's firewall (cloud firewall or security group), and in ufw too if it is active on the server. RTMP (1935) is not used.
- 80 TCP
- From anywhere
- Certificate issuance (Let's Encrypt) and the redirect to HTTPS.
- 443 TCP and UDP
- From anywhere
- The admin panel, the player API and streams. UDP 443 carries HTTP/3; on providers with per-protocol rules, add it as its own rule.
- 9090, 9091, 6390 TCP
- From your Load Balancers
- Load Balancer control, media relay and Redis relay, all over mutual TLS. Needed once you add a Load Balancer.
- Legacy player ports, e.g. 25461 TCP
- From anywhere, optional
- Only after an XC migration, when players keep the port their playlists were issued with.
Update the system
Bring the packages up to date first:
apt update && apt upgrade -yIf the upgrade installed a new kernel, reboot before you go on:
[ -f /var/run/reboot-required ] && rebootDocker comes with the installer
On Debian and Ubuntu, the installer installs Docker Engine, the compose plugin and openssl from Docker's own repository when they are missing. There is nothing to set up by hand.
On another distribution, install Docker Engine with the compose plugin first, following the official guide at docs.docker.com, then run the installer.
Step 2
Run the installer.
As root on the server, with your pull key from the customer portal and your own domain in place of the placeholders. Running it again later is safe: it keeps your settings and brings the panel up to date.
curl -fsSL --proto '=https' --proto-redir '=https' https://get.streamars.com | STREAMARS_PULL_KEY=<your-pull-key> TLS_DOMAIN=panel.example.com bashNot logged in as root?
Put sudo before the variables, so they reach the installer:
curl -fsSL --proto '=https' --proto-redir '=https' https://get.streamars.com | sudo STREAMARS_PULL_KEY=<your-pull-key> TLS_DOMAIN=panel.example.com bashPin a version
Set STREAMARS_VERSION to install one release instead of the newest:
curl -fsSL --proto '=https' --proto-redir '=https' https://get.streamars.com | STREAMARS_PULL_KEY=<your-pull-key> STREAMARS_VERSION=v1.4.0 TLS_DOMAIN=panel.example.com bashIt shows a pre-flight summary first
Before it changes anything, the installer prints what it found:
- OS and kernel, CPU cores, RAM and free disk under /var/lib/docker
- The Docker and compose versions, or what it is about to install
- The install directory: a new install, or an existing one whose settings are kept
- Whether ports 80 and 443 are free
- Whether your domain resolves to this server (behind the Cloudflare proxy it will not, which is fine)
Findings are warnings, never a stop: low memory, a busy port or DNS that is not there yet are printed and the install goes on. Read the summary before you walk away.
How long it takes
A few minutes on a typical VPS, most of it downloading. It takes longer when Docker is installed first. Once the installer is done, the panel's first start takes about a minute.
It does not upgrade your packages unless you ask: add STREAMARS_APT_UPGRADE=1 before bash to run apt-get upgrade as part of the install.
- TLS_DOMAIN
- The public name of the panel. Asked for interactively when you leave it out.
- STREAMARS_VERSION
- A release to install, such as v1.4.0. Defaults to the newest stable release.
- STREAMARS_APT_UPGRADE
- Set to 1 to run apt-get upgrade before Docker is installed. Off by default: the installer never upgrades your packages on its own.
- INSTALL_DIR
- Where the deployment files and settings go. Defaults to /opt/streamars.
- CLOUDFLARE_TUNNEL_TOKEN
- A Cloudflare Tunnel connector token: the admin panel is reachable through the tunnel. Set it to off to remove the tunnel again.
- STREAMARS_SKIP_NET_TUNING
- Set to true to leave the kernel's network settings alone.
What the installer does.
Checks the host, adds Docker
Prints the pre-flight summary, then installs Docker Engine, the compose plugin and openssl on Debian or Ubuntu when they are missing.
Signs in with your pull key
The registry only serves active licences. The secret goes to docker login on stdin, never onto a command line or into a file.
Pulls the release
The newest stable image, or the version you pin, locked to the exact digest it downloaded.
Sets up /opt/streamars
Postgres, Redis, Caddy and the panel, with secrets generated on the first run.
Tunes the network
Switches the kernel to BBR and fq, which keeps many parallel streams smooth.
Gets a certificate
Caddy fetches a Let's Encrypt certificate for your domain and the panel starts.
Step 3
After the install.
The installer prints this same guidance when it finishes and saves it to /opt/streamars/streamars-install.txt, so it is still there when you come back.
Open the setup page
Go to https://panel.example.com/setup, with your own domain, as soon as the installer finishes. A certificate warning in the first minutes means the certificate is still on its way.
Create the first admin
Choose a username and password. This account owns the panel and can add more staff later.
Enter your activation code
Paste the activation code (SMRS-…) from the customer portal. The licence activates and the panel opens on the dashboard.
Add your first channel
Open Streams and choose New stream. A live channel needs an MPEG-TS source for now, usually a URL ending in .ts.
Add a Load Balancer
When one server is not enough, open Load balancers and choose Add load balancer. The new server needs no Docker: the panel installs it over SSH.
Moving from XC? Continue with the migration guide. More on Load Balancers below.
Where it lives
Everything is in /opt/streamars, including the .env file with your settings and generated secrets: keep it, and keep it private. From that folder, docker compose ps shows the status and docker compose logs -f app follows the panel's log.
Updates
New releases are announced inside the panel, under System > Updates, on the stable channel or, if you switch, beta. Install one with a click or in a maintenance window you choose. The panel takes a safety backup first, and a release that fails its health checks rolls back on its own. Load Balancers update from the same page.
Backups
Schedule backups on the Backups page, or run ./scripts/backup.sh /var/backups/streamars in /opt/streamars, and copy them off the server. They include /data/ca, the certificate authority your Load Balancers trust: without it every Load Balancer has to join again. The .env file is not in a backup, so keep a copy of it somewhere safe as well.
Help
Open the Doctor page in the panel first: it tests the installation and suggests a fix. Then ask Support in the customer portal, or post ideas and bugs on the feedback board.
Add load balancers from the panel.
No terminal on the new server. Your licence covers as many load balancers as you add, and the panel does the install over SSH.
Add the server
In the panel, open Load balancers and choose Add load balancer. Enter the server's SSH address and a password or key, and confirm its host key.
Pre-checks
The panel checks the OS, ports, disk and the route back to your main server, and changes nothing until they pass.
Install
The install runs in the background with a live log. When it finishes, the load balancer joins and starts taking viewers.
What a load balancer needs
- A blank Ubuntu 22.04, 24.04 or Debian 12 server
- The same CPU architecture as the main server
- No Docker needed on the load balancer
- Ports 9090, 9091 and 6390 on the main server reachable from it
Your SSH login stays with you
The password or key is held in memory for the install only. It is never written to the database, a log or the audit trail, and the server's host key is pinned so a swapped machine is refused.
Good to know.
Safe to run again
A second run keeps your settings and secrets and brings everything up to the newest release.
Admin behind Cloudflare Tunnel
Set CLOUDFLARE_TUNNEL_TOKEN to reach the admin panel through a tunnel with no open inbound port. Streams never go through it.
Doctor checks the result
The Doctor page tests the whole installation and gives a concrete fix for anything that is off.
Streaming never waits on us
The licence is checked on your server, with an offline grace period, so an outage on our side does not stop your channels.
Troubleshooting.
The usual first-install problems, each with the next step. Re-running the install command is always safe: your settings and secrets are kept.
Certificate error, or Cloudflare 525 or 526, in the first minutes
DNS has not reached everyone yet. The certificate is issued once the domain points at the server, and Caddy keeps retrying on its own, so wait a few minutes; no re-run is needed. Behind Cloudflare, check that SSL/TLS mode is Full (strict). Watch the progress with:
cd /opt/streamars && docker compose logs caddyPort 80 or 443 is already in use
Another web server, often nginx or Apache from the provider's image, holds the port. Find it:
ss -ltnp '( sport = :80 or sport = :443 )'Stop and disable it, for example
systemctl disable --now nginx, then run the install command again.The pull key is rejected
The key is mistyped, was rotated, or the licence is not active. Copy the current key from your licence in the customer portal (rotating a key revokes the old one), check that the licence or trial is active, and run the command again.
A live channel with an .m3u8 source does not start
Live channels currently need an MPEG-TS source. Ask your source for the MPEG-TS URL of the channel (many offer the same path ending in .ts instead of .m3u8) and edit the stream. HLS sources are coming.
Something else? Open the Doctor page in the panel, then contact Support.
No account yet?
Create an account and the full panel is yours for 14 days, no card needed. Subscribe from the portal when you are ready.