Merge pull request #1027 from edumeet/develop

version 3.5.4
This commit is contained in:
Rémai Gábor 2022-11-02 17:03:08 +01:00 committed by GitHub
commit 272b92919c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 154 additions and 37 deletions

View file

@ -248,7 +248,7 @@ sudo systemctl enable edumeet
## Load balanced installation
To deploy this as a load balanced cluster, have a look at [HAproxy](HAproxy.md).
To deploy this as a load balanced cluster, have a look at [HAproxy](/docs/HAproxy.md).
## Learning management integration

View file

@ -43,7 +43,7 @@
"is-electron": "^2.2.0",
"marked": "^0.8.0",
"material-ui-popup-state": "^1.8.0",
"mediasoup-client": "^3.6.47",
"mediasoup-client": "^3.6.55",
"notistack": "^0.9.5",
"prop-types": "^15.7.2",
"random-string": "^0.2.0",

View file

@ -7,6 +7,7 @@
content='width=device-width, initial-scale=1, shrink-to-fit=no'
/>
<meta name='description' content='edumeet - Simple web meetings'>
<meta name="keywords" content="edumeet,letsmeet,multiparty,videoconference,meet,WebRTC,room,rooms,geant,video conferencing, video conference, online meetings, web meeting, video meeting, cloud meeting, cloud video, group video call, group video chat, screen share, application share, mobility, mobile collaboration, desktop share, video collaboration">
<meta name='theme-color' content='#000000' />
<link rel='preconnect' href='https://fonts.googleapis.com/css?family=Roboto' rel='stylesheet'>

View file

@ -4283,7 +4283,7 @@ export default class RoomClient
try
{
const device = this._webcams[videoDeviceId];
const { resolution, aspectRatio } = store.getState().settings;
const { resolution, aspectRatio, frameRate } = store.getState().settings;
if (!device)
throw new Error('no webcam devices');
@ -4293,7 +4293,8 @@ export default class RoomClient
video :
{
deviceId : { ideal: videoDeviceId },
...getVideoConstrains(resolution, aspectRatio)
...getVideoConstrains(resolution, aspectRatio),
frameRate
}
});

View file

@ -349,21 +349,32 @@ const Peer = (props) =>
{
const handler = setTimeout(() =>
{
const consumer = webcamConsumer || screenConsumer;
const consumers = [];
if (!consumer)
return;
if (webcamConsumer)
consumers.push(webcamConsumer);
if (windowConsumer === consumer.id)
if (screenConsumer)
consumers.push(screenConsumer);
extraVideoConsumers.map((consumer) =>
{
// if playing in external window, set the maximum quality levels
roomClient.setConsumerPreferredLayersMax(consumer);
}
else if (enableLayersSwitch && consumer?.type !== 'simple'
&& fullScreenConsumer !== consumer.id)
consumers.push(consumer);
});
consumers.forEach((consumer) =>
{
roomClient.adaptConsumerPreferredLayers(consumer, width, height);
}
if (windowConsumer === consumer.id)
{
// if playing in external window, set the maximum quality levels
roomClient.setConsumerPreferredLayersMax(consumer);
}
else if (enableLayersSwitch && consumer?.type !== 'simple'
&& fullScreenConsumer !== consumer.id)
{
roomClient.adaptConsumerPreferredLayers(consumer, width, height);
}
});
}, 1000);
return () => { clearTimeout(handler); };
@ -371,6 +382,7 @@ const Peer = (props) =>
enableLayersSwitch,
webcamConsumer,
screenConsumer,
extraVideoConsumers,
windowConsumer,
fullScreenConsumer,
roomClient, width, height

View file

@ -437,6 +437,7 @@ class VideoView extends React.PureComponent
localRecordingState==='resume'
)&&
(
recordingConsents!==undefined &&
!recordingConsents.includes(peer.id)
)
) ? '':displayName
@ -459,6 +460,7 @@ class VideoView extends React.PureComponent
localRecordingState==='resume'
)&&
(
recordingConsents!==undefined &&
!recordingConsents.includes(peer.id)
)
)

View file

@ -1,6 +1,6 @@
FROM node:14-buster-slim
RUN apt-get update && \
apt-get install -y git build-essential python pkg-config libssl-dev && \
apt-get install -y git build-essential python pkg-config libssl-dev python3-pip && \
apt-get clean
WORKDIR /edumeet
ENV DEBUG=edumeet*,mediasoup*

View file

