mirror of
https://github.com/bigbluebutton/docker.git
synced 2025-08-19 08:51:42 +02:00
v3.0.0-beta.5: basic working functionality
quite some features (recording, SIP, transcription, etc.) are not working yet, but a milestone where it should finally take a commit
This commit is contained in:
@@ -1,20 +1,29 @@
|
||||
ARG BBB_BUILD_TAG
|
||||
FROM bigbluebutton/bbb-build:$BBB_BUILD_TAG AS builder
|
||||
|
||||
# --------------------
|
||||
|
||||
FROM bigbluebutton/bbb-build:$BBB_BUILD_TAG AS builder-learning-dashboard
|
||||
COPY --from=src-learning-dashboard / /bbb-learning-dashboard
|
||||
RUN cd /bbb-learning-dashboard && npm ci && npm run build
|
||||
|
||||
|
||||
FROM bigbluebutton/bbb-build:$BBB_BUILD_TAG AS builder-playback
|
||||
COPY --from=src-playback / /bbb-playback
|
||||
RUN cd /bbb-playback && npm install && npm run-script build
|
||||
|
||||
FROM bigbluebutton/bbb-build:$BBB_BUILD_TAG AS builder-html5
|
||||
COPY --from=src-html5 / /source
|
||||
RUN cd /source && CI=true npm ci
|
||||
RUN cd /source && DISABLE_ESLINT_PLUGIN=true npm run build
|
||||
RUN find /source/dist -name '*.js' -exec gzip -k -f -9 '{}' \; \
|
||||
&& find /source/dist -name '*.css' -exec gzip -k -f -9 '{}' \; \
|
||||
&& find /source/dist -name '*.wasm' -exec gzip -k -f -9 '{}' \;
|
||||
|
||||
# --------------------
|
||||
|
||||
FROM nginx:1.25-alpine
|
||||
|
||||
COPY --from=builder /bbb-learning-dashboard/build /www/learning-analytics-dashboard/
|
||||
COPY --from=builder /bbb-playback/build /www/playback/presentation/2.3
|
||||
COPY --from=builder-learning-dashboard /bbb-learning-dashboard/build /www/learning-analytics-dashboard/
|
||||
COPY --from=builder-playback /bbb-playback/build /www/playback/presentation/2.3
|
||||
COPY --from=builder-html5 /source/dist /usr/share/bigbluebutton/html5-client/
|
||||
COPY ./bbb /etc/nginx/bbb
|
||||
COPY ./bigbluebutton /etc/nginx/conf.d/default.conf
|
||||
COPY ./bbb-graphql-client-settings-cache.conf /etc/nginx/conf.d/bbb-graphql-client-settings-cache.conf
|
||||
COPY ./nginx.conf /etc/nginx/nginx.conf
|
||||
|
1
mod/nginx/bbb-graphql-client-settings-cache.conf
Normal file
1
mod/nginx/bbb-graphql-client-settings-cache.conf
Normal file
@@ -0,0 +1 @@
|
||||
proxy_cache_path /tmp/hasura-client-settings-cache levels=1:2 keys_zone=client_settings_cache:64m inactive=2880m use_temp_path=off;
|
@@ -1,6 +0,0 @@
|
||||
location /html5client {
|
||||
proxy_pass http://10.7.7.200:4100; # use for production
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "Upgrade";
|
||||
}
|
@@ -1,49 +1,13 @@
|
||||
location @html5client {
|
||||
proxy_pass http://poolhtml5servers; # use for production
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "Upgrade";
|
||||
# running in production (static assets)
|
||||
location /html5client {
|
||||
gzip_static on;
|
||||
alias /usr/share/bigbluebutton/html5-client/;
|
||||
index index.html;
|
||||
try_files $uri $uri/ =404;
|
||||
}
|
||||
|
||||
location /html5client/locales {
|
||||
alias /html5-static/app/locales;
|
||||
alias /usr/share/bigbluebutton/html5-client/locales;
|
||||
autoindex on;
|
||||
autoindex_format json;
|
||||
}
|
||||
|
||||
location /html5client/compatibility {
|
||||
gzip_static on;
|
||||
alias /html5-static/app/compatibility;
|
||||
}
|
||||
|
||||
location /html5client/resources {
|
||||
alias /html5-static/app/resources;
|
||||
}
|
||||
|
||||
location /html5client/svgs {
|
||||
alias /html5-static/app/svgs;
|
||||
}
|
||||
|
||||
location /html5client/fonts {
|
||||
alias /html5-static/app/fonts;
|
||||
}
|
||||
|
||||
location /html5client/files {
|
||||
alias /html5-static/app/files;
|
||||
}
|
||||
|
||||
location /html5client/wasm {
|
||||
types {
|
||||
application/wasm wasm;
|
||||
}
|
||||
gzip_static on;
|
||||
alias /html5-static/app/wasm;
|
||||
}
|
||||
|
||||
location /html5client {
|
||||
gzip_static on;
|
||||
alias /html5-static;
|
||||
try_files $uri @html5client;
|
||||
}
|
||||
|
||||
location /html5client/sockjs {
|
||||
try_files $uri @html5client;
|
||||
}
|
@@ -1,24 +1,39 @@
|
||||
location /graphql-test {
|
||||
proxy_pass http://127.0.0.1:3000;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "Upgrade";
|
||||
}
|
||||
|
||||
# Websocket connection
|
||||
location /v1/graphql {
|
||||
location /graphql {
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "Upgrade";
|
||||
proxy_set_header Host $host;
|
||||
#proxy_pass http://127.0.0.1:8080; #Hasura
|
||||
proxy_pass http://10.7.7.32:8378; #Graphql Middleware
|
||||
#proxy_pass http://bbb-graphql-server:8085; #Hasura (it requires to change the location to /v1/graphql)
|
||||
proxy_pass http://bbb-graphql-middleware:8378; #Graphql Middleware
|
||||
}
|
||||
|
||||
location /api/rest {
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "Upgrade";
|
||||
proxy_set_header Host $host;
|
||||
proxy_pass http://127.0.0.1:8080; #Hasura
|
||||
#Set cache system for client settings
|
||||
location /api/rest/clientSettings {
|
||||
auth_request /bigbluebutton/connection/checkGraphqlAuthorization;
|
||||
auth_request_set $meeting_id $sent_http_meeting_id;
|
||||
|
||||
proxy_cache client_settings_cache;
|
||||
proxy_cache_key "$uri|$meeting_id";
|
||||
proxy_cache_use_stale updating;
|
||||
proxy_cache_valid 24h;
|
||||
proxy_cache_lock on;
|
||||
add_header X-Cached $upstream_cache_status;
|
||||
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "Upgrade";
|
||||
proxy_set_header Host $host;
|
||||
proxy_pass http://bbb-graphql-server:8085; #Hasura
|
||||
}
|
||||
|
||||
location /api/rest/userMetadata {
|
||||
auth_request /bigbluebutton/connection/checkGraphqlAuthorization;
|
||||
auth_request_set $meeting_id $sent_http_meeting_id;
|
||||
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "Upgrade";
|
||||
proxy_set_header Host $host;
|
||||
proxy_pass http://bbb-graphql-server:8085; #Hasura
|
||||
}
|
||||
|
@@ -1,8 +1,3 @@
|
||||
location ~ /learning-analytics-dashboard/([0-9a-f]+-[0-9]+)/(.*) {
|
||||
alias /var/bigbluebutton/learning-dashboard/$1/$2;
|
||||
autoindex off;
|
||||
}
|
||||
|
||||
location /learning-analytics-dashboard/ {
|
||||
alias /www/learning-analytics-dashboard/;
|
||||
autoindex off;
|
||||
|
11
mod/nginx/bbb/livekit.nginx
Normal file
11
mod/nginx/bbb/livekit.nginx
Normal file
@@ -0,0 +1,11 @@
|
||||
location /livekit/ {
|
||||
proxy_pass http://127.0.0.1:7880/;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "Upgrade";
|
||||
|
||||
proxy_read_timeout 60s;
|
||||
proxy_send_timeout 60s;
|
||||
client_body_timeout 60s;
|
||||
send_timeout 60s;
|
||||
}
|
@@ -15,7 +15,7 @@ location /pad/p/ {
|
||||
|
||||
proxy_set_header X-Real-IP $remote_addr; # http://wiki.nginx.org/HttpProxyModule
|
||||
proxy_set_header X-Forwarded-For $remote_addr; # EP logs to show the actual remote IP
|
||||
proxy_set_header X-Forwarded-Proto $scheme; # for EP to set secure cookie flag when https is used
|
||||
proxy_set_header X-Forwarded-Proto $real_scheme; # for EP to set secure cookie flag when https is used
|
||||
proxy_http_version 1.1;
|
||||
|
||||
auth_request /bigbluebutton/connection/checkAuthorization;
|
||||
@@ -57,7 +57,7 @@ location /pad/socket.io {
|
||||
proxy_buffering off;
|
||||
proxy_set_header X-Real-IP $remote_addr; # http://wiki.nginx.org/HttpProxyModule
|
||||
proxy_set_header X-Forwarded-For $remote_addr; # EP logs to show the actual remote IP
|
||||
proxy_set_header X-Forwarded-Proto $scheme; # for EP to set secure cookie flag when https is used
|
||||
proxy_set_header X-Forwarded-Proto $real_scheme; # for EP to set secure cookie flag when https is used
|
||||
proxy_set_header Host $host; # pass the host header
|
||||
proxy_http_version 1.1; # recommended with keepalive connections
|
||||
# WebSocket proxying - from http://nginx.org/en/docs/http/websocket.html
|
||||
|
@@ -20,34 +20,27 @@
|
||||
# causes tomcat to OOM. (ralam sept 20, 2018)
|
||||
|
||||
location ~^\/bigbluebutton\/presentation\/(?<meeting_id_1>[A-Za-z0-9\-]+)\/(?<meeting_id_2>[A-Za-z0-9\-]+)\/(?<pres_id>[A-Za-z0-9\-]+)\/svg\/(?<page_num>\d+)$ {
|
||||
default_type image/svg+xml;
|
||||
default_type image/svg+xml;
|
||||
alias /var/bigbluebutton/$meeting_id_2/$meeting_id_2/$pres_id/svgs/slide$page_num.svg;
|
||||
if ($bbb_loadbalancer_node) {
|
||||
add_header 'Access-Control-Allow-Origin' $bbb_loadbalancer_node always;
|
||||
}
|
||||
add_header 'Access-Control-Allow-Origin' '*' always;
|
||||
}
|
||||
|
||||
location ~^\/bigbluebutton\/presentation\/(?<meeting_id_1>[A-Za-z0-9\-]+)\/(?<meeting_id_2>[A-Za-z0-9\-]+)\/(?<pres_id>[A-Za-z0-9\-]+)\/slide\/(?<page_num>\d+)$ {
|
||||
alias /var/bigbluebutton/$meeting_id_2/$meeting_id_2/$pres_id/slide-$page_num.swf;
|
||||
if ($bbb_loadbalancer_node) {
|
||||
add_header 'Access-Control-Allow-Origin' $bbb_loadbalancer_node always;
|
||||
}
|
||||
location ~^\/bigbluebutton\/presentation\/(?<meeting_id_1>[A-Za-z0-9\-]+)\/(?<meeting_id_2>[A-Za-z0-9\-]+)\/(?<pres_id>[A-Za-z0-9\-]+)\/pdf\/(?<job_id>[A-Za-z0-9]+)\/annotated_slides.pdf$ {
|
||||
default_type application/pdf;
|
||||
alias /var/bigbluebutton/$meeting_id_2/$meeting_id_2/$pres_id/pdfs/$job_id/annotated_slides.pdf;
|
||||
add_header 'Access-Control-Allow-Origin' '*' always;
|
||||
}
|
||||
|
||||
location ~^\/bigbluebutton\/presentation\/(?<meeting_id_1>[A-Za-z0-9\-]+)\/(?<meeting_id_2>[A-Za-z0-9\-]+)\/(?<pres_id>[A-Za-z0-9\-]+)\/thumbnail\/(?<page_num>\d+)$ {
|
||||
default_type image/png;
|
||||
default_type image/png;
|
||||
alias /var/bigbluebutton/$meeting_id_2/$meeting_id_2/$pres_id/thumbnails/thumb-$page_num.png;
|
||||
if ($bbb_loadbalancer_node) {
|
||||
add_header 'Access-Control-Allow-Origin' $bbb_loadbalancer_node always;
|
||||
}
|
||||
add_header 'Access-Control-Allow-Origin' '*' always;
|
||||
}
|
||||
|
||||
location ~^\/bigbluebutton\/presentation\/(?<meeting_id_1>[A-Za-z0-9\-]+)\/(?<meeting_id_2>[A-Za-z0-9\-]+)\/(?<pres_id>[A-Za-z0-9\-]+)\/textfiles\/(?<page_num>\d+)$ {
|
||||
default_type text/plain;
|
||||
default_type text/plain;
|
||||
alias /var/bigbluebutton/$meeting_id_2/$meeting_id_2/$pres_id/textfiles/slide-$page_num.txt;
|
||||
if ($bbb_loadbalancer_node) {
|
||||
add_header 'Access-Control-Allow-Origin' $bbb_loadbalancer_node always;
|
||||
}
|
||||
add_header 'Access-Control-Allow-Origin' '*' always;
|
||||
}
|
||||
|
||||
|
||||
|
@@ -1,15 +0,0 @@
|
||||
location /ws {
|
||||
proxy_pass https://$freeswitch_addr:7443;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "Upgrade";
|
||||
proxy_set_header X-Forwarded-Proto https;
|
||||
proxy_set_header X-Forwarded-Ssl on;
|
||||
proxy_read_timeout 6h;
|
||||
proxy_send_timeout 6h;
|
||||
client_body_timeout 6h;
|
||||
send_timeout 6h;
|
||||
|
||||
auth_request /bigbluebutton/connection/checkAuthorization;
|
||||
auth_request_set $auth_status $upstream_status;
|
||||
}
|
@@ -92,6 +92,16 @@
|
||||
proxy_set_header X-Original-URI $request_uri;
|
||||
}
|
||||
|
||||
location = /bigbluebutton/connection/checkGraphqlAuthorization {
|
||||
internal;
|
||||
proxy_pass http://bbb-web:8090;
|
||||
proxy_pass_request_body off;
|
||||
proxy_set_header Content-Length "";
|
||||
proxy_set_header X-Original-URI $request_uri;
|
||||
# this is required for CORS preflight checks in cluster setup
|
||||
proxy_set_header X-Original-Method $request_method;
|
||||
}
|
||||
|
||||
location = /bigbluebutton/connection/legacyCheckAuthorization {
|
||||
internal;
|
||||
proxy_pass http://bbb-web:8090;
|
||||
@@ -149,6 +159,18 @@
|
||||
proxy_set_header X-Original-URI $request_uri;
|
||||
}
|
||||
|
||||
location /bigbluebutton/ping {
|
||||
default_type text/plain;
|
||||
add_header Cache-Control "no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0";
|
||||
add_header Pragma "no-cache";
|
||||
add_header Expires "0";
|
||||
# this Header is required for cluster setups as the ping check is a
|
||||
# CORS request. No cookies are required so we can just allow anyone
|
||||
# to use this endpoint.
|
||||
add_header 'Access-Control-Allow-Origin' '*';
|
||||
return 200 "";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
location @error403 {
|
||||
|
@@ -1,22 +1,3 @@
|
||||
map $remote_addr $freeswitch_addr {
|
||||
"~:" [::1];
|
||||
default 10.7.7.1;
|
||||
}
|
||||
|
||||
upstream poolhtml5servers {
|
||||
zone poolhtml5servers 32k;
|
||||
least_conn;
|
||||
server 10.7.7.200:4100 fail_timeout=10s max_fails=4 backup;
|
||||
server 10.7.7.201:4101 fail_timeout=120s max_fails=1;
|
||||
server 10.7.7.202:4102 fail_timeout=120s max_fails=1;
|
||||
server 10.7.7.203:4103 fail_timeout=120s max_fails=1;
|
||||
# TODO: set server list based on NUMBER_OF_FRONTEND_NODEJS_PROCESSES
|
||||
# server 10.7.7.204:4104 fail_timeout=120s max_fails=1;
|
||||
# server 10.7.7.205:4105 fail_timeout=120s max_fails=1;
|
||||
# server 10.7.7.206:4106 fail_timeout=120s max_fails=1;
|
||||
# server 10.7.7.207:4107 fail_timeout=120s max_fails=1;
|
||||
}
|
||||
|
||||
server {
|
||||
listen 48087 default_server;
|
||||
listen [::]:48087 default_server;
|
||||
@@ -25,6 +6,10 @@ server {
|
||||
absolute_redirect off;
|
||||
root /www/;
|
||||
|
||||
# This variable is used instead of $scheme by bigbluebutton nginx include
|
||||
# files, so $scheme can be overridden in reverse-proxy configurations.
|
||||
set $real_scheme $scheme;
|
||||
|
||||
# opt-out of google's floc tracking
|
||||
# https://www.eff.org/deeplinks/2021/03/googles-floc-terrible-idea
|
||||
add_header Permissions-Policy "interest-cohort=()";
|
||||
|
Reference in New Issue
Block a user