Installation
This page takes a clean server to a StreamVault Engine installation that is broadcasting, with its licence activated.
The whole installation is done by sve, the tool that lives on the server. There is no
graphical installer and there will not be one: updating or reinstalling from the panel
would mean giving Docker access to a process exposed to the internet, and a flaw in that
process would be total control of your machine. That is why installing and updating ask for
a session on the server.
Before you start
You need three things:
-
A clean server, with nothing else running on ports 80 and 443.
-
Your licence key, six groups of five characters. Your provider gave it to you:
9F2K7-M4XQ8-3TRWZ-P6HDY-C5NJ2-8VBRTIt carries no prefix and no product marking. If yours starts with letters that look like a name, it is not a key for this product.
-
Outbound internet from the server. The engine needs it to download its images, to activate the licence and to renew it every few hours. Your viewers do not need internet: they connect to this server.
A key is activated once and binds to that server. If you are going to install for testing and then move to the final machine, say so before activating: moving an installation is a step that exists, but it is easier not to have to take it.
Server requirements
| Minimum | Recommended | |
|---|---|---|
| Operating system | Ubuntu 22.04, 24.04 or 26.04 · Debian 12 or 13 | Ubuntu 24.04 |
| Architecture | x86_64 | x86_64 |
| Cores | 2 | 4 or more |
| Memory | 4 GB | 8 GB or more |
Free disk on / | — | 50 GB or more |
| Free ports | 80 and 443 | 80 and 443 |
Other distributions may work, but only Ubuntu and Debian are tested.
Disk is what surprises people most: video segments being broadcast are written to disk constantly and take up space for as long as they are alive. The 50 GB is not for storing anything, it is working room.
Graphics card. Optional. With an NVIDIA card the engine can transcode in hardware if your licence includes that feature; without one, it transcodes on the processor. It is detected automatically — nothing to configure.
DVB adapters. Optional. If the server has /dev/dvb, the installer enables the
matching layer.
Check the server first
There is a script that reviews all of the above, installs Docker if it is missing and tells you whether this server will do. It does not install the engine and does not need your key:
curl -fsSL https://streamvault.fyi/install.sh | sudo bash
It ends with a summary of system, resources, GPU and ports. If anything comes up red, that server does not qualify: fix it before going on.
Step 1 · Install
One command, in the directory where you want to install:
sudo mkdir -p /opt/streamvault/deploy && cd /opt/streamvault/deploy
curl -fsSL https://sync.streamvault.fyi/install.sh | sudo sh -s -- --key 9F2K7-M4XQ8-3TRWZ-P6HDY-C5NJ2-8VBRT
Replace the example key with yours.
Nothing has to be fetched by hand. Your licence key is the credential for everything: it downloads the tool, the version's package and the images. A suspended licence downloads nothing, which is exactly what you are buying.
The other script, at
https://streamvault.fyi/install.sh, does not install: it is a pre-flight check of the server that ends by asking you to send us the summary, and it does not even accept--key. To install, use the one onsync..
What that command does
The script does not install anything itself: it checks the essentials, downloads the sve
tool using your licence key as the credential, verifies its checksum and hands over the
work. All the logic is in sve, which is tested and knows how to roll back; a shell
installer doing the same would be a second implementation, untested, that would diverge at
the first version.
If you would rather not pipe curl into an interpreter — a reasonable precaution — read it
first:
curl -fsSL https://sync.streamvault.fyi/install.sh -o install.sh
less install.sh
sudo sh install.sh --key 9F2K7-M4XQ8-3TRWZ-P6HDY-C5NJ2-8VBRT
What it does, in order
- Checks everything before touching anything: root, key present,
curlanddockerinstalled,docker composev2 available, x86_64 architecture. All together and at once: finding out Docker is missing after having written files leaves a machine that was clean half done. - Downloads
svefromsync.streamvault.fyiauthenticating with your key, checks thesha256by asking for it in a separate request, and installs it at/usr/local/bin/sve. - Calls
sve install --key …, which does the rest from here:- Pre-flight checks: that there is no
.envalready (if there is, that installation exists and what you want issve update). - Fetches the published version's package (
deploy-X.Y.Z.tar.gz, a few kilobytes) and unpacks it: the service definitions, the optional layers, the configuration template and the public key used to verify the images. The version installed is the package's, the one your provider published, not the tool's. - Writes the
.envstarting from.env.example, generating a database password, a session secret and an initial panel password. It starts from the example rather than an internal template so that new variables in future versions arrive with their comment and their default. - Decides the layers: looks for
/dev/nvidiactland/dev/dvband adds only the layers that apply. They are separate because declaring a card that is not there stops the container from starting; if everything were in one file, the most common installation would be exactly the one that fails to come up. - Creates the data tree at
/opt/streamvault/dataand assigns it to the user the containers run as. The installer creates it because the containers do not run as root and cannot create anything under/opt. - Logs in to the image registry with your licence key. The key is the credential: a suspended licence does not download images, which is exactly what the subscription buys.
- Downloads the images. This takes a while; they are several gigabytes.
- Starts up and waits for every service to become healthy.
- Activates the licence against the API it has just brought up.
- Pre-flight checks: that there is no
When it finishes it prints the panel address, the admin user and a password. The
password is shown once and the panel makes you change it on first login.
Rehearsing it without starting anything
If you want to see what it would do before doing it:
sudo sve install --key 9F2K7-M4XQ8-3TRWZ-P6HDY-C5NJ2-8VBRT --dry-run
It writes the .env, creates the directories, says which layers would apply — and stops
there, downloading and starting nothing.
Options
| Option | What for |
|---|---|
--key KEY | Your licence key. Required. |
--domain example.com | The public name. Empty means access by IP. |
--data-dir PATH | Where the data lives. Defaults to /opt/streamvault/data. |
--no-gpu | Do not use the graphics card even if there is one. |
--no-dvb | Do not use the DVB adapters even if there are any. |
--dry-run | Prepare and explain, without starting anything. |
--dir PATH | The package directory. Defaults to the current one. |
Step 2 · Log in to the panel
With the installation finished:
http://YOUR-SERVER-IP:8080
It also answers on port 80. The panel and the API are served from the same origin: there is no need for a second name or a second certificate to get going, and the panel works the same by IP as by name.
Log in as admin with the password the installer printed, and change it — the panel is
going to ask you anyway.
Check everything is where it should be:
sudo sve status
It shows the installed version, the licence state with its validity date, whether a newer version has been published, and one line per service with its health.
Step 3 · Name and certificate (optional, later)
You can run by IP indefinitely. When you want a name with TLS: point the domain at this
server, leave the certificate where SVE_CERTS_DIR says, add docker-compose.tls.yml to
COMPOSE_FILE in the .env and fill in SVE_DOMAIN and SVE_PUBLIC_BASE_URL. From then
on it also listens on 443 and 8443.
The HTTPS block is only generated if there is a readable certificate, on purpose: nginx refuses to start if the files of a certificate it declares are missing, and an installation without one — most of them, at the start — would lose the whole web server over a block it does not use.
If something fails
"esto tiene que correr como root: use sudo"
sudo is missing. The installer writes to /usr/local/bin and /opt, and needs to read
hardware values only root can read.
"hace falta 'docker' y no esta instalado" or "hace falta el complemento docker compose (v2)"
Install it and run again. The pre-flight script
(curl -fsSL https://streamvault.fyi/install.sh | sudo bash) installs it if it is missing.
"el servidor no acepto esa clave"
Three causes, in order of likelihood:
- A typing mistake. The key carries a check digit precisely to catch that before spending an attempt; if you mistyped it while copying, it never even tries.
- The key has already been activated on another server. Each key is good for one installation.
- The licence is suspended or has expired. Ask your provider.
There is an attempt limit: ten activations per hour per key. If you exceed it, wait; do not insist, because twenty failures in 24 hours lock the key pending review.
"no se pudo hablar con sync.streamvault.fyi"
This server has no outbound internet, or something is filtering it. Check:
curl -sS -o /dev/null -w '%{http_code}\n' https://sync.streamvault.fyi/v1/public/health
"en . no hay ningun docker-compose.yml: descomprima ahi el paquete de la version"
You are running the installer outside the package directory. Go to the deploy/ directory
that appeared when unpacking deploy-X.Y.Z.tar.gz and run it again, or use --dir to point
at it.
"ya hay un .env: esta instalacion existe, use sve update"
This server already has an installation. Do not overwrite it: if you want to bring it up to
date, use sve update. If you really want to start from scratch, that means deleting that
installation's data and it is a different decision.
The images take forever or the download breaks
They are several gigabytes. If it breaks, run the same command again: Docker resumes the layers already downloaded. Nothing has been deleted.
"no quedó sano" while waiting for start-up
The installation is still standing: half an hour of downloading is not undone because one service is slow. Look at what is happening:
sudo sve doctor
sudo sve logs api
A cold start of an installation with many channels includes migrations and a staggered start-up, and it is given five minutes.
"la instalación está en marcha, pero la licencia no se activó"
This is the anticipated case: the engine is running and only activation is missing. Go into the panel and activate it under System → Licence, pasting the same key.
If the error says pin_required, your licence is on the enterprise plan and also needs a
six-digit PIN that reaches you through a channel other than email. That case can only be
completed from the panel.
Once activated, sve status says the licence is not valid
The licence binds to this machine through several hardware values. One of them lives in a
file that sve install prepares before the first start-up, because the containers do not
run as root and cannot read it from the system. To check the engine sees it:
# It has to be a FILE. If it says "directory", that is the problem.
docker compose exec api ls -ld /host/dmi.txt
# And return something.
docker compose exec api cat /host/dmi.txt
Coming back empty is not a fault: some virtual machines do not expose those values. The
licence binds anyway, with one value fewer. Coming back as a directory is a fault, and
can only happen on installations made before 1.12.2: stop the stack, delete that directory,
run sve install again or create the file by hand, and bring it back up.
And now
- Verify the images are the ones we say they are. Every image is signed and so is its
dependency inventory, and the public key comes in the package (
keys/cosign.pub): the check runs from your machine, against the registry, without asking us anything. - Schedule backups.
sve backupdumps the whole database. What really needs keeping is the database and your video files; the rest rebuilds itself. - Keep the system up to date. See Updating.