Skip to main content

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.

.env
# 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:

docker-compose.yaml
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 .env file
  • Change the value of IMAGE_TAG to the desired version
    • The newest version is 2026.1
  • Save the .env file

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