Installing Streamwell

Before you begin, make sure your server meets the requirements and has a static (fixed) IP address on your network. If you plan to share video over the internet, you should have the correct ports forwarded to the server from your router - and ideally, a domain name already pointed to the public IP of your router (examples here). For ease of deployment, Streamwell works with Docker. This lets you deploy or update Streamwell on any hardware or virtual machine, in seconds. Docker can be installed on your platform of choice for free at www.docker.com.

Once Docker is installed and running, hit the command prompt or terminal and pull the latest available docker image:

docker pull beamwell/streamwell:latest

Create or mount directories to hold your SSL certificate, recordings, logs and uploaded files. By storing these outside of the Docker container we are about to create, we can freely update it without fear of losing them:

mkdir ssl rec log files

Now, let's run the container (see below for further explanation and more options)

Linux:

docker run -d --name Streamwell --restart always -e SYSTEM_KEY="yourSecretKey" --network host -v ~/ssl:/etc/letsencrypt -v ~/rec:/rec -v ~/log:/log -v ~/files:/files beamwell/streamwell:latest

Windows and macOS:

docker run -d --name Streamwell --restart always -e SYSTEM_KEY="yourSecretKey" -p 80:80 -p 443:443 -p 1935:1935 -p 1936:1936 -p 3333:3333 -p 3334:3334 -p 8000:8000 -p 8081:8081 -p 9999:9999/udp -p 10010:10010 -p 10010:10010/udp -v /path/to/ssl:/etc/letsencrypt -v /path/to/rec:/rec -v /path/to/log:/log -v /path/to/files:/files beamwell/streamwell:latest After a few seconds, you should be ready to say "Hello World" to your new Streamwell server 😎

What do these commands mean?

docker pull = downloads the application image and version specified (e.g. mycompany/myapp:version).

docker run -d --name Streamwell = runs a detached container (so we can close the terminal) and calls it Streamwell

--restart always = If the container crashes or is rebooted due to a power failure / system restart, it will automatically restart itself

-e = Environment Variables. Here are the available options:

STRONGLY RECOMMENDED: Pass a ‘SYSTEM_KEY’ and we’ll use that as the encryption key inside the application, to secure your links and stream keys. If you don’t pass a key in, one will be created for you and printed a single time in the startup logs (use docker container logs Streamwell to view those logs).

OPTIONAL: Pass a 'STREAMWELL_DOMAIN_NAME' and 'STREAMWELL_DOMAIN_EMAIL', and Streamwell will automatically configure HTTPS for your server, assuming it is reachable over the internet at that domain name. You might choose to omit these on the first run and configure them later in the web interface.

OPTIONAL: Pass environment variables to customize which ports are used for the various protocols: HTTP_PORT, HTTPS_PORT, WS_PORT, WSS_PORT, RTMP_PORT, RTMPS_PORT, HLS_PORT, API_PORT, SRT_PORT, DATA_PORT. The web server always runs within the container on the standard ports 80 / 443, but you can pass HTTP(S)_PORT variables and map different ports to serve the web client interface if required, e.g. -p 8080:80 -p 8443:443 -e HTTP_PORT=8080 -e HTTPS_PORT=8443

OPTIONAL: "UPLOAD_MB_LIMIT" sets the maximum file upload size in megabytes (e.g. UPLOAD_MB_LIMIT=512). The default is 256. The maximum is 1024.

OPTIONAL: "TZ" overrides the default internal timezone setting of 'UTC' - see Timezone Configuration for more details.

-p = Connect this port from the outside world to the container. On Linux hosts, you don’t need to do this. Instead you can use the argument --network host in your command. Or connect the ports manually if you prefer.

-v = Connect this folder from the computer running Docker to the container

The -v flag is particularly useful since that lets you house things like file uploads, recordings, logs, certificates and more on the host server rather than in the running container. So when you need to update the application it is as simple as replacing the running container with one run from an updated image. While not absolutely required, you should create these directories on your server for data persistence outside of the Docker container:

-v /your/path/to/SSL:/etc/letsencrypt

-v /your/path/to/LOGS:/log

-v /your/path/to/RECORDINGS:/rec

-v /your/path/to/FILES:/files

BEST PRACTICE: Once you figure out the run command for your system, tuck it away somewhere so you can easily re-deploy whenever you Update Streamwell

Last updated