Docker
This guide provides instructions for deploying Broadcast Suite using Docker and Docker Compose. The assumption is that Docker and Docker Compose are already installed on your system.
Overview
The Broadcast Suite deployment consists of the following containers:
- PostgreSQL Database: A PostgreSQL database for storing application data
- Broadcast Suite Core: Handles the business logic and connections
- Broadcast Suite GUI: The web-based user interface
- Broadcast Suite API: The REST API services
Prerequisites
Before deploying, ensure you have the following:
- Docker installed and running
- Docker Compose installed
- Sufficient system resources (CPU, memory, disk space)
Configuration
The deployment is defined in a docker-compose.yaml file containing all necessary services.
Broadcast Suite
Broadcast Suite is deployed with three separate containers:
Core Container
- Image:
git.broadcastsuite.com/broadcastsuite/broadcastsuite-core:2026.1 - Ports: 8085 (HTTP), 8086 (gRPC), 9000 (Ember+)
GUI Container
- Image:
git.broadcastsuite.com/broadcastsuite/broadcastsuite-gui:2026.1 - Port: 5000 (HTTP)
- Configuration: Connects to API on ports 8091 (REST), 8092 (gRPC)
API Container
- Image:
git.broadcastsuite.com/broadcastsuite/broadcastsuite-api:2026.1 - Ports: 8091 (REST API), 8092 (gRPC)
The image tags correspond to the version number. The current version used in this documentation is 2026.1.
Older versions of the containers can be found here.
Network Configuration
The services communicate through a dedicated Docker network:
- Network Name:
broadcastsuite_net - Driver:
bridge - Isolation: Services can communicate using their container names as hostnames
Deployment Steps
Step 1: Create the Docker Compose Configuration
The .env File
Create a file named .env with the content following content.
These values in the .env file can be customized as needed.
# Version
IMAGE_TAG: "2026.1" # Version tag for the Broadcast Suite Docker images
# General
General__NodeName: "" # Set the name of the node
General__NodeLocation: "" # Set the location of the node
TZ: "Europe/Zurich" # Define your timezone
DEFAULT_CULTURE: "de-CH" # Define your culture
Gui__ReverseProxy: "" # Set to 'true' if you are using a reverse proxy
GUI_HTTP_PORT: "5000"
Gui__ExternalUrl: "broadcastsuite-gui:${GUI_HTTP_PORT}"
Core__Address: "broadcastsuite-core"
Api__BaseUrl: "broadcastsuite-api"
COMPOSE_PROJECT_NAME: "broadcastsuite"
HOST_PATH: "/opt"
# Ports
CORE_API_PORT: "8085"
CORE_GRPC_PORT: "8086"
CORE_WASM_PORT: "8088"
API_API_PORT: "8091"
API_GRPC_PORT: "8092"
# Database
DB_VERSION: "17-alpine"
DB_NAME: "${COMPOSE_PROJECT_NAME}"
DB_USER: "postgres"
DB_PASSWORD: "postgres"
DB_HOST: "postgres"
# ******************************************
# *** DO NOT MODIFY THE FOLLOWING VALUES ***
# ******************************************
General__DefaultCulture: "${DEFAULT_CULTURE}" # DO NOT MODIFY!
Settings__LogPath: "/opt/slg/broadcastsuite/logs" # DO NOT MODIFY!
Database__ConnectionString: "Host=${DB_HOST};Database=${DB_NAME};Username=${DB_USER};Password=${DB_PASSWORD};" # DO NOT MODIFY!
Database__BackupPath: "/opt/slg/broadcastsuite/backups" # DO NOT MODIFY!
Database__PostgreSqlBinFolder: "/usr/bin" # DO NOT MODIFY!
Core__ApiPort: "${CORE_API_PORT}" # DO NOT MODIFY!
Core__GrpcPort: "${CORE_GRPC_PORT}" # DO NOT MODIFY!
Core__GrpcWasmPort: "${CORE_WASM_PORT}" # DO NOT MODIFY!
ASPNETCORE_ENVIRONMENT: "Production" # DO NOT MODIFY!
ASPNETCORE_FORWARDEDHEADERS_ENABLED: "true" # DO NOT MODIFY!
The docker-compose.yaml File
In the same directory, create a file named docker-compose.yaml with the content below:
networks:
broadcastsuite_net:
driver: bridge
services:
postgres:
image: postgres:${DB_VERSION}
container_name: broadcastsuite-postgres
restart: unless-stopped
environment:
TZ: ${TZ}
POSTGRES_DB: postgres
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes:
- ${HOST_PATH}/slg/${COMPOSE_PROJECT_NAME}/postgres:/var/lib/postgresql/data:Z
networks:
- broadcastsuite_net
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres -d postgres"]
interval: 10s
timeout: 60s
retries: 5
broadcastsuite-core:
image: git.broadcastsuite.com/broadcastsuite/broadcastsuite-core:${IMAGE_TAG}
container_name: broadcastsuite-core
hostname: broadcastsuite-core
restart: unless-stopped
depends_on:
postgres:
condition: service_healthy
env_file: ".env"
volumes:
- ${HOST_PATH}/slg/${COMPOSE_PROJECT_NAME}/logs:/opt/slg/broadcastsuite/logs
- ${HOST_PATH}/slg/${COMPOSE_PROJECT_NAME}/backups:/opt/slg/broadcastsuite/backups
networks:
- broadcastsuite_net
ports:
- "${CORE_API_PORT}:${CORE_API_PORT}"
- "${CORE_GRPC_PORT}:${CORE_GRPC_PORT}"
- "${CORE_WASM_PORT}:${CORE_WASM_PORT}"
# - "514:514" # Syslog
# - "6343:6343" # sFlow
# - "9923:9923" # Skaarhoj Communication
broadcastsuite-api:
image: git.broadcastsuite.com/broadcastsuite/broadcastsuite-api:${IMAGE_TAG}
container_name: broadcastsuite-api
hostname: broadcastsuite-api
restart: unless-stopped
depends_on:
postgres:
condition: service_healthy
broadcastsuite-core:
condition: service_started
env_file: ".env"
environment:
Api__Port: "${API_API_PORT}"
Api__GrpcPort: "${API_GRPC_PORT}"
volumes:
- ${HOST_PATH}/slg/${COMPOSE_PROJECT_NAME}/logs:/opt/slg/broadcastsuite/logs
- ${HOST_PATH}/slg/${COMPOSE_PROJECT_NAME}/backups:/opt/slg/broadcastsuite/backups
networks:
- broadcastsuite_net
ports:
- "${API_API_PORT}:${API_API_PORT}"
- "${API_GRPC_PORT}:${API_GRPC_PORT}"
broadcastsuite-gui:
image: git.broadcastsuite.com/broadcastsuite/broadcastsuite-gui:${IMAGE_TAG}
container_name: broadcastsuite-gui
hostname: broadcastsuite-gui
restart: unless-stopped
depends_on:
broadcastsuite-api:
condition: service_started
env_file: ".env"
environment:
Api__Port: "${API_API_PORT}"
Api__GrpcPort: "${API_GRPC_PORT}"
Kestrel__ListenPort: "${GUI_HTTP_PORT}"
volumes:
- ${HOST_PATH}/slg/${COMPOSE_PROJECT_NAME}/logs:/opt/slg/broadcastsuite/logs
- ${HOST_PATH}/slg/${COMPOSE_PROJECT_NAME}/backups:/opt/slg/broadcastsuite/backups
networks:
- broadcastsuite_net
ports:
- "${GUI_HTTP_PORT}:${GUI_HTTP_PORT}"
Step 2: Start the Services
Navigate to the directory containing the .env and docker-compose.yaml files and run:
docker-compose up -d
Step 3: Verify the Deployment
Check the status of the containers:
docker-compose ps
Wait for all containers to be in Up status.
If a container was unable to start, check the logs for any issues:
docker-compose logs -f
You can check individual container logs:
docker logs -f broadcastsuite-core
docker logs -f broadcastsuite-api
docker logs -f broadcastsuite-gui
Step 4: Access the Application
Once all containers are running, Broadcast Suite can be accessed.
Follow the steps on the First Steps page.
For production deployments, consider setting up a reverse proxy with SSL termination.
Update Steps
Step 1: Stop the Running Containers
Navigate to the directory containing the .env and docker-compose.yaml files and run:
docker-compose down
Step 2: Update the IMAGE_TAG
- Open the
.envfile - Change the value of
IMAGE_TAGto the desired version- The newest version is
2026.1
- The newest version is
- Save the
.envfile
Step 3: Update the Docker Images
Pull the new images:
docker-compose pull
Start the services:
docker-compose up -d
Step 4: Cleanup
Remove the outdated images:
docker image prune -af