mirror of https://github.com/OpenVidu/openvidu.git
deployment: Infrastructure changes to allow coturn in media nodes
parent
1ee4a9be10
commit
42ad7bce5d
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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...'
|
||||||
|
|
|
@ -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() {
|
||||||
|
|
|
@ -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}"
|
||||||
|
|
|
@ -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() {
|
||||||
|
|
Loading…
Reference in New Issue