Cluster Configuration for Docker Installation
The administration console is accessible on :9090/admin
by default. It can be accessed by any modern web browser. When you first log in, you are prompted to enter your LiveSwitch license key and set up login credentials. See Configuration Console for documentation on setting configuration through the administration console and a complete description of all configuration entities.
The REST API is accessible on :9090/admin/api
by default. LiveSwitch conforms to OData best practices. The v2
API is recommended for read/write access to configuration.
The REST API explorer is accessible on :9090/admin/swagger
by default. Swagger lets you explore and interact with the REST API from your web browser.
Using the administration console, the REST API, or environment variables, you can configure Deployment Configurations, Application Configurations, Channel Configurations, and API Keys. Configuration through environment variables follows .NET Core conventions.
Warning
You must provide the same cluster configuration for all Gateway images. This is a convenient configuration method when using Docker. This configuration is stored in Redis, so if you configure different cluster configurations, and then deploy these images to the same cluster, the results might be unpredictable.
Note
When running multiple LiveSwitch Gateways behind a load balancer, you can use the gateway URL for the health check. You can use /
or /sync
. For example http://localhost:8080/
or http://localhost:8080/sync
.
Initialize Configuration
These values, if set, initialize an uninitialized site without using the admin UI or REST API.
Initialize:LicenseKey
(string)Initialize:Username
(string)Initialize:Password
(string)
Site Configuration
These values, if set, update the site configuration without using the admin UI or REST API.
Site:CacheConnectionString
(string)Site:AdminPath
(string)Site:SyncPath
(string)Site:AllowAnonymousLegacyApi
(boolean)Site:ServiceStatsInterval
(integer)Site:Metadata
(string)
API Key Configuration
These values, if set, ensure that an API key entity exists for the given API key.
ApiKeys
is an array, so {index}
should start at 0 and increment by 1 for each additional API key; for example, 0, 1, 2, and so on.
ApiKeys:{index}:Key
(uuid, required)ApiKeys:{index}:Tag
(string)ApiKeys:{index}:Metadata
(string)
Certificate Configuration
These values, if set, ensure that a certificate entity exists for the given certificate's SHA-1 fingerprint or thumbprint.
Certificates
is an array, so {index}
should start at 0 and increment by 1 for each additional certificate; for example, 0, 1, 2, and so on.
Certificates:{index}:CertificateBase64
(string, required, pfx/p12)Certificates:{index}:Password
(string)Certificates:{index}:Tag
(string)Certificates:{index}:Metadata
(string)
Note
When running a LiveSwitch Docker image which is configured with a TLS termination and an associated certificate, make sure the host environment where the LiveSwitch Docker image will be run has the matching root CA certificate installed. This ensures the Docker container is created with access to the CA certificates needed for authenticating certificates.
When using a private CA you can ensure the root CA certificate is in the Docker container by:
- creating the container
- copying the CA cert into
/usr/local/share/ca-certificates/
- starting the container
- executing
update-ca-certificates
in the container
Deployment Configuration
These values, if set, ensure that a deployment configuration entity exists for the given deployment ID.
Deployments
is an array, so {index}
should start at 0 and increment by 1 for each additional deployment configuration; for example, 0, 1, 2, and so on.
Deployments:{index}:DeploymentId
(string, required)Deployments:{index}:AllocationStrategy
(enum)RoundRobin
,SpillOver
,LeastConnections
Deployments:{index}:AllowedChannelUpdates:EnableRtmp
(boolean)Deployments:{index}:AllowedChannelUpdates:Mute
(boolean)Deployments:{index}:AllowedChannelUpdates:Record
(boolean)Deployments:{index}:Bus:AmqpUri
(string)Deployments:{index}:Bus:Enabled
(boolean)Deployments:{index}:CapacityThresholds:BandwidthThreshold
(integer)Deployments:{index}:CapacityThresholds:CpuThreshold
(integer)Deployments:{index}:CapacityThresholds:Enabled
(boolean)Deployments:{index}:CapacityThresholds:McuConnectionsPerCpuThreshold
(integer)Deployments:{index}:CapacityThresholds:MemoryThreshold
(integer)Deployments:{index}:CapacityThresholds:SfuConnectionsPerCpuThreshold
(integer)Deployments:{index}:CapacityThresholds:WssCpuThreshold
(integer)Deployments:{index}:CapacityThresholds:WssMemoryThreshold
(integer)Deployments:{index}:CapacityThresholds:WssConnectionsPerCpuThreshold
(integer)Deployments:{index}:CapacityThresholds:WssMediaConnectionsPerClientThreshold
(integer)Deployments:{index}:ClusterBinding:Cidr
(string)Deployments:{index}:ClusterBinding:Port
(integer)Deployments:{index}:ExternalStunUrls
(string array)Deployments:{index}:ForbiddenTurnPeerCidrs
(string array)Deployments:{index}:HttpBindings
(array)Deployments:{index}:HttpBindings:{index}:Cidr
(string)Deployments:{index}:HttpBindings:{index}:Metadata
(string)Deployments:{index}:HttpBindings:{index}:Port
(integer, required)Deployments:{index}:HttpBindings:{index}:Scope:Admin
(boolean)Deployments:{index}:HttpBindings:{index}:Scope:Sync
(boolean)
Deployments:{index}:HttpsBindings
(array)Deployments:{index}:HttpsBindings:{index}:CertificateTag
(string)Deployments:{index}:HttpsBindings:{index}:Cidr
(string)Deployments:{index}:HttpsBindings:{index}:Metadata
(string)Deployments:{index}:HttpsBindings:{index}:Port
(integer, required)Deployments:{index}:HttpsBindings:{index}:Scope:Admin
(boolean)Deployments:{index}:HttpsBindings:{index}:Scope:Sync
(boolean)
Deployments:{index}:LogAggregation:Enabled
(boolean)Deployments:{index}:LogAggregation:Window
(integer, milliseconds)Deployments:{index}:LogAggregation:Threshold
(integer)Deployments:{index}:LogOverrides
(array)Deployments:{index}:LogOverrides:{index}:Scope:Gateway
(boolean)Deployments:{index}:LogOverrides:{index}:Scope:MediaServer
(boolean)Deployments:{index}:LogOverrides:{index}:Level
(enum, required)Verbose
,Debug
,Info
,Warn
,Error
,Fatal
Deployments:{index}:LogOverrides:{index}:Metadata
(string)Deployments:{index}:LogOverrides:{index}:Scope:SipConnector
(boolean)Deployments:{index}:LogOverrides:{index}:Tag
(string, required)
Deployments:{index}:LogTargets
(array)Deployments:{index}:LogTargets:{index}:Scope:Gateway
(boolean)Deployments:{index}:LogTargets:{index}:Level
(enum, required)Verbose
,Debug
,Info
,Warn
,Error
,Fatal
Deployments:{index}:LogTargets:{index}:Metadata
(string)Deployments:{index}:LogTargets:{index}:Parameters:{name}
(dictionary)Deployments:{index}:LogTargets:{index}:Scope:MediaServer
(boolean)Deployments:{index}:LogTargets:{index}:Scope:SipConnector
(boolean)Deployments:{index}:LogTargets:{index}:Type
(enum, required)Console
Syslog
- Required parameters:
target
(string)
- Required parameters:
Logstash
- Required parameters:
address
(string)port
(integer)
- Optional parameters:
secure
(boolean)
- Required parameters:
CloudWatch
- Required parameters:
region
(string)logGroup
(string)
- Optional parameters:
accessKey
(string)secretKey
(string)profileName
(string)profilePath
(string)
- Credential search is:
accessKey
/secretKey
, then...profileName
/profilePath
, then...- introspective discovery
- Required parameters:
File
- Optional parameters:
path
(string)
- Optional parameters:
Json
Deployments:{index}:MaxIcePort
(integer)Deployments:{index}:MaxTurnPort
(integer)Deployments:{index}:Metadata
(string)Deployments:{index}:MinIcePort
(integer)Deployments:{index}:MinTurnPort
(integer)Deployments:{index}:PreferNonHostClientIceCandidates
(boolean)Deployments:{index}:PublicHostnameTemplate
(string)Deployments:{index}:PublicHostnameTemplateIPv6
(string)Deployments:{index}:RateLimit:Enabled
(boolean)Deployments:{index}:RateLimit:Sync:Enabled
(boolean)Deployments:{index}:RateLimit:Sync:Policies
(array)Deployments:{index}:RateLimit:Sync:Policies:{index}:Cidr
(string)Deployments:{index}:RateLimit:Sync:Policies:{index}:Enabled
(boolean)Deployments:{index}:RateLimit:Sync:Policies:{index}:Name
(string, required)Deployments:{index}:RateLimit:Sync:Policies:{index}:Rules
(array)Deployments:{index}:RateLimit:Sync:Policies:{index}:Rules:{index}:Limit
(integer, required)Deployments:{index}:RateLimit:Sync:Policies:{index}:Rules:{index}:Period
(integer, required)
Deployments:{index}:RecordingManagement:AmqpUri
(string)Deployments:{index}:RecordingManagement:Enabled
(boolean)Deployments:{index}:RecordingManagement:ExpiryDays
(integer)Deployments:{index}:RecordingManagement:MoveEnabled
(boolean)Deployments:{index}:RecordingManagement:MuxEnabled
(boolean)Deployments:{index}:RecordingManagement:MuxParams:AudioCodec
(string)Deployments:{index}:RecordingManagement:MuxParams:BackgroundColor
(string)Deployments:{index}:RecordingManagement:MuxParams:Crop
(boolean)Deployments:{index}:RecordingManagement:MuxParams:CustomLayoutFunction
(string)Deployments:{index}:RecordingManagement:MuxParams:Dynamic
(boolean)Deployments:{index}:RecordingManagement:MuxParams:FrameRate
(integer)Deployments:{index}:RecordingManagement:MuxParams:Height
(integer)Deployments:{index}:RecordingManagement:MuxParams:Layout
(enum)Deployments:{index}:RecordingManagement:MuxParams:Margin
(integer)Deployments:{index}:RecordingManagement:MuxParams:AudioContainer
(string)Deployments:{index}:RecordingManagement:MuxParams:VideoCodec
(string)Deployments:{index}:RecordingManagement:MuxParams:VideoContainer
(string)Deployments:{index}:RecordingManagement:MuxParams:Width
(integer)Deployments:{index}:RecordingManagement:PostgresUri
(string)Deployments:{index}:RecordingManagement:S3:AccessKey
(string)Deployments:{index}:RecordingManagement:S3:BucketName
(string)Deployments:{index}:RecordingManagement:S3:Endpoint
(string)Deployments:{index}:RecordingManagement:S3:Prefix
(string)Deployments:{index}:RecordingManagement:S3:Region
(string)Deployments:{index}:RecordingManagement:S3:SecretKey
(string)Deployments:{index}:RecordingPath
(string)Deployments:{index}:RecordingStrategy
(enum)HierarchicalDirectories
,FlatDirectory
Deployments:{index}:ServiceBaseUrl
(string)Deployments:{index}:ServiceStatsInterval
(integer)Deployments:{index}:SessionLimit:Enabled
(boolean)Deployments:{index}:SessionLimit:MaxSessionDuration
(long)Deployments:{index}:SfuSimulcast:SimulcastAllowed
(boolean)Deployments:{index}:SfuSimulcast:SimulcastEnabled
(boolean)Deployments:{index}:SfuSimulcast:MaxNumberPublishers
(integer)Deployments:{index}:SfuSimulcast:EncodingCount
(integer)Deployments:{index}:SfuSimulcast:DegradationPreference
(enum)Automatic
,Balanced
,FrameRate
,Resolution
Deployments:{index}:SfuSimulcast:ManualEncodings
(array)Deployments:{index}:SfuSimulcast:ManualEncodings:{index}:FrameRateScale
(double)Deployments:{index}:SfuSimulcast:ManualEncodings:{index}:ResolutionScale
(double)
Deployments:{index}:SipInboundCancelWebhookUrl
(string)Deployments:{index}:SipInboundWebhookUrl
(string)Deployments:{index}:SipOutboundWebhook:ExcludeSipTrunks
(boolean)Deployments:{index}:SipOutboundWebhookUrl
(string)Deployments:{index}:SipServerPort
(integer)Deployments:{index}:SipTrunks
(array)Deployments:{index}:SipTrunks:{index}:AuthId
(string)Deployments:{index}:SipTrunks:{index}:CanTerminate
(boolean)Deployments:{index}:SipTrunks:{index}:DefaultRegisterExpiry
(integer)Deployments:{index}:SipTrunks:{index}:Domain
(string, required)Deployments:{index}:SipTrunks:{index}:Metadata
(string)Deployments:{index}:SipTrunks:{index}:OutboundProxy
(string)Deployments:{index}:SipTrunks:{index}:Password
(string)Deployments:{index}:SipTrunks:{index}:Register
(boolean)Deployments:{index}:SipTrunks:{index}:Transport
(enum, required)Udp
,Tcp
,Tls
Deployments:{index}:SipTrunks:{index}:Username
(string)
Deployments:{index}:ThresholdEncodingRequirements
(array)Deployments:{index}:ThresholdEncodingRequirements:{index}:Encoding:Width
(integer)Deployments:{index}:ThresholdEncodingRequirements:{index}:Encoding:Height
(integer)Deployments:{index}:ThresholdEncodingRequirements:{index}:Encoding:FrameRate
(integer)Deployments:{index}:ThresholdEncodingRequirements:{index}:Encoding:Bitrate
(integer)Deployments:{index}:ThresholdEncodingRequirements:{index}:SfuDownstream
(integer)Deployments:{index}:ThresholdEncodingRequirements:{index}:SfuUpstream
(integer)Deployments:{index}:ThresholdEncodingRequirements:{index}:McuUpstream
(integer)Deployments:{index}:ThresholdEncodingRequirements:{index}:McuDownstream
(integer)Deployments:{index}:ThresholdEncodingRequirements:{index}:SfuUpstreamSimulcastTwo
(integer)
Deployments:{index}:TurnBindings
(array)Deployments:{index}:TurnBindings:{index}:Protocol
(enum, required)Udp
,Tcp
Deployments:{index}:TurnBindings:{index}:Cidr
(string)Deployments:{index}:TurnBindings:{index}:Metadata
(string)Deployments:{index}:TurnBindings:{index}:Port
(integer, required)
Deployments:{index}:TurnsBindings
(array)Deployments:{index}:TurnsBindings:{index}:CertificateTag
(string)Deployments:{index}:TurnsBindings:{index}:Cidr
(string)Deployments:{index}:TurnsBindings:{index}:Metadata
(string)Deployments:{index}:TurnsBindings:{index}:Port
(integer, required)
Deployments:{index}:Webhooks
(array)Deployments:{index}:Webhooks:{index}:Batch
(boolean)Deployments:{index}:Webhooks:{index}:Disabled
(boolean)Deployments:{index}:Webhooks:{index}:Events
(string array, required)Deployments:{index}:Webhooks:{index}:Metadata
(string)Deployments:{index}:Webhooks:{index}:Name
(string)Deployments:{index}:Webhooks:{index}:Reliable
(boolean)Deployments:{index}:Webhooks:{index}:Url
(string, required)
Deployments:{index}:WebSocketMediaServerConnectionsAllowed
(boolean)Deployments:{index}:WebSocketMediaServerUrl
(boolean)Deployments:{index}:WebSocketMediaServerPort
(boolean)