{"id":1456,"date":"2021-03-16T00:23:55","date_gmt":"2021-03-16T00:23:55","guid":{"rendered":"https:\/\/dft.wiki\/?p=1456"},"modified":"2021-03-25T18:52:51","modified_gmt":"2021-03-25T18:52:51","slug":"video-conferencing-platform-with-jitsi","status":"publish","type":"post","link":"https:\/\/dft.wiki\/?p=1456","title":{"rendered":"Video Conferencing Platform with Jitsi"},"content":{"rendered":"<p>Jitsi [<a href=\"https:\/\/jitsi.org\/\">Link<\/a>] is an open-source Video Conferencing for web and mobile.<\/p>\n<ul>\n<li>HD audio and video;<\/li>\n<li>Unlimited meetings;<\/li>\n<li>Up to 50 participants at a time;<\/li>\n<li>End-to-end encryption;<\/li>\n<li>Simultaneous screen sharing;<\/li>\n<li>Remote control;<\/li>\n<li>Integration with Google, Microsoft, and Slack;<\/li>\n<li>and more.<\/li>\n<\/ul>\n<p><strong>Initial configuration<\/strong><\/p>\n<pre>sudo hostnamectl set-hostname <strong>example.com<\/strong>\r\nsudo nano \/etc\/hosts<\/pre>\n<p>Add the same domain as follows:<\/p>\n<pre>127.0.0.1 localhost <strong>example.com<\/strong><\/pre>\n<p><strong>Firewall<\/strong><\/p>\n<pre>sudo ufw limit 22\r\nsudo ufw allow 80\r\nsudo ufw allow 443\r\nsudo ufw allow 4443\r\nsudo ufw allow 10000\r\nsudo ufw enable\r\nsudo ufw status numbered<\/pre>\n<p><strong>Installing<\/strong><\/p>\n<pre>wget https:\/\/download.jitsi.org\/jitsi-key.gpg.key\r\nsudo apt-key add jitsi-key.gpg.key \r\nsudo echo \"deb https:\/\/download.jitsi.org stable\/\" &gt; \/etc\/apt\/sources.list.d\/jitsi-stable.list\r\nsudo apt update\r\nsudo apt install jitsi-meet -y<\/pre>\n<p>When prompted answer the same domain: <strong>example.com<\/strong><\/p>\n<p>Then select: <strong>Generate a new self-signed certificate<\/strong>.<\/p>\n<p>The certificate will be located at: <strong>\/etc\/jitsi\/meet\/<\/strong><\/p>\n<p>At this point, it is already secure and ready to be used but let&#8217;s move on to create a public certificate.<\/p>\n<p><strong>Install Let&#8217;s Encrypt and Certbot<\/strong><\/p>\n<pre>sudo apt install certbot -y\r\nsudo sed -i 's\/\\.\\\/certbot-auto\/certbot\/g' \/usr\/share\/jitsi-meet\/scripts\/install-letsencrypt-cert.sh\r\nsudo ln -s \/usr\/bin\/certbot \/usr\/sbin\/certbot\r\nsudo \/usr\/share\/jitsi-meet\/scripts\/install-letsencrypt-cert.sh<\/pre>\n<p>Inform your email for getting the reminders when the certificate is about to expire.<\/p>\n<p>Use your browser to get access to the framework: <strong>https:\/\/example.com<\/strong><\/p>\n<p>Right away the server is up and running. Any visitor can create a meeting by giving a name to it:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1547\" src=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/03\/Screenshot-from-2021-03-22-12-29-38.png\" alt=\"\" width=\"887\" height=\"778\" srcset=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/03\/Screenshot-from-2021-03-22-12-29-38.png 887w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/03\/Screenshot-from-2021-03-22-12-29-38-300x263.png 300w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/03\/Screenshot-from-2021-03-22-12-29-38-768x674.png 768w\" sizes=\"auto, (max-width: 887px) 100vw, 887px\" \/><\/p>\n<p>Then copy and share the link on the address bar: https:\/\/example.com\/<strong>firstmeeting<\/strong><\/p>\n<p>Note the name of the meeting appended to the server address.<\/p>\n<p>Workload tests on the server:<\/p>\n<ul>\n<li>I was using the most basic Linode virtual machine: 1vCPU and 1GB RAM.<\/li>\n<li>3 participants with audio and video (Linux, Win10, and Android): CPU utilization around 20%.<\/li>\n<li>Added 1 more participant sharing screen: CPU utilization around 40%.<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1548\" src=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/03\/Screenshot_2021-03-22_12_39_40.png\" alt=\"\" width=\"1920\" height=\"1047\" srcset=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/03\/Screenshot_2021-03-22_12_39_40.png 1920w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/03\/Screenshot_2021-03-22_12_39_40-300x164.png 300w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/03\/Screenshot_2021-03-22_12_39_40-1024x558.png 1024w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/03\/Screenshot_2021-03-22_12_39_40-768x419.png 768w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/03\/Screenshot_2021-03-22_12_39_40-1536x838.png 1536w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/03\/Screenshot_2021-03-22_12_39_40-1200x654.png 1200w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1549\" src=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/03\/Screenshot_2021-03-22_12_43_10.png\" alt=\"\" width=\"1920\" height=\"1048\" srcset=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/03\/Screenshot_2021-03-22_12_43_10.png 1920w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/03\/Screenshot_2021-03-22_12_43_10-300x164.png 300w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/03\/Screenshot_2021-03-22_12_43_10-1024x559.png 1024w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/03\/Screenshot_2021-03-22_12_43_10-768x419.png 768w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/03\/Screenshot_2021-03-22_12_43_10-1536x838.png 1536w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/03\/Screenshot_2021-03-22_12_43_10-1200x655.png 1200w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/p>\n<p><strong>Access Control<\/strong><\/p>\n<p>It will prevent anyone from the internet to create meetings and consume the resources of your server.<\/p>\n<pre>sudo nano \/etc\/prosody\/conf.avail\/<strong>example.com<\/strong>.cfg.lua<\/pre>\n<p>Edit the authentication option:<\/p>\n<pre>...\r\nVirtualHost \"example.com\"\r\n    ...\r\n    authentication = \"<strong>internal_plain<\/strong>\"\r\n...<\/pre>\n<p>This configuration will allow only registered users to create meetings and access them.<\/p>\n<p>If you want to invite participants that are not part of your company (registered users) add at the very bottom of the file the following options:<\/p>\n<pre>VirtualHost \"<strong>guest.example.com<\/strong>\"\r\n    authentication = \"<strong>anonymous<\/strong>\"\r\n    c2s_require_encryption = false<\/pre>\n<p>Do not create the guest subdomain, it is just internal to the Jitsi.<\/p>\n<pre>sudo nano \/etc\/jitsi\/meet\/<strong>example.com<\/strong>-config.js<\/pre>\n<p>Change the &#8220;anonymousdomain&#8221; option accordingly:<\/p>\n<pre>...\r\n    hosts: {\r\n        ...\r\n        domain: 'example.com',\r\n        ...\r\n        anonymousdomain: '<strong>guest.example.com<\/strong>',\r\n...<\/pre>\n<p>Next&#8230;<\/p>\n<pre>sudo nano \/etc\/jitsi\/jicofo\/sip-communicator.properties<\/pre>\n<p>Append:<\/p>\n<pre>org.jitsi.jicofo.auth.URL=XMPP:<strong>example.com<\/strong><\/pre>\n<p>Restart all the services:<\/p>\n<pre class=\"wp-block-preformatted\">sudo systemctl restart prosody\r\nsudo systemctl restart jicofo\r\nsudo systemctl restart jitsi-videobridge2<\/pre>\n<p>Create each user by issuing:<\/p>\n<pre>sudo prosodyctl register <span style=\"color: #ff0000;\"><strong>user1<\/strong><\/span> <strong>example.com <span style=\"color: #ff0000;\">password1<\/span><\/strong><\/pre>\n<p>Now, when someone tries to create or join a meeting will be held in a lounge room until the host of the meeting connects.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1551\" src=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/03\/Screenshot-from-2021-03-22-13-51-11.png\" alt=\"\" width=\"648\" height=\"595\" srcset=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/03\/Screenshot-from-2021-03-22-13-51-11.png 648w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/03\/Screenshot-from-2021-03-22-13-51-11-300x275.png 300w\" sizes=\"auto, (max-width: 648px) 100vw, 648px\" \/><\/p>\n<p>The host of the meeting will be able to click on that button and enter the credentials to start the meeting:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1552\" src=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/03\/Screenshot-from-2021-03-22-13-52-16.png\" alt=\"\" width=\"648\" height=\"595\" srcset=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/03\/Screenshot-from-2021-03-22-13-52-16.png 648w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/03\/Screenshot-from-2021-03-22-13-52-16-300x275.png 300w\" sizes=\"auto, (max-width: 648px) 100vw, 648px\" \/><\/p>\n<p>More useful commands to manage your conference service.<\/p>\n<pre>sudo prosodyctl --help\r\nsudo prosodyctl adduser <strong>user@example.com<\/strong>\r\nsudo prosodyctl deluser <strong>user@example.com<\/strong>\r\nsudo prosodyctl passwd <strong>user@example.com<\/strong>\r\nsudo prosodyctl reload<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1599\" src=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/03\/Screenshot-from-2021-03-24-14-26-59.png\" alt=\"\" width=\"960\" height=\"1049\" srcset=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/03\/Screenshot-from-2021-03-24-14-26-59.png 960w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/03\/Screenshot-from-2021-03-24-14-26-59-275x300.png 275w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/03\/Screenshot-from-2021-03-24-14-26-59-937x1024.png 937w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/03\/Screenshot-from-2021-03-24-14-26-59-768x839.png 768w\" sizes=\"auto, (max-width: 960px) 100vw, 960px\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1608\" src=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/03\/Screenshot-from-2021-03-24-16-47-10.png\" alt=\"\" width=\"1280\" height=\"818\" srcset=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/03\/Screenshot-from-2021-03-24-16-47-10.png 1280w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/03\/Screenshot-from-2021-03-24-16-47-10-300x192.png 300w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/03\/Screenshot-from-2021-03-24-16-47-10-1024x654.png 1024w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/03\/Screenshot-from-2021-03-24-16-47-10-768x491.png 768w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2021\/03\/Screenshot-from-2021-03-24-16-47-10-1200x767.png 1200w\" sizes=\"auto, (max-width: 1280px) 100vw, 1280px\" \/><\/p>\n<p>Read more about how to monitor the resources of your server over CLI [<a href=\"https:\/\/dft.wiki\/?p=738\">Link<\/a>].<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Jitsi [Link] is an open-source Video Conferencing for web and mobile. HD audio and video; [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[],"class_list":["post-1456","post","type-post","status-publish","format-standard","hentry","category-web"],"_links":{"self":[{"href":"https:\/\/dft.wiki\/index.php?rest_route=\/wp\/v2\/posts\/1456","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dft.wiki\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dft.wiki\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dft.wiki\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dft.wiki\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1456"}],"version-history":[{"count":11,"href":"https:\/\/dft.wiki\/index.php?rest_route=\/wp\/v2\/posts\/1456\/revisions"}],"predecessor-version":[{"id":1609,"href":"https:\/\/dft.wiki\/index.php?rest_route=\/wp\/v2\/posts\/1456\/revisions\/1609"}],"wp:attachment":[{"href":"https:\/\/dft.wiki\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1456"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dft.wiki\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1456"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dft.wiki\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1456"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}