puthli / breakout-rooms

Breakout-rooms add-on to to the Jitsi Meet and Jitsi Videobridge projects.
Apache License 2.0
17 stars 8 forks source link

Breakout rooms without docker #1

Open pratik9722 opened 3 years ago

pratik9722 commented 3 years ago

If you can provide a guide for how we can add breakout rooms in Jitsi without docker then it is awesome!

idandr commented 3 years ago

I tried to install breakout rooms without docker and finally it works as intended. Maybe my installation steps help someone else.

Migrate away from multiplexing

If not already done, migrate away from multiplexing where steps 1 and 2 are necessary (bridge websockets are not used here, I had to roll back the other steps because of errors while moving users between rooms, may be caused by missing changes on our second videobridge).

root@jitsi:~# ls -l /etc/nginx/modules-enabled/60-jitsi-meet.conf
lrwxrwxrwx 1 root root 48 Apr 14  2020 /etc/nginx/modules-enabled/60-jitsi-meet.conf -> /usr/share/jitsi-meet-turnserver/jitsi-meet.conf
root@jitsi:~# rm /etc/nginx/modules-enabled/60-jitsi-meet.conf 
root@jitsi:~# nano /etc/nginx/sites-available/meeting.example.org.conf
... change port from 4444 to 443

In contrast to the FAQ entry, I did not change TURN TLS "turns" port to 5349 (might have other effects in our environment).

In /etc/prosody/conf.avail/meeting.example.org.cfg.lua change

  { type = "turns", host = "meeting.example.org", port = "443", transport = "tcp" }

to

{ type = "turns", host = "meeting.example.org", port = "4445", transport = "tcp" }

Activate changes:

# systemctl restart jitsi-videobridge2
# systemctl restart nginx

URL consolidation

Steps in this chapter are done for all files in public/.

The next point is optional. The URLs used later must be changed, if you do skip this change.

Re-Branding (optional)

Since "WURK.APP" seams to be the brand for the planned commercial service, I re-branded it to "Jitsi breakout rooms".

Changes in server.js

Jitsi configuration

Changes in additional-config/interface_config.js and additional-config/config.js are not relevant, so I ignored them. Changes in additional-config/nginx/meet.conf contain no changes that are necessary in our Jitsi installation. Content of additional-config/nginx/websocket.conf and additional-config/site-confs/default was merged and added to our version of /etc/nginx/sites-available/meeting.example.org.conf (added before block with location = /external_api.js):

    # local addition for breakout rooms
    location = /br/ {
        proxy_pass http://127.0.0.1:7777/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_set_header Host $host;
    }

Now test the changed nginx configuration and, if OK, use it.

# nginx -t
# systemctl restart nginx

Install server files

For jQuery (in public/js) a security update is available - used it. Get the new version (wget https://code.jquery.com/jquery-3.6.0.slim.min.js), remove the old one (rm jquery-3.4.1.slim.min.js) and update src references in the files public/*.html.

I installed the server under the new directory /usr/local/share/breakout-rooms/. You may use another path.

Install Node.js (Debian)

Installation is based on https://github.com/nodesource/distributions, chapter "Manual Installation" for a Debian system.

End-of-Life for version 10, used in Debian buster, is on 2021-04-30. So we use a more recent and supported version. For Node.js every even numbered version gets LTS and maintenance support (ends 2023-04-30 for version 14).

Get the repository key:

# wget -O - https://deb.nodesource.com/gpgkey/nodesource.gpg.key > /etc/apt/trusted.gpg.d/local.nodesource.asc

Add a new file /etc/apt/sources.list.d/nodesource.list with the following content:

# nodejs for Jitsi breakout rooms
deb https://deb.nodesource.com/node_14.x buster main
deb-src https://deb.nodesource.com/node_14.x buster main

Install Node.js package:

# apt-get update
# apt-get install nodejs

Install Node.js modules

I do not use a global installation for Node.js modules. We want to install all necessary files under /usr/local/share/breakout-rooms and run the installation (and the server later on) as user www-data (you may use another user).

root@jitsi:/usr/local/share/breakout-rooms# chown -R www-data:www-data .
root@jitsi:/usr/local/share/breakout-rooms# sudo -u www-data nano package.json
root@jitsi:/usr/local/share/breakout-rooms# sudo -u www-data cat package.json
{
  "dependencies": {
    "request": "",
    "ws": "",
    "express": "",
    "express-ws": ""
  }
}
root@jitsi:/usr/local/share/breakout-rooms# sudo -u www-data HOME=/usr/local/share/breakout-rooms /usr/bin/npm install

Start the server

Try to start the server a first time (in the foreground):

root@jitsi:/usr/local/share/breakout-rooms# sudo -u www-data /usr/bin/node server.js 

If this works, add it to your systemd configuration. Create the new file /etc/systemd/system/breakout-rooms.service with the following content:

[Unit]
Description=Breakout rooms server for Jitsi
Documentation=https://github.com/puthli/breakout-rooms
After=network.target

[Service]
Type=simple
User=www-data
ExecStart=/usr/bin/nodejs /usr/local/share/breakout-rooms/server.js
Restart=on-failure

[Install]
WantedBy=multi-user.target

Stop the server if it is still running in the foreground and activate the server in systemd:

# systemctl daemon-reload
# systemctl start hello_env
# systemctl enable hello_env

Use breakout rooms

The moderator page should now be reachable under https://meeting.example.org/br/moderator.html.

index.html seams to be a wrapper around Jitsi without breakout room functionality.

BammyT1011 commented 3 years ago

how did u implement the breakout room on jitsi-meet code

idandr commented 3 years ago

Hi @BammyT1011 in case your question is put on me, could you give a more precise description what your question is?

gigabyteservice commented 3 years ago

@idandr probably he is thinking that you have made the changes in Jitsi-meet lib-jitsi-meet jicofo & Created prosody module etc & he needs a source code & it's changes through commit so he can add this in the his Jitsi.

idandr commented 3 years ago

OK, if that's the question - it is not that complex. With the solution for breakout rooms provided by this repository jitsi-meet is embedded in an iframe and nothing had to be changed in the code of jitsi-meet etc. It's a wrapper around an existing Jitsi installation.

There are two existing configuration files (prosody, nginx) of your Jitsi installation that have to be edited for integration. Plus installation of Node.js (and some of its modules) plus download and editing of (some) files from this repository.

BammyT1011 commented 3 years ago

@idandr Then how do i go about it on my jitsi code????? kindly outline the step by step instruction