@ -64,13 +64,17 @@ OR
### Server config
mm/configs/server/config.js
``` js
redisOptions : { host: '192.0.2.4'},
listeningPort: 80,
httpOnly: true,
trustProxy : ['192.0.2.5'],
config.yaml
``` yaml
turnAPIKey : "<key>"
turnAPIURI : "<turn url>"
listeningPort : 80
httpOnly : true
trustProxy : "192.0.2.5"
redisOptions:
host: "192.0.2.4"
port: "6379"
password: "passwd"
```
## Deploy HA proxy
@ -78,24 +82,121 @@ trustProxy : ['192.0.2.5'],
* Configure certificate / letsencrypt for `meet.example.com`
* In this example we put a complete chain and private key in /root/certificate.pem.
* Install and setup haproxy
```bash
apt install haproxy
```
* Install haproxy 2.2 (recommended)
``` bash
sudo apt-get install gnupg2 curl -y
curl https://haproxy.debian.net/bernat.debian.org.gpg | sudo apt-key add -
echo deb http://haproxy.debian.net buster-backports-2.2 main | sudo tee /etc/apt/sources.list.d/haproxy.list
sudo apt-get update
apt-get install haproxy=2.2.\*
`apt install haproxy`
sudo systemctl start haproxy
sudo systemctl enable haproxy
```
* Add to /etc/haproxy/haproxy.cfg config
``` plaintext
backend edumeet
balance url_param roomId
hash-type consistent
server mm1 192.0.2.1:80 check maxconn 2000 verify none
server mm2 192.0.2.2:80 check maxconn 2000 verify none
server mm3 192.0.2.3:80 check maxconn 2000 verify none
global
# mult thread setup
nbproc 1
nbthread 4
cpu-map auto:1/1-4 0-3
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
stats socket /run/haproxy.sock mode 660 level admin
stats timeout 30s
user haproxy
group haproxy
daemon
# Default SSL material locations
ca-base /etc/ssl/certs
crt-base /etc/ssl/private
# Default ciphers to use on SSL-enabled listening sockets.
# For more information, see ciphers(1SSL). This list is from:
# https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
# An alternative list with additional directives can be obtained from
# https://mozilla.github.io/server-side-tls/ssl-config-generator/?server=haproxy
ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS
ssl-default-bind-options no-sslv3
tune.ssl.default-dh-param 2048
maxconn 20000
defaults
log global
mode http
option httplog
#option logasap
#option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http
maxconn 8192
backend letsmeet-room-backend
fullconn 4000
balance url_param roomId
hash-type consistent
stick-table type string len 1024 size 100k expire 8h
stick store-request url_param(roomId)
stick match url_param(roomId)
stick match url_param(state),url_dec,b64dec,field(8,'\"')
server edumeet1 192.0.2.1:80 check maxconn 2000 verify none
server edumeet2 192.0.2.2:80 check maxconn 1000 verify none
server edumeet3 192.0.2.3:80 check maxconn 1000 verify none
backend letsmeet-backend
fullconn 4000
balance leastconn
stick-table type ip size 200k expire 30m
stick on src
hash-type consistent
server edumeet1 192.0.2.1:80 check maxconn 2000 verify none
server edumeet2 192.0.2.2:80 check maxconn 1000 verify none
server edumeet3 192.0.2.3:80 check maxconn 1000 verify none
frontend letsmeet
bind *:80
bind*:443 ssl crt /etc/ssl/edumeet.example.com/edumeet.example.com.pem alpn h2,http/1.1
http-request redirect scheme https if !{ ssl_fc }
http-request add-header X-Forwarded-Proto https
stats enable
stats uri /static/stats
#stats hide-version
stats refresh 10s
stats admin if TRUE
#stats admin if LOCALHOST
stats realm Haproxy\ Statistics
stats auth admin:password
maxconn 6000
acl roomId-acl url_param(roomId) -m found
acl callback-acl path_beg /auth/callback
use_backend letsmeet-room-backend if roomId-acl || callback-acl
default_backend letsmeet-backend
frontend meet.example.com
bind 192.0.2.5:80
bind 192.0.2.5:443 ssl crt /root/certificate.pem
http-request redirect scheme https unless { ssl_fc }
reqadd X-Forwarded-Proto:\ https
default_backend edumeet
```
* Creating cert with letsencrypt :
``` bash
sudo cat /etc/letsencrypt/live/edumeet.example.com/fullchain.pem /etc/letsencrypt/live/edumeet.example.com/privkey.pem | sudo tee /etc/ssl/edumeet.example.com/edumeet.example.com.pem
```

View file

@ -43,7 +43,7 @@
"ims-lti": "^3.0.2",
"json5": "^2.2.0",
"jsonwebtoken": "^8.5.1",
"mediasoup": "3.9.6",
"mediasoup": "3.10.5",
"openid-client": "^3.7.3",
"passport": "^0.4.0",
"passport-local": "^1.0.0",