Docker-based Installation - Storm Streaming Server
Docker is the simplest way to start working with Storm Streaming Server. Please make sure that both Docker and Docker Compose components are installed on your target OS.
If you have no prior experience with Docker, check our Docker Software Installation guide.
Let's check if all Docker components are in place:
docker version
(for Windows please use PowerShell/Command Prompt)
docker-compose version
(for Windows please use PowerShell/Command Prompt)
Basic Docker Configuration
Let's create a simplified docker configuration file called storm-docker-compose.yml:
services:
storm:
image: stormstreaming/storm-streaming-server:latest
container_name: storm
network_mode: "host"
restart: unless-stopped
environment:
STORM_LICENSE_KEY: "DEVELOPER"
STORM_SERVER_NAME: "MyServer"
STORM_ADMIN_USERNAME: "admin"
STORM_ADMIN_PASSWORD: "admin"
STORM_API_KEY: "change-me-api-key"
JAVA_XMX_VALUE: "4g"
JAVA_XMS_VALUE: "2g"
volumes:
- /srv/storm/config:/srv/storm/config
- /srv/storm/logs:/srv/storm/logs
Once the container is running, open the Control Panel in your browser:
http://YOUR_SERVER_IP:8080/cpanel
Networking
This image uses network_mode: host by default. This means the container shares the network stack directly with the host machine, which has an important practical benefit — any VHost you create via the Control Panel is immediately accessible without restarting the container or modifying Docker configuration. This is the recommended mode for production deployments on Linux.
network_mode: host is not supported on Docker Desktop for Windows and macOS. On these systems, use bridge networking and declare ports explicitly:
ports:
- "1935:1935"
- "8080:8080"
Keep in mind that in bridge mode, any new VHost you create in the Control Panel will require a corresponding entry in the ports section and a container restart to become accessible from outside.
Environmental variables
| Variable | Description |
|---|---|
STORM_LICENSE_KEY | For testing purposes, you can keep "DEVELOPER", however server will be limited to 5 concurrent streams and 10 viewer connections. For a paid or non-commercial license, use your license key found on "My Products" page. |
STORM_ADMIN_USERNAME | Admin username for accessing the Control Panel. |
STORM_ADMIN_PASSWORD | Admin password for accessing the Control Panel. Change in production. |
STORM_API_KEY | REST API authentication key. Change in production. |
Additional & Optional Environmental variables
| Variable | Default | Description |
|---|---|---|
STORM_SERVER_NAME | StormServer | The name of your server — helps identify it when managing multiple instances. |
STORM_GROUP_NAME | Default | The server group name — useful for identifying grouped or clustered instances. |
STORM_HOST_NAME | localhost | Hostname used by other cluster nodes to reach this instance. |
STORM_RTMP_HOST | * | Host/IP for the RTMP VHost. Use * to listen on all available network interfaces. |
STORM_RTMP_PORT | 1935 | Port for the RTMP VHost. In bridge mode this port must be explicitly exposed. |
STORM_HTTP_HOST | * | Host/IP for the HTTP/WebSocket VHost. Use * to listen on all available network interfaces. |
STORM_HTTP_PORT | 8080 | Port for the HTTP, WebSocket and Control Panel VHost. In bridge mode this port must be exposed. |
Volumes
Volumes are shared (linked) directories between a Docker host/machine (left side) and a Docker container (right side). The right side after a colon should NOT BE MODIFIED.
| Volume | Description |
|---|---|
DOCKER_HOST_PATH_FOR_CONFIGS:/srv/storm/config | Storm configuration files (preferences.xml, log4j2.xml). If not mounted, default config is generated from env vars on first run. |
DOCKER_HOST_PATH_FOR_LOGS:/srv/storm/logs | Storm log files. |
DOCKER_HOST_PATH_FOR_SSL:/etc/ssl/private | JKS certificate files required when running Storm in SSL mode. |
For Windows-based operating systems paths should look as in this example:
- /c/Users/USERNAME/Documents/Storm/config:/srv/storm/config
Custom VHosts & Ports
By default, Storm starts with two VHosts — RTMP on port 1935 and HTTP/WebSockets on port 8080. Additional VHosts can be configured in two ways:
Via the Control Panel — navigate to Server → VHosts and add a new VHost directly from the web interface. Changes take effect immediately without restarting the container.
Via preferences.xml — if you mount /srv/storm/config as a volume, you can edit the VHostSettings section of preferences.xml directly.
Changes made directly to preferences.xml require a container restart to take effect. Changes made via the Control Panel are applied immediately and do not require a restart.
Creating Container
Let's create the container from our YML file now:
docker-compose -f storm-docker-compose.yml up
To run the container in the background (detached mode):
docker-compose -f storm-docker-compose.yml up -d
Destroying Container
If we want to stop the container and destroy it, simply use:
docker-compose -f storm-docker-compose.yml down
Java Memory Allocation
In order to increase memory available to the Java application within Docker, use these optional environmental variables:
| Variable | Description |
|---|---|
JAVA_XMS_VALUE | Minimum heap memory available for the Java (Storm) application. Sample values: 2g – development, 8g – 250 viewers, 64g – 2800 viewers. |
JAVA_XMX_VALUE | Maximum heap memory available for the Java (Storm) application. Sample values: 4g – development, 16g – 250 viewers, 128g – 2800 viewers. |
Memory Guidelines
| Use Case | JAVA_XMS_VALUE | JAVA_XMX_VALUE |
|---|---|---|
| Development / testing | 2g | 4g |
| ~250 concurrent viewers (720p) | 8g | 16g |
| ~2800 concurrent viewers (720p) | 64g | 128g |
Useful links
Docker commands - https://docs.docker.com/engine/reference/commandline/docker/
In the next step you'll learn how to configure Server Identity & Group data.
If you have any questions or need assistance, please create a support ticket and our team will help you.