blindsidenetworks / scalelite

Scalable load balancer for BigBlueButton.
GNU Affero General Public License v3.0
472 stars 248 forks source link

Integrate LTI-Support to scalelite #392

Closed PhMemmel closed 3 years ago

PhMemmel commented 3 years ago

It's currently not possible to access scalelite via LTI interface as far as I figured out. In fact, it's not a big of a deal (bbb-lti appears just to be a java grails app). So it might be considered adding this at least to standard scalelite documentation or even adding it to scalelite-api by default or when configured to do so.

Following steps are required:

LTI module then successfully uses scalelite to create a meeting.

WARNING: I just did this the quick and dirty style. This needs to be tested in production environment. To be honest I don't see any big problems though...

possibly fixes #245

WFaltin commented 3 years ago

Could you please give some more hints how to implement LTI with scalelite. I am now trying for hours, I can connect to the Standard-API, but /lti/tools always gives me 502 error (Bad Gateway).

I have put the standard /etc/bigbluebutton/nginx/lti.nginx into the scalelite-nginx container (location /etc/nginx/conf.d/scalelite). Do you also leave the proxy pass to localhost:8181 untouched?

Where do I put the directory /usr/share/bbb-lti? Into scalelite-api? Or scalelite-nginx? And also to /usr/share?

Thank you very much for some help. Wolfgang

PhMemmel commented 3 years ago

I copied the /usr/share/bbb-lti directory to somewhere (shouldn't matter where) on the scalelite machine and ran ./run-prod.sh inside this directory (install openjdk first). This starts up the LTI application on localhost:8181 to handle all LTI requests.

For the LTI endpoint to be accessible you still need to forward LTI requests to localhost:8181 by nginx. I'm running the scalelite dockers behind an additional nginx proxy on my scalelite host, so i just forward all traffic towards /lti and /lti/assets to localhost:8181 by this nginx before it even gets to the scalelite nginx. I did this by adding the nginx LTI location blocks from /etc/bigbluebutton/nginx/lti.nginx from a standard BBB server installation with LTI plugin installed to my scalelite host's nginx-config:

  location /lti {
     proxy_pass         http://127.0.0.1:8181;
     proxy_redirect     default;
     proxy_set_header   X-Forwarded-For   $proxy_add_x_forwarded_for;
     proxy_set_header   X-Forwarded-Proto $scheme;

     # Allow 30M uploaded presentation document.
     client_max_body_size       30m;
     client_body_buffer_size    128k;

     proxy_connect_timeout      90;
     proxy_send_timeout         90;
     proxy_read_timeout         90;

     proxy_buffer_size          4k;
     proxy_buffers              4 32k;
     proxy_busy_buffers_size    64k;
     proxy_temp_file_write_size 64k;

     include    fastcgi_params;
  }

  location /lti/assets/ {
  proxy_pass         http://127.0.0.1:8181/assets/;
          proxy_set_header   X-Forwarded-For   $proxy_add_x_forwarded_for;

          # Workaround IE refusal to set cookies in iframe
          add_header P3P 'CP="No P3P policy available"';

          # Allow 30M uploaded presentation document.
          client_max_body_size       30m;
          client_body_buffer_size    128k;

          proxy_connect_timeout      90;
          proxy_send_timeout         90;
          proxy_read_timeout         90;

          proxy_buffer_size          4k;
          proxy_buffers              4 32k;
          proxy_busy_buffers_size    64k;
          proxy_temp_file_write_size 64k;

          include    fastcgi_params;

          proxy_request_buffering off;
  }

If LTI support gets added to standard scalelite deployment it would probably be easier to add this somewhere directly to the scalelite-nginx docker image, I just didn't want to build my own docker image there as I'm running a separate nginx on my scalelite machine anyway. Hope this helps!

Philipp

EDIT: Forgot to mention: Before you start up the LTI application you need to change the BBB endpoint and secret in $BBB_LTI_DIR/WEB-INF/classes/lti.properties to the scalelite server's endpoint and secret.

WFaltin commented 3 years ago

Thank you very much! After fighting some other problems it's now working an we can use 6 BBB servers in our LMS.

Wolfgang