deployment: Infrastructure changes to allow coturn in media nodes

pull/715/head
cruizba 2022-04-25 01:42:51 +02:00
parent 1ee4a9be10
commit 42ad7bce5d
7 changed files with 44 additions and 25 deletions

View File

@ -48,6 +48,9 @@ services:
- OPENVIDU_PRO_CLUSTER=true
- OPENVIDU_PRO_KIBANA_HOST=${OPENVIDU_PRO_KIBANA_HOST:-http://127.0.0.1/kibana}
- OPENVIDU_PRO_ELASTICSEARCH_HOST=${OPENVIDU_PRO_ELASTICSEARCH_HOST:-http://127.0.0.1:9200}
- OPENVIDU_PRO_COTURN_IN_MEDIA_NODES=${OPENVIDU_PRO_COTURN_IN_MEDIA_NODES:-false}
- OPENVIDU_PRO_COTURN_PORT_MEDIA_NODES=${OPENVIDU_PRO_COTURN_PORT_MEDIA_NODES:-443}
- OPENVIDU_PRO_COTURN_PUBLIC_IP_AUTODISCOVER=${OPENVIDU_PRO_COTURN_PUBLIC_IP_AUTODISCOVER:-auto-ipv4}
- WAIT_KIBANA_URL=${OPENVIDU_PRO_KIBANA_HOST:-http://127.0.0.1/kibana}
- DOTENV_PATH=${PWD}
- SUPPORT_DEPRECATED_API=false

View File

@ -669,6 +669,22 @@ Resources:
FromPort: 22
ToPort: 22
CidrIpv6: ::/0
- IpProtocol: tcp
FromPort: 443
ToPort: 443
CidrIp: 0.0.0.0/0
- IpProtocol: tcp
FromPort: 443
ToPort: 443
CidrIpv6: ::/0
- IpProtocol: udp
FromPort: 443
ToPort: 443
CidrIp: 0.0.0.0/0
- IpProtocol: udp
FromPort: 443
ToPort: 443
CidrIpv6: ::/0
- IpProtocol: tcp
FromPort: 3000
ToPort: 3000

View File

@ -27,6 +27,7 @@ services:
- METRICBEAT_IMAGE=docker.elastic.co/beats/metricbeat-oss:7.8.0
- FILEBEAT_IMAGE=docker.elastic.co/beats/filebeat-oss:7.8.0
- OPENVIDU_RECORDING_IMAGE=openvidu/openvidu-recording:2.19.0
- COTURN_IMAGE=openvidu/openvidu-coturn:7.0.0-dev1
- NO_COLOR=true
ports:
- 3000:3000

View File

@ -12,6 +12,7 @@ IMAGES=(
"docker.elastic.co/beats/metricbeat"
"openvidu/media-node-controller"
"openvidu/mediasoup-controller"
"openvidu/openvidu-coturn"
)
# Support docker compose v1 and v2
@ -247,11 +248,13 @@ upgrade_media_node() {
METRICBEAT_IMAGE="$(grep METRICBEAT_IMAGE docker-compose.yml | cut -d"=" -f2)"
FILEBEAT_IMAGE="$(grep FILEBEAT_IMAGE docker-compose.yml | cut -d"=" -f2)"
OPENVIDU_RECORDING_IMAGE="$(grep OPENVIDU_RECORDING_IMAGE docker-compose.yml | cut -d"=" -f2)"
COTURN_IMAGE="$(grep COTURN_IMAGE docker-compose.yml | cut -d"=" -f2)"
docker pull "$KMS_IMAGE" || fatal "Error while pulling docker image: $KMS_IMAGE"
docker pull "$MEDIASOUP_IMAGE" || fatal "Error while pulling docker image: $MEDIASOUP_IMAGE"
docker pull "$METRICBEAT_IMAGE" || fatal "Error while pulling docker image: $METRICBEAT_IMAGE"
docker pull "$FILEBEAT_IMAGE" || fatal "Error while pulling docker image: $FILEBEAT_IMAGE"
docker pull "$OPENVIDU_RECORDING_IMAGE" || fatal "Error while pulling docker image: $OPENVIDU_RECORDING_IMAGE"
docker pull "$COTURN_IMAGE" || fatal "Error while pulling docker image: $COTURN_IMAGE"
docker-compose pull || true
printf '\n => Stopping Media Node...'

View File

@ -18,6 +18,7 @@ IMAGES=(
"docker.elastic.co/beats/metricbeat"
"openvidu/media-node-controller"
"openvidu/mediasoup-controller"
"openvidu/openvidu-coturn"
)
docker_command_by_container_image() {

View File

@ -47,6 +47,9 @@ services:
- OPENVIDU_PRO_ELASTICSEARCH_HOST=${OPENVIDU_PRO_ELASTICSEARCH_HOST:-http://127.0.0.1:9200}
- WAIT_KIBANA_URL=${OPENVIDU_PRO_KIBANA_HOST:-http://127.0.0.1/kibana}
- DOTENV_PATH=${PWD}
- OPENVIDU_PRO_COTURN_IN_MEDIA_NODES=${OPENVIDU_PRO_COTURN_IN_MEDIA_NODES:-false}
- OPENVIDU_PRO_COTURN_PORT_MEDIA_NODES=${OPENVIDU_PRO_COTURN_PORT_MEDIA_NODES:-443}
- OPENVIDU_PRO_COTURN_PUBLIC_IP_AUTODISCOVER=${OPENVIDU_PRO_COTURN_PUBLIC_IP_AUTODISCOVER:-auto-ipv4}
logging:
options:
max-size: "${DOCKER_LOGS_MAX_SIZE:-100M}"

View File

@ -160,14 +160,9 @@ public class OpenviduConfig {
private Integer openviduStreamsVideoMinSendBandwidth;
/**
* Map which relates used Coturn IP per Media Node.
* Depending on which media node will be used for the session,
* a coturn IP should be sent to the browser and Kurento.
*/
private ConcurrentHashMap<String, String> mapKmsUriCoturnIp = new ConcurrentHashMap<>();
protected String coturnIp;
private int coturnPort;
protected int coturnPort;
private String coturnSharedSecretKey;
@ -341,7 +336,7 @@ public class OpenviduConfig {
}
public String getCoturnIp(String kmsUri) {
return this.mapKmsUriCoturnIp.get(kmsUri);
return this.coturnIp;
}
public int getCoturnPort() {
@ -623,8 +618,7 @@ public class OpenviduConfig {
kmsUrisList = checkKmsUris();
checkCoturnIp();
checkCoturnPort();
coturnPort = checkPort("COTURN_PORT");
checkWebhook();
@ -647,30 +641,28 @@ public class OpenviduConfig {
}
private void checkCoturnIp() {
if (this.getKmsUris().isEmpty()) {
throw new IllegalArgumentException("'KMS_URIS' should contain at least one KMS url");
}
String firstKmsWsUri = this.getKmsUris().get(0);
String property = "COTURN_IP";
String coturnIp = asOptionalIPv4OrIPv6(property);
if (coturnIp == null || coturnIp.isEmpty()) {
coturnIp = checkIp(property);
if (coturnIp == null || this.coturnIp.isEmpty()) {
try {
coturnIp = new URL(this.getFinalUrl()).getHost();
this.mapKmsUriCoturnIp.put(firstKmsWsUri, coturnIp);
this.coturnIp = new URL(this.getFinalUrl()).getHost();
} catch (MalformedURLException e) {
log.error("Can't get Domain name from OpenVidu public Url: " + e.getMessage());
}
} else {
this.mapKmsUriCoturnIp.put(firstKmsWsUri, coturnIp);
}
}
private void checkCoturnPort() {
String property = "COTURN_PORT";
coturnPort = this.asNonNegativeInteger(property);
if (coturnPort <= 0 || coturnPort > 65535) {
addError("COTURN_PORT", "COTURN PORT is out of valid ports range (0-65535)");
protected String checkIp(String property) {
return asOptionalIPv4OrIPv6(property);
}
protected int checkPort(String property) {
int port = this.asNonNegativeInteger(property);
if (port <= 0 || port > 65535) {
addError(property, property + " is out of valid ports range (0-65535)");
}
return port;
}
private void checkWebhook() {