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_CLUSTER=true
- OPENVIDU_PRO_KIBANA_HOST=${OPENVIDU_PRO_KIBANA_HOST:-http://127.0.0.1/kibana} - 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_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} - WAIT_KIBANA_URL=${OPENVIDU_PRO_KIBANA_HOST:-http://127.0.0.1/kibana}
- DOTENV_PATH=${PWD} - DOTENV_PATH=${PWD}
- SUPPORT_DEPRECATED_API=false - SUPPORT_DEPRECATED_API=false

View File

@ -669,6 +669,22 @@ Resources:
FromPort: 22 FromPort: 22
ToPort: 22 ToPort: 22
CidrIpv6: ::/0 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 - IpProtocol: tcp
FromPort: 3000 FromPort: 3000
ToPort: 3000 ToPort: 3000

View File

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

View File

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

View File

@ -18,6 +18,7 @@ IMAGES=(
"docker.elastic.co/beats/metricbeat" "docker.elastic.co/beats/metricbeat"
"openvidu/media-node-controller" "openvidu/media-node-controller"
"openvidu/mediasoup-controller" "openvidu/mediasoup-controller"
"openvidu/openvidu-coturn"
) )
docker_command_by_container_image() { 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} - 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} - WAIT_KIBANA_URL=${OPENVIDU_PRO_KIBANA_HOST:-http://127.0.0.1/kibana}
- DOTENV_PATH=${PWD} - 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: logging:
options: options:
max-size: "${DOCKER_LOGS_MAX_SIZE:-100M}" max-size: "${DOCKER_LOGS_MAX_SIZE:-100M}"

View File

@ -160,14 +160,9 @@ public class OpenviduConfig {
private Integer openviduStreamsVideoMinSendBandwidth; private Integer openviduStreamsVideoMinSendBandwidth;
/** protected String coturnIp;
* 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<>();
private int coturnPort; protected int coturnPort;
private String coturnSharedSecretKey; private String coturnSharedSecretKey;
@ -341,7 +336,7 @@ public class OpenviduConfig {
} }
public String getCoturnIp(String kmsUri) { public String getCoturnIp(String kmsUri) {
return this.mapKmsUriCoturnIp.get(kmsUri); return this.coturnIp;
} }
public int getCoturnPort() { public int getCoturnPort() {
@ -623,8 +618,7 @@ public class OpenviduConfig {
kmsUrisList = checkKmsUris(); kmsUrisList = checkKmsUris();
checkCoturnIp(); checkCoturnIp();
coturnPort = checkPort("COTURN_PORT");
checkCoturnPort();
checkWebhook(); checkWebhook();
@ -647,30 +641,28 @@ public class OpenviduConfig {
} }
private void checkCoturnIp() { 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 property = "COTURN_IP";
String coturnIp = asOptionalIPv4OrIPv6(property); coturnIp = checkIp(property);
if (coturnIp == null || coturnIp.isEmpty()) {
if (coturnIp == null || this.coturnIp.isEmpty()) {
try { try {
coturnIp = new URL(this.getFinalUrl()).getHost(); this.coturnIp = new URL(this.getFinalUrl()).getHost();
this.mapKmsUriCoturnIp.put(firstKmsWsUri, coturnIp);
} catch (MalformedURLException e) { } catch (MalformedURLException e) {
log.error("Can't get Domain name from OpenVidu public Url: " + e.getMessage()); log.error("Can't get Domain name from OpenVidu public Url: " + e.getMessage());
} }
} else {
this.mapKmsUriCoturnIp.put(firstKmsWsUri, coturnIp);
} }
} }
private void checkCoturnPort() { protected String checkIp(String property) {
String property = "COTURN_PORT"; return asOptionalIPv4OrIPv6(property);
coturnPort = this.asNonNegativeInteger(property);
if (coturnPort <= 0 || coturnPort > 65535) {
addError("COTURN_PORT", "COTURN PORT is out of valid ports range (0-65535)");
} }
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() { private void checkWebhook() {