{"id":3916,"date":"2024-02-29T23:44:05","date_gmt":"2024-03-01T04:44:05","guid":{"rendered":"https:\/\/dft.wiki\/?p=3916"},"modified":"2024-03-01T14:46:53","modified_gmt":"2024-03-01T19:46:53","slug":"deploying-a-virtual-classroom-infrastructure-with-bigbluebotton","status":"publish","type":"post","link":"https:\/\/dft.wiki\/?p=3916","title":{"rendered":"Deploying a Virtual Classroom Infrastructure with BigBlueBotton"},"content":{"rendered":"<p><strong>BigBlueButton<\/strong> (aks BBB) is an opensource [<a href=\"https:\/\/github.com\/bigbluebutton\/bigbluebutton\">Link<\/a>] software that had multiple features fundamental for teachers\/professors\/instructors\/tutors to provide real-time auto, video, screen share, slide presentation, whiteboard, etc. All the resources can be later available for download including notes taken, chat questions, whiteboard notes, polling results, and analytics.<\/p>\n<hr \/>\n<p><strong>SYSTEM PREPARATION<\/strong><\/p>\n<p>The minimal requirements will depend of how many clients will be connected at the same time. On the official documentation one may find the following but for a quick test of the platform in local environment half would be enough:<\/p>\n<ul>\n<li>Virtual Machine \/ VPS\n<ul>\n<li>8 vCPU (<strong>x86_64 only<\/strong>)<\/li>\n<li>16 GB or RAM<\/li>\n<li>500 GB of Storage<\/li>\n<li>1\/4 Gbps Bandwidth<\/li>\n<li>Ubuntu 22.04<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Apply the following basic configuration and feel free to customise it accordingly.<\/p>\n<pre>sudo apt update &amp;&amp; sudo apt upgrade -y\r\nsudo hostnamectl set-hostname bbb.domain.com\r\necho '127.0.0.1    bbb.domain.com' | sudo tee -a \/etc\/hosts\r\necho 'LANG=\"en_US.UTF-8\"' | sudo tee \/etc\/default\/locale\r\nsudo ufw allow 80\r\nsudo ufw allow 443\r\nsudo ufw allow 16384:32768\/udp\r\nsudo ufw limit 22\r\nsudo ufw enable\r\nsudo reboot<\/pre>\n<p><strong>Note:<\/strong> do not expose the SSH to the public internet. Ideally it would only be allowed from local network\/VPN and to a limited set of sources. Be cautious!<\/p>\n<p>For production, this server would have public IPv4 and IPv6 mapped or directly assigned with a subdomain pointed to it to use a SSL\/TLS certificate. For a local tests, IPv4 a self-signed certificate will get the job done!<\/p>\n<hr \/>\n<p><strong>BBB INSTALLATION SCRIPT<\/strong><\/p>\n<p><strong>For installation in production with a real FQDN resolving to the server:<\/strong><\/p>\n<ul>\n<li>BBB 3.0.x on Ubuntu 22.04<\/li>\n<\/ul>\n<pre>wget -qO- https:\/\/raw.githubusercontent.com\/bigbluebutton\/bbb-install\/v3.0.x-release\/bbb-install.sh | sudo bash -s -- -w -v jammy-300 -s bbb.domain.com -e info@domain.com -g<\/pre>\n<ul>\n<li>BBB 2.7.x on Ubuntu 20.04<\/li>\n<\/ul>\n<pre>wget -qO- https:\/\/raw.githubusercontent.com\/bigbluebutton\/bbb-install\/v2.7.x-release\/bbb-install.sh | sudo bash -s -- -w -v focal-270 -s bbb.domain.com -e info@domain.com -g<\/pre>\n<p><strong>Note:<\/strong> the subdomain and email on the command above will be used to setup Let&#8217;s Encrypt out of the box for quick and easy (and free) SSL\/TLS certificate. Optionally<span style=\"font-size: 1rem;\">\u00a0the argument <\/span><code>-x<\/code><span style=\"font-size: 1rem;\"> will ask Let&#8217;s Encrypt to challenge the domain via DNS using a generated TXT record at the installation time. The argument <code>-g<\/code> will install the <strong>GreenLight<\/strong> frontend (recommended).<\/span><\/p>\n<hr \/>\n<p><strong>TROUBLESHOOTING<\/strong><\/p>\n<p>At the end of the installation there is a series of checks that tries to find potential problems. It might look like this:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3919\" src=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2024\/03\/Screenshot-from-2024-03-01-12-53-37.png\" alt=\"\" width=\"926\" height=\"531\" srcset=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2024\/03\/Screenshot-from-2024-03-01-12-53-37.png 926w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2024\/03\/Screenshot-from-2024-03-01-12-53-37-300x172.png 300w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2024\/03\/Screenshot-from-2024-03-01-12-53-37-768x440.png 768w\" sizes=\"auto, (max-width: 926px) 100vw, 926px\" \/><\/p>\n<p>Read and try to address the problems found. Also, use the following commands to check the status of the running instances and gather clues.<\/p>\n<pre>sudo bbb-conf --check\r\nsudo bbb-conf --status\r\nsudo bbb-conf --secret\r\nsudo dpkg -l | grep bbb-\r\n[ \"$(dig +short bbb.domain.com)\" = \"$(curl -s ip.me)\" ] &amp;&amp; echo \"DNS resolution confirmed.\" || echo \"DNS resolution FAILED!\"<\/pre>\n<hr \/>\n<p><strong>CREATING ACCOUNTS<\/strong><\/p>\n<p>Create the accounts:<\/p>\n<pre>sudo docker exec -it greenlight-v3 bundle exec rake admin:create['Admin','admin@domain.com','secret_password']\r\nsudo docker exec -it greenlight-v3 bundle exec rake user:set_admin_role['user@domain.com']\r\nsudo docker exec -it greenlight-v3 bundle exec rake user:student[\"Student\",\"student@domain.com\",\"password\",\"user\"]<\/pre>\n<p>See example:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3920\" src=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2024\/03\/Screenshot-from-2024-03-01-14-14-13.png\" alt=\"\" width=\"1207\" height=\"130\" srcset=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2024\/03\/Screenshot-from-2024-03-01-14-14-13.png 1207w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2024\/03\/Screenshot-from-2024-03-01-14-14-13-300x32.png 300w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2024\/03\/Screenshot-from-2024-03-01-14-14-13-1024x110.png 1024w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2024\/03\/Screenshot-from-2024-03-01-14-14-13-768x83.png 768w\" sizes=\"auto, (max-width: 1207px) 100vw, 1207px\" \/><\/p>\n<hr \/>\n<p><strong>BASIC TESTS<\/strong><\/p>\n<p>Navigate to your server&#8217;s address .<strong> If this page load, it is working!<\/strong><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3922\" src=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2024\/03\/Screenshot-from-2024-03-01-14-06-09.png\" alt=\"\" width=\"1328\" height=\"802\" srcset=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2024\/03\/Screenshot-from-2024-03-01-14-06-09.png 1328w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2024\/03\/Screenshot-from-2024-03-01-14-06-09-300x181.png 300w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2024\/03\/Screenshot-from-2024-03-01-14-06-09-1024x618.png 1024w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2024\/03\/Screenshot-from-2024-03-01-14-06-09-768x464.png 768w\" sizes=\"auto, (max-width: 1328px) 100vw, 1328px\" \/><\/p>\n<p>Then, sign in ad the administrator.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3923\" src=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2024\/03\/Screenshot-from-2024-03-01-14-18-30.png\" alt=\"\" width=\"575\" height=\"467\" srcset=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2024\/03\/Screenshot-from-2024-03-01-14-18-30.png 575w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2024\/03\/Screenshot-from-2024-03-01-14-18-30-300x244.png 300w\" sizes=\"auto, (max-width: 575px) 100vw, 575px\" \/><\/p>\n<p>Create the a classroom.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3924\" src=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2024\/03\/Screenshot-from-2024-03-01-14-07-01.png\" alt=\"\" width=\"1328\" height=\"781\" srcset=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2024\/03\/Screenshot-from-2024-03-01-14-07-01.png 1328w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2024\/03\/Screenshot-from-2024-03-01-14-07-01-300x176.png 300w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2024\/03\/Screenshot-from-2024-03-01-14-07-01-1024x602.png 1024w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2024\/03\/Screenshot-from-2024-03-01-14-07-01-768x452.png 768w\" sizes=\"auto, (max-width: 1328px) 100vw, 1328px\" \/><\/p>\n<p>Start the class.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3925\" src=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2024\/03\/Screenshot-from-2024-03-01-14-07-08.png\" alt=\"\" width=\"332\" height=\"282\" srcset=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2024\/03\/Screenshot-from-2024-03-01-14-07-08.png 332w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2024\/03\/Screenshot-from-2024-03-01-14-07-08-300x255.png 300w\" sizes=\"auto, (max-width: 332px) 100vw, 332px\" \/><\/p>\n<p>As a presenter, allow microphone usage.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3926\" src=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2024\/03\/Screenshot-from-2024-03-01-14-07-36-presenter.png\" alt=\"\" width=\"677\" height=\"367\" srcset=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2024\/03\/Screenshot-from-2024-03-01-14-07-36-presenter.png 677w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2024\/03\/Screenshot-from-2024-03-01-14-07-36-presenter-300x163.png 300w\" sizes=\"auto, (max-width: 677px) 100vw, 677px\" \/><\/p>\n<p>Select the input and output audio devices.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3928\" src=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2024\/03\/Screenshot-from-2024-03-01-14-08-06.png\" alt=\"\" width=\"677\" height=\"445\" srcset=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2024\/03\/Screenshot-from-2024-03-01-14-08-06.png 677w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2024\/03\/Screenshot-from-2024-03-01-14-08-06-300x197.png 300w\" sizes=\"auto, (max-width: 677px) 100vw, 677px\" \/><\/p>\n<p>Now, the class is set.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3929\" src=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2024\/03\/Screenshot-from-2024-03-01-14-08-45.png\" alt=\"\" width=\"1668\" height=\"798\" srcset=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2024\/03\/Screenshot-from-2024-03-01-14-08-45.png 1668w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2024\/03\/Screenshot-from-2024-03-01-14-08-45-300x144.png 300w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2024\/03\/Screenshot-from-2024-03-01-14-08-45-1024x490.png 1024w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2024\/03\/Screenshot-from-2024-03-01-14-08-45-768x367.png 768w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2024\/03\/Screenshot-from-2024-03-01-14-08-45-1536x735.png 1536w\" sizes=\"auto, (max-width: 1668px) 100vw, 1668px\" \/><\/p>\n<p>Shared the class&#8217; link from the chat box with the students.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3930\" src=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2024\/03\/Screenshot-from-2024-03-01-14-36-32.png\" alt=\"\" width=\"568\" height=\"409\" srcset=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2024\/03\/Screenshot-from-2024-03-01-14-36-32.png 568w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2024\/03\/Screenshot-from-2024-03-01-14-36-32-300x216.png 300w\" sizes=\"auto, (max-width: 568px) 100vw, 568px\" \/><\/p>\n<p>Or from the main dashboard.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3931\" src=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2024\/03\/Screenshot-from-2024-03-01-14-09-43.png\" alt=\"\" width=\"339\" height=\"308\" srcset=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2024\/03\/Screenshot-from-2024-03-01-14-09-43.png 339w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2024\/03\/Screenshot-from-2024-03-01-14-09-43-300x273.png 300w\" sizes=\"auto, (max-width: 339px) 100vw, 339px\" \/><\/p>\n<p>The students do not need to have an account. Just the URL will give access from out of the box installation (additional security measures can be implemented to restrict access).<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3932\" src=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2024\/03\/Screenshot-from-2024-03-01-14-10-19.png\" alt=\"\" width=\"697\" height=\"534\" srcset=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2024\/03\/Screenshot-from-2024-03-01-14-10-19.png 697w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2024\/03\/Screenshot-from-2024-03-01-14-10-19-300x230.png 300w\" sizes=\"auto, (max-width: 697px) 100vw, 697px\" \/><\/p>\n<p>In most cases, students will only watch and listen.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3933\" src=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2024\/03\/Screenshot-from-2024-03-01-14-07-36.png\" alt=\"\" width=\"677\" height=\"367\" srcset=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2024\/03\/Screenshot-from-2024-03-01-14-07-36.png 677w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2024\/03\/Screenshot-from-2024-03-01-14-07-36-300x163.png 300w\" sizes=\"auto, (max-width: 677px) 100vw, 677px\" \/><\/p>\n<p>Now, the class can get started.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3934\" src=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2024\/03\/Screenshot-from-2024-03-01-14-11-15.png\" alt=\"\" width=\"418\" height=\"409\" srcset=\"https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2024\/03\/Screenshot-from-2024-03-01-14-11-15.png 418w, https:\/\/dft.wiki\/wp-content\/uploads\/sites\/15\/2024\/03\/Screenshot-from-2024-03-01-14-11-15-300x294.png 300w\" sizes=\"auto, (max-width: 418px) 100vw, 418px\" \/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>BigBlueButton (aks BBB) is an opensource [Link] software that had multiple features fundamental for teachers\/professors\/instructors\/tutors [&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-3916","post","type-post","status-publish","format-standard","hentry","category-web"],"_links":{"self":[{"href":"https:\/\/dft.wiki\/index.php?rest_route=\/wp\/v2\/posts\/3916","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=3916"}],"version-history":[{"count":6,"href":"https:\/\/dft.wiki\/index.php?rest_route=\/wp\/v2\/posts\/3916\/revisions"}],"predecessor-version":[{"id":3936,"href":"https:\/\/dft.wiki\/index.php?rest_route=\/wp\/v2\/posts\/3916\/revisions\/3936"}],"wp:attachment":[{"href":"https:\/\/dft.wiki\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3916"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dft.wiki\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3916"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dft.wiki\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3916"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}