← Back to the blog
Guides #install

Quick start: install StreamHub with the one-liner

From a fresh Linux box to a live media server with auto-TLS in one command. The installer, what it provisions, and how to verify it.

2 min read
Leer en español

One command, whole stack

StreamHub installs as a single self-contained application under /opt/streamhub, managed as one service. You do not run raw docker compose — the installer provisions everything and hands you a CLI.

On a fresh Linux host with a domain pointed at it:

# interactive
curl -fsSL https://www.streamhub.studio/install.sh | sudo bash

# non-interactive
curl -fsSL https://www.streamhub.studio/install.sh | sudo bash -s -- \
  --non-interactive --domain media.example.com --email you@example.com

What the installer does

The installer is idempotent — safe to re-run — and in one pass it:

  • fetches the latest source,
  • writes a .env with strong random secrets (mode 600, never committed),
  • builds and starts the stack (Redis, LiveKit, ingress, egress, core, Caddy),
  • seeds the first sk_ API token,
  • installs the streamhub CLI plus the managed systemd unit and heartbeat timer,
  • stamps a VERSION file.

Every run is tee'd to logs/install.log, credential-free.

Auto-TLS out of the box

Point your domain's DNS at the server before you install, and Caddy obtains and auto-renews a Let's Encrypt certificate for you. There is no manual certbot step and no renewal cron to babysit — TLS is handled as part of the stack. (The alternate nginx deploy shape exists for operators who front their own proxy.)

Verify it is up

streamhub status                 # every service's state
streamhub doctor                 # docker, core health, ports, disk
curl https://media.example.com/api/v1/health

health returns { status, up, version, uptimeSeconds }. Swagger UI is at /api/v1/docs.

Day-1 upgrades

Upgrades reuse the same idempotent path, and they are backed up and rollback-able:

sudo streamhub upgrade                  # to the latest published version
sudo streamhub upgrade --version 2.2.0  # pin a specific version

Before it migrates, the upgrade snapshots the global and per-app SQLite databases into backups/<stamp>/, so a bad upgrade is recoverable.

Next steps

You now have a running media server. The natural next move is to create your first app and mint a token — from there you can ingest a stream, record it, and embed a player.