diff --git a/openvidu-server/src/main/java/io/openvidu/server/OpenViduServer.java b/openvidu-server/src/main/java/io/openvidu/server/OpenViduServer.java index 082ce228..ea012912 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/OpenViduServer.java +++ b/openvidu-server/src/main/java/io/openvidu/server/OpenViduServer.java @@ -172,7 +172,7 @@ public class OpenViduServer implements JsonRpcConfigurer { case "local": break; - + case "docker-local": break; @@ -182,13 +182,13 @@ public class OpenViduServer implements JsonRpcConfigurer { int port = url.getPort(); type = "custom"; - + if (publicUrl.startsWith("https://")) { OpenViduServer.publicUrl = publicUrl.replace("https://", "wss://"); } else if (publicUrl.startsWith("http://")) { OpenViduServer.publicUrl = publicUrl.replace("http://", "wss://"); } - + openviduConf.setFinalUrl(url.toString()); if (!OpenViduServer.publicUrl.startsWith("wss://")) { @@ -214,8 +214,9 @@ public class OpenViduServer implements JsonRpcConfigurer { boolean recordingModuleEnabled = openviduConf.isRecordingModuleEnabled(); if (recordingModuleEnabled) { ComposedRecordingService recordingService = context.getBean(ComposedRecordingService.class); - System.out.println( - "Recording module required: Downloading openvidu/openvidu-recording Docker image (800 MB aprox)"); + recordingService.setRecordingVersion(openviduConf.getOpenViduRecordingVersion()); + System.out.println("Recording module required: Downloading openvidu/openvidu-recording:" + + openviduConf.getOpenViduRecordingVersion() + " Docker image (800 MB aprox)"); boolean imageExists = false; try { diff --git a/openvidu-server/src/main/java/io/openvidu/server/config/OpenviduConfig.java b/openvidu-server/src/main/java/io/openvidu/server/config/OpenviduConfig.java index d6fc14d7..1873088e 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/config/OpenviduConfig.java +++ b/openvidu-server/src/main/java/io/openvidu/server/config/OpenviduConfig.java @@ -27,6 +27,9 @@ public class OpenviduConfig { @Value("${openvidu.recording.free-access}") boolean openviduRecordingFreeAccess; + @Value("${openvidu.recording.version}") + String openviduRecordingVersion; + private String finalUrl; public String getOpenViduPublicUrl() { @@ -73,4 +76,8 @@ public class OpenviduConfig { this.finalUrl = finalUrl.endsWith("/") ? (finalUrl) : (finalUrl + "/"); } + public String getOpenViduRecordingVersion() { + return this.openviduRecordingVersion; + } + } diff --git a/openvidu-server/src/main/java/io/openvidu/server/recording/ComposedRecordingService.java b/openvidu-server/src/main/java/io/openvidu/server/recording/ComposedRecordingService.java index b339d2d8..f7fde861 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/recording/ComposedRecordingService.java +++ b/openvidu-server/src/main/java/io/openvidu/server/recording/ComposedRecordingService.java @@ -64,6 +64,7 @@ public class ComposedRecordingService { private Map sessionsRecordings = new ConcurrentHashMap<>(); private final String IMAGE_NAME = "openvidu/openvidu-recording"; + private String IMAGE_TAG; private final String RECORDING_ENTITY_FILE = ".recording."; private DockerClient dockerClient; @@ -192,7 +193,7 @@ public class ComposedRecordingService { public boolean recordingImageExistsLocally() { boolean imageExists = false; try { - dockerClient.inspectImageCmd(IMAGE_NAME).exec(); + dockerClient.inspectImageCmd(IMAGE_NAME + ":" + IMAGE_TAG).exec(); imageExists = true; } catch (NotFoundException nfe) { imageExists = false; @@ -204,15 +205,15 @@ public class ComposedRecordingService { public void downloadRecordingImage() { try { - dockerClient.pullImageCmd(IMAGE_NAME).exec(new PullImageResultCallback()).awaitSuccess(); + dockerClient.pullImageCmd(IMAGE_NAME + ":" + IMAGE_TAG).exec(new PullImageResultCallback()).awaitSuccess(); } catch (NotFoundException | InternalServerErrorException e) { - if (imageExistsLocally(IMAGE_NAME)) { - log.info("Docker image '{}' exists locally", IMAGE_NAME); + if (imageExistsLocally(IMAGE_NAME + ":" + IMAGE_TAG)) { + log.info("Docker image '{}' exists locally", IMAGE_NAME + ":" + IMAGE_TAG); } else { throw e; } } catch (DockerClientException e) { - log.info("Error on Pulling '{}' image. Probably because the user has stopped the execution", IMAGE_NAME); + log.info("Error on Pulling '{}' image. Probably because the user has stopped the execution", IMAGE_NAME + ":" + IMAGE_TAG); throw e; } } @@ -231,7 +232,7 @@ public class ComposedRecordingService { private String runRecordingContainer(List envs, String containerName) { Volume volume1 = new Volume("/recordings"); - CreateContainerCmd cmd = dockerClient.createContainerCmd(IMAGE_NAME).withName(containerName).withEnv(envs) + CreateContainerCmd cmd = dockerClient.createContainerCmd(IMAGE_NAME + ":" + IMAGE_TAG).withName(containerName).withEnv(envs) .withNetworkMode("host").withVolumes(volume1) .withBinds(new Bind(openviduConfig.getOpenViduRecordingPath(), volume1)); CreateContainerResponse container = null; @@ -398,5 +399,9 @@ public class ComposedRecordingService { this.removeDockerContainer(containerId); throw e; } + + public void setRecordingVersion(String version) { + this.IMAGE_TAG = version; + } } diff --git a/openvidu-server/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/openvidu-server/src/main/resources/META-INF/additional-spring-configuration-metadata.json index 10d65ed1..b6c66709 100644 --- a/openvidu-server/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/openvidu-server/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -16,12 +16,12 @@ }, { "name": "openvidu.cdr", - "type": "java.lang.String", + "type": "java.lang.Boolean", "description": "Whether to enable Call Detail Record or not" }, { "name": "openvidu.recording", - "type": "java.lang.String", + "type": "java.lang.Boolean", "description": "Whether to start OpenVidu Server with recording module service available or not (a Docker image will be downloaded during the first execution). Apart from setting this param to true, it is also necessary to explicitly configure sessions to be recorded" }, { @@ -31,7 +31,12 @@ }, { "name": "openvidu.recording.free-access", - "type": "java.lang.String", + "type": "java.lang.Boolean", "description": "'true' to allow free access to the video files specified in 'openviu.recording.path'. 'false' to only allow access to authenticated users" + }, + { + "name": "openvidu.recording.version", + "type": "java.lang.String", + "description": "Tag for openvidu/openvidu-recording Docker image" } ]} \ No newline at end of file diff --git a/openvidu-server/src/main/resources/application-ngrok.properties b/openvidu-server/src/main/resources/application-ngrok.properties index 5c50df58..938fd651 100644 --- a/openvidu-server/src/main/resources/application-ngrok.properties +++ b/openvidu-server/src/main/resources/application-ngrok.properties @@ -10,4 +10,5 @@ openvidu.publicurl: ngrok openvidu.cdr: false openvidu.recording: false openvidu.recording.path: /opt/openvidu/recordings -openvidu.recording.free-access: false \ No newline at end of file +openvidu.recording.free-access: false +openvidu.recording.version: 1.8.0 \ No newline at end of file diff --git a/openvidu-server/src/main/resources/application.properties b/openvidu-server/src/main/resources/application.properties index 15e57dab..754683f0 100644 --- a/openvidu-server/src/main/resources/application.properties +++ b/openvidu-server/src/main/resources/application.properties @@ -1,12 +1,16 @@ -server.port: 8443 server.address: 0.0.0.0 server.ssl.enabled: true +openvidu.recording.version: 1.8.0 + + + +server.port: 8443 server.ssl.key-store: classpath:openvidu-selfsigned.jks server.ssl.key-store-password: openvidu server.ssl.key-store-type: JKS server.ssl.key-alias: openvidu-selfsigned - kms.uris=[\"ws://localhost:8888/kurento\"] + openvidu.secret: MY_SECRET openvidu.publicurl: local openvidu.cdr: false