66 Commits

Author SHA1 Message Date
1b0c9a9602 script for instant development mode 2023-12-08 12:48:01 +01:00
8c0409fa53 README: remove docker-compose version check, repeat requirements again, more links on top 2023-12-08 12:32:50 +01:00
87e73d0edd updating docs for release v2.7.3 2023-12-08 12:24:37 +01:00
dab58ced47 Merge pull request #307 from bigbluebutton/repo-restructure
use local sources instead of pulling inside container
2023-12-08 12:04:30 +01:00
07ce2c483c by default docker should use the prebuilt images.
in same cases docker still tries to build it, exceeding the RAM requirement and often failing due to the missing submodules
2023-12-08 12:04:14 +01:00
f60b24bb84 prometheus-exporter: on some hosts (different docker versions?) the tmpfs is not mounted writeable for everyone
this leads to #309 being an incomplete fix
https://github.com/bigbluebutton/docker/pull/309
2023-12-08 11:59:32 +01:00
0df9e2fd53 BBB 2.7.3 2023-12-07 20:07:01 +01:00
e5a4f52702 generate-compose: remove env variables not required in this step 2023-12-07 20:07:01 +01:00
ce48732004 cache tags of submodules, load_env function 2023-12-07 20:07:01 +01:00
03dcee6dac use local sources instead of pulling inside container 2023-12-07 20:07:01 +01:00
d6341e32ec Merge pull request #309 from bigbluebutton/fix-bbb-exporter
fix bbb-exporter due to missing /etc/bigbluebutton/bigbluebutton-release
2023-12-07 20:06:19 +01:00
6adbf1ea09 fix bbb-exporter due to missing /etc/bigbluebutton/bigbluebutton-release 2023-12-07 20:05:33 +01:00
a103d348e7 Merge pull request #304 from bigbluebutton/v2.7.3
BigBlueButton v2.7.3 + minor updates
2023-12-06 13:20:49 +01:00
4225a57f96 html5: fix display of version 2023-11-29 23:28:57 +01:00
2822132ee0 Merge pull request #302 from thifranc/develop
[del] obsolete nginx conf file
2023-11-29 17:08:41 +01:00
22b80c2d03 update libopusenc 2023-11-28 15:31:31 +01:00
00322d156c switch to up-to-date jodconverter container 2023-11-28 15:31:19 +01:00
f8ffbcd31b fix missing URL in recording container 2023-11-28 15:30:55 +01:00
f3ae0f1fd2 v2.7.3 2023-11-28 15:30:29 +01:00
4c497b6015 [del] obsolete nginx conf file, said in https://github.com/bigbluebutton/bigbluebutton/issues/10908 2023-11-17 10:23:57 +01:00
954100d55e html5: fix display of version 2023-09-13 01:30:05 +02:00
90cfd3471f added Release 2.7.0 changelog 2023-09-13 00:45:59 +02:00
c2d85d6e45 added requirements, updating upgrade docs 2023-09-13 00:44:20 +02:00
0bca06023d Include SHARED_SECRET for recordings container in docker-compose.tmpl.yml
In the current template, SHARED_SECRET is not handed to the recordings container. In turn, the recording_ready callback to greenlight does not work, preventing recordings from being displayed correctly.

This patch addresses issue #268.
2023-09-13 00:08:15 +02:00
58bbbed7cf Merge pull request #291 from bigbluebutton/v2.7.1
BigBlueButton 2.7
2023-09-13 00:03:26 +02:00
4cff64c1a0 Merge pull request #277 from pkolmann/pkolmann-https-proxy-resolver
Add RESOLVER_ADDRESS env variable for HTTPS_PROXY container.
2023-09-12 22:19:14 +02:00
958f1ecd8e Merge pull request #271 from leonidas-o/develop
Deprecated ComposeV1, update to ComposeV2
2023-09-12 22:14:46 +02:00
b82f6fbd70 greenlight: switch to main image 2023-09-12 22:09:17 +02:00
60b3775308 etherpad: support for alpine in export script 2023-09-12 22:08:03 +02:00
109547ffed BigBlueButton 2.7 2023-09-12 18:31:01 +02:00
e2fa77fe48 use official bbb-build images instead of senfcall 2023-09-12 18:23:22 +02:00
3ae8ebc906 Add RESOLVER_ADDRESS env variable for HTTPS_PROXY container.
closes https://github.com/bigbluebutton/docker/issues/276
2023-06-02 09:52:19 +02:00
9710700521 Merge branch 'feature/composev2' into develop 2023-05-07 11:10:29 +02:00
8c1ae1e48b update commands to docker compose V2 2023-05-07 11:07:09 +02:00
50a4020111 correctly sort in TAG_BBB_PRESENTATION_VIDEO in tags.env 2023-04-04 12:04:18 +02:00
3eddef1a1c BBB v2.6.1 2023-04-04 12:03:43 +02:00
3c1e5c7bee Merge pull request #262 from yanus/develop
Fix learning-dashboard (alias)
2023-04-04 11:52:35 +02:00
72355362c8 Release v2.6.0-2 2023-04-04 11:32:46 +02:00
06a5921874 hotfix for broken freeswitch container due to enabled compresion with max file count == 1
https://github.com/bigbluebutton/docker/issues/260
2023-04-04 11:31:11 +02:00
0344b0e4c1 Fix learning-dashboard 2023-04-04 10:23:16 +02:00
bd2e7fbf9e bbb-docker release v2.6.0 2023-04-03 11:51:15 +02:00
0257ba7025 fs_cli: fix wrong path 2023-04-03 11:45:35 +02:00
6b5d8c853d nginx: serve default presentation 2023-04-03 11:45:12 +02:00
81b02de14a recordings: fix missing post_publish.log 2023-04-03 11:44:45 +02:00
d5164ecef9 freeswitch: only store a small window of the logs permanently 2023-04-03 11:44:21 +02:00
859e61af06 greenlight: avoid leaking IP to greenlight, which stores it in the logs 2023-04-03 11:42:57 +02:00
1fbf11a9fa nginx: redirect old greenlight v2 room links 2023-03-24 23:26:55 +01:00
f10979f8e4 Merge pull request #255 from bigbluebutton/v2.6
BigBlueButton v2.6
2023-03-24 23:13:31 +01:00
44c2f9489c dev mode: note on broken greenlight connection 2023-03-24 23:07:09 +01:00
38441f5182 changelog for v2.6 2023-03-24 23:07:09 +01:00
917d180661 add greenlight-data to .gitignore 2023-03-24 23:07:09 +01:00
a55a09f6cd recordings: fix missing log file (dockerize crashes) 2023-03-24 23:07:09 +01:00
efaba305e1 greenlight: update to v3.0.2 2023-03-24 23:07:09 +01:00
711b47d844 recordings: add missing unzip dependency 2023-03-24 23:07:09 +01:00
43ef3aeb88 greenlight v3: migration script + docs 2023-03-24 23:07:09 +01:00
ce8f12fc60 BigBlueButton v2.6.0 2023-03-24 23:07:09 +01:00
3d433f8a5c greenlight v3 2023-03-24 23:07:08 +01:00
0766a4033c update base images 2023-03-24 23:04:41 +01:00
2a0cd91e72 freeswitch: build ourselves with patches included 2023-03-24 23:04:41 +01:00
ad484aa870 Merge pull request #252 from nr23730/patch-1
Set client_max_body_size for greenlight
2023-03-24 23:03:15 +01:00
bf353adb13 Merge pull request #254 from bigbluebutton/antobinary-patch-1
docs: Fixed typo in bbb-web Dockerfile
2023-03-21 22:42:43 +01:00
7573c6f634 Merge pull request #248 from bigbluebutton/v2.5.10
BigBlueButton v2.5.11
2023-03-20 23:20:40 +01:00
024d222b8b docs: Fixed typo in bbb-web Dockerfile 2023-03-03 09:05:14 -05:00
366be0a17c Set client_max_body_size for greenlight 2023-02-05 22:22:22 +01:00
ef295301b5 BBB v2.5.11 2023-01-10 17:24:33 +01:00
cef23f8236 actually checkout the submodules specified in tags.env 2023-01-10 17:19:35 +01:00
79 changed files with 1160 additions and 737 deletions

0
.cache/meteor/.gitkeep Normal file
View File

0
.cache/npm/.gitkeep Normal file
View File

5
.gitignore vendored
View File

@ -14,4 +14,9 @@ docker-compose.override.yml
# App generated # App generated
.env .env
.env.bak
postgres-data postgres-data
greenlight-data
.cache/*/**
!.cache/*/.gitkeep

34
.gitmodules vendored
View File

@ -1,18 +1,24 @@
[submodule "bbb-webrtc-sfu"] [submodule "repos/bbb-etherpad-skin"]
path = mod/webrtc-sfu/bbb-webrtc-sfu path = repos/bbb-etherpad-skin
url = https://github.com/bigbluebutton/bbb-webrtc-sfu.git
[submodule "mod/etherpad/bbb-etherpad-skin"]
path = mod/etherpad/bbb-etherpad-skin
url = https://github.com/alangecker/bbb-etherpad-skin url = https://github.com/alangecker/bbb-etherpad-skin
[submodule "mod/etherpad/bbb-etherpad-plugin"] [submodule "repos/bbb-etherpad-plugin"]
path = mod/etherpad/bbb-etherpad-plugin path = repos/bbb-etherpad-plugin
url = https://github.com/alangecker/bbb-etherpad-plugin url = https://github.com/alangecker/bbb-etherpad-plugin
[submodule "mod/bbb-pads/bbb-pads"] [submodule "repos/bbb-webhooks"]
path = mod/bbb-pads/bbb-pads path = repos/bbb-webhooks
url = https://github.com/bigbluebutton/bbb-pads
[submodule "mod/webhooks/bbb-webhooks"]
path = mod/webhooks/bbb-webhooks
url = https://github.com/bigbluebutton/bbb-webhooks url = https://github.com/bigbluebutton/bbb-webhooks
[submodule "mod/nginx/bbb-playback"] [submodule "repos/bbb-playback"]
path = mod/nginx/bbb-playback path = repos/bbb-playback
url = https://github.com/bigbluebutton/bbb-playback url = https://github.com/bigbluebutton/bbb-playback
[submodule "repos/freeswitch"]
path = repos/freeswitch
url = https://github.com/signalwire/freeswitch.git
[submodule "repos/bigbluebutton"]
path = repos/bigbluebutton
url = https://github.com/bigbluebutton/bigbluebutton.git
[submodule "repos/bbb-webrtc-sfu"]
path = repos/bbb-webrtc-sfu
url = https://github.com/bigbluebutton/bbb-webrtc-sfu.git
[submodule "repos/bbb-pads"]
path = repos/bbb-pads
url = https://github.com/bigbluebutton/bbb-pads.git

View File

@ -2,6 +2,28 @@
## Unreleased ## Unreleased
## Release v2.7.3 (2023-12-08)
**Breaking change!** make sure to read the [upgrading notes](https://github.com/bigbluebutton/docker/blob/develop/docs/upgrading.md)
- BigBlueButton 2.7.3 @alangecker [#304](https://github.com/bigbluebutton/docker/pull/304)
- use local sources instead of pulling inside container @alangecker [#307](https://github.com/bigbluebutton/docker/pull/307)
- BigBlueButton 2.7.0 @alangecker [#291](https://github.com/bigbluebutton/docker/pull/291)
- Update to ComposeV2 @leonidas-o [#271](https://github.com/bigbluebutton/docker/pull/271)
- recordings: fix for missing `SHARED_SECRET` @ichdasich [#274](https://github.com/bigbluebutton/docker/issues/274) [#268](https://github.com/bigbluebutton/docker/issues/268)
- Add RESOLVER_ADDRESS to env for docker-nginx-auto-ssl @pkolmann [#277](https://github.com/bigbluebutton/docker/pull/277)
- Fix learning-dashboard @yanus [#262](https://github.com/bigbluebutton/docker/pull/262)
## Release v2.6.0-2 (2023-04-04)
- hotfix for broken freeswitch container due to enabled compresion with max file count == 1 [#260](https://github.com/bigbluebutton/docker/issues/260)
## Release v2.6.0 (2023-04-03)
- **Breaking change:** Greenlight v3 (see [upgrade note](docs/upgrading.md) @alangecker [#255](https://github.com/bigbluebutton/docker/pull/255)
- BigBlueButton v2.6 @alangecker [#255](https://github.com/bigbluebutton/docker/pull/255)
- Set client_max_body_size for greenlight @nr23730 [#252](https://github.com/bigbluebutton/docker/pull/252)
- self building freeswitch (applying patches and independent from external apt repos) @alangecker
- reduce amount of logs with senstivie data @alangecker
## Release v2.5.8 (2022-11-06) ## Release v2.5.8 (2022-11-06)
- BBB 2.5.8 @alangecker [#238](https://github.com/bigbluebutton/docker/pull/238) - BBB 2.5.8 @alangecker [#238](https://github.com/bigbluebutton/docker/pull/238)
- recordings: fix for missing ffmpeg filter @alangecker [#235](https://github.com/bigbluebutton/docker/issues/235) [#230](https://github.com/bigbluebutton/docker/pull/230) - recordings: fix for missing ffmpeg filter @alangecker [#235](https://github.com/bigbluebutton/docker/issues/235) [#230](https://github.com/bigbluebutton/docker/pull/230)

View File

@ -1,9 +1,9 @@
<img width="1012" alt="bbb-docker-banner" src="https://user-images.githubusercontent.com/1273169/141153216-0386cd4e-0aaf-473a-8f42-a048e52ed0d7.png"> <img width="1012" alt="bbb-docker-banner" src="https://user-images.githubusercontent.com/1273169/141153216-0386cd4e-0aaf-473a-8f42-a048e52ed0d7.png">
# 📦 BigBlueButton 2.5 Docker # 📦 BigBlueButton 2.7 Docker
Version: 2.5.8 | [Changelog](CHANGELOG.md) | [Issues](https://github.com/bigbluebutton/docker/issues) Version: 2.7.3 | [Changelog](CHANGELOG.md) | [Issues](https://github.com/bigbluebutton/docker/issues) | [Upgrading](docs/upgrading.md) | [Development](docs/development.md)
## Features ## Features
- Easy installation - Easy installation
@ -13,49 +13,53 @@ Version: 2.5.8 | [Changelog](CHANGELOG.md) | [Issues](https://github.com/bigblue
- Full IPv6 support - Full IPv6 support
- Runs on any major linux distributon (Debian, Ubuntu, CentOS,...) - Runs on any major linux distributon (Debian, Ubuntu, CentOS,...)
## Requirements
- 4GB of RAM
- Linux (it will not work under Windows/WSL)
- Root access (bbb-docker uses host networking, so it won't work with Kubernetes, any "CaaS"-Service, etc.)
- Public IPv4 (expect issues with a firewall / NAT)
## What is not implemented yet ## What is not implemented yet
- bbb-lti - bbb-lti
## Install ## Install
1. Install docker-ce & docker-compose 1. Ensure the requirements above are fulfilled (it really doesn't work without them)
2. Install docker-ce & docker-compose-plugin
1. follow instructions 1. follow instructions
* Debian: https://docs.docker.com/engine/install/debian/ * Debian: https://docs.docker.com/engine/install/debian/
* CentOS: https://docs.docker.com/engine/install/centos/ * CentOS: https://docs.docker.com/engine/install/centos/
* Fedora: https://docs.docker.com/engine/install/fedora/ * Fedora: https://docs.docker.com/engine/install/fedora/
* Ubuntu: https://docs.docker.com/engine/install/ubuntu/ * Ubuntu: https://docs.docker.com/engine/install/ubuntu/
2. Ensure docker works with `$ docker run hello-world` 2. Ensure docker works with `$ docker run hello-world`
3. Install docker-compose: https://docs.docker.com/compose/install/ 3. Ensure you use a docker version ≥ 23.0 : `$ docker --version`
4. Ensure docker-compose works and that you use a version ≥ 1.28 : `$ docker-compose --version` 3. Clone this repository
2. Clone this repository
```sh ```sh
$ git clone --recurse-submodules https://github.com/bigbluebutton/docker.git bbb-docker $ git clone https://github.com/bigbluebutton/docker.git bbb-docker
$ cd bbb-docker $ cd bbb-docker
# use the more stable main branch (sometimes older) # use the more stable main branch (sometimes older)
$ git checkout main $ git checkout main
``` ```
3. Run setup: 4. Run setup:
```bash ```bash
$ ./scripts/setup $ ./scripts/setup
``` ```
4. (optional) Make additional configuration adjustments 5. (optional) Make additional configuration adjustments
```bash ```bash
$ nano .env $ nano .env
# always recreate the docker-compose.yml file after making any changes # always recreate the docker-compose.yml file after making any changes
$ ./scripts/generate-compose $ ./scripts/generate-compose
``` ```
5. Start containers: 6. Start containers:
```bash ```bash
$ docker-compose up -d $ docker compose up -d --no-build
``` ```
6. If you use greenlight, you can create an admin account with: 7. If you use greenlight, you can create an admin account with:
```bash ```bash
$ docker-compose exec greenlight bundle exec rake admin:create $ docker compose exec greenlight bundle exec rake admin:create
``` ```
## Further How-To's ## Further How-To's
- [Upgrading](docs/upgrading.md)
- [Running behind NAT](docs/behind-nat.md) - [Running behind NAT](docs/behind-nat.md)
- [BBB-Docker Development](docs/development.md)
- [Integration into an existing web server](docs/existing-web-server.md) - [Integration into an existing web server](docs/existing-web-server.md)

213
dev.env Normal file
View File

@ -0,0 +1,213 @@
# fixed environment for an working dev setup
DEV_MODE=true
# use meteor dev server for html5
DEV_HTML5=true
# ====================================
# ADDITIONS to BigBlueButton
# ====================================
# (place a '#' before to disable them)
# HTTPS Proxy
# fully automated Lets Encrypt certificates
ENABLE_HTTPS_PROXY=true
# If your network doesn't allow access to DNS at 8.8.8.8 specify your own resolvers
#RESOLVER_ADDRESS=x.x.x.x
# coturn (a TURN Server)
# requires either the abhove HTTPS Proxy to be enabled
# or TLS certificates to be mounted to container
ENABLE_COTURN=false
#COTURN_TLS_CERT_PATH=
#COTURN_TLS_KEY_PATH=
# Greenlight Frontend
# https://docs.bigbluebutton.org/greenlight/gl-overview.html
ENABLE_GREENLIGHT=true
# Enable Webhooks
# used by some integrations
ENABLE_WEBHOOKS=true
# Prometheus Exporter
# serves the bigbluebutton-exporter under following URL:
# https://yourdomain/bbb-exporter
ENABLE_PROMETHEUS_EXPORTER=true
#ENABLE_PROMETHEUS_EXPORTER_OPTIMIZATION=true
# Recording
# IMPORTANT: this is currently a big privacy issues, because it will
# record everything which happens in the conference, even when the button
# suggets, that it does not.
# https://github.com/bigbluebutton/bigbluebutton/issues/9202
# make sure that you get peoples consent, before they join a room
ENABLE_RECORDING=true
#REMOVE_OLD_RECORDING=false
#RECORDING_MAX_AGE_DAYS=14
# ====================================
# SECRETS
# ====================================
# important! change these to any random values
SHARED_SECRET=SuperSecret
ETHERPAD_API_KEY=SuperEtherpadKey
RAILS_SECRET=SuperRailsSecret_SuperRailsSecret
POSTGRESQL_SECRET=SuperPostgresSecret
FSESL_PASSWORD=SuperFreeswitchESLPassword
# ====================================
# CONNECTION
# ====================================
DOMAIN=10.7.7.1
EXTERNAL_IPv4=10.7.7.1
EXTERNAL_IPv6=
# STUN SERVER
# stun.freeswitch.org
STUN_IP=147.182.188.245
STUN_PORT=3478
# TURN SERVER
# uncomment and adjust following two lines to add an external TURN server
#TURN_SERVER=turns:localhost:465?transport=tcp
#TURN_SECRET=
# Allowed SIP IPs
# due to high traffic caused by bots, by default the SIP port is blocked.
# but you can allow access by your providers IP or IP ranges (comma seperated)
# Hint: if you want to allow requests from every IP, you can use 0.0.0.0/0
SIP_IP_ALLOWLIST=0.0.0.0/0
# ====================================
# CUSTOMIZATION
# ====================================
CLIENT_TITLE=BigBlueButton (Development)
# use following lines to replace the default welcome message and footer
WELCOME_MESSAGE="Welcome to <b>%%CONFNAME%%</b>!<br><br>For help on using BigBlueButton see these (short) <a href='https://www.bigbluebutton.org/html5' target='_blank'><u>tutorial videos</u></a>.<br><br>To join the audio bridge click the speaker button. Use a headset to avoid causing background noise for others."
WELCOME_FOOTER="This server is running <a href='https://docs.bigbluebutton.org/'' target='_blank'><u>BigBlueButton</u></a>."
# use following line for an additional SIP dial-in message
#WELCOME_FOOTER="This server is running <a href='https://docs.bigbluebutton.org/' target='_blank'><u>BigBlueButton</u></a>. <br><br>To join this meeting by phone, dial:<br> INSERT_YOUR_PHONE_NUMBER_HERE<br>Then enter %%CONFNUM%% as the conference PIN number."
# for a different default presentation, place the pdf file in ./conf/ and
# adjust the following path
DEFAULT_PRESENTATION=./mod/nginx/default.pdf
# language of sound announcements
# options:
# - en-ca-june - EN Canadian June
# - en-us-allison - US English Allison
# - en-us-callie - US English Callie (default)
# - de-de-daedalus3 - German by Daedalus3 (https://github.com/Daedalus3/freeswitch-german-soundfiles)
# - es-ar-mario - Spanish/Argentina Mario
# - fr-ca-june - FR Canadian June
# - pt-br-karina - Brazilian Portuguese Karina
# - ru-RU-elena - RU Russian Elena
# - ru-RU-kirill - RU Russian Kirill
# - ru-RU-vika - RU Russian Viktoriya
# - sv-se-jakob - Swedish (Sweden) Jakob
# - zh-cn-sinmei - Chinese/China Sinmei
# - zh-hk-sinmei - Chinese/Hong Kong Sinmei
SOUNDS_LANGUAGE=en-us-callie
# set to false to disable listenOnlyMode
LISTEN_ONLY_MODE=true
# set to true to disable echo test
DISABLE_ECHO_TEST=false
# set to true to automatically share webcam
AUTO_SHARE_WEBCAM=false
# set to true to disable video preview for webcam sharing
DISABLE_VIDEO_PREVIEW=false
# set to false to disable chat
CHAT_ENABLED=true
# set to true to start chat closed
CHAT_START_CLOSED=false
# set to true to disable announcements "You are now (un-)muted"
DISABLE_SOUND_MUTED=false
# set to true to disable announcement "You are the only person in this conference"
DISABLE_SOUND_ALONE=false
# maximum count of breakout rooms per meeting
# Warning: increasing the limit of breakout rooms per meeting
# can generate excessive overhead to the server. We recommend
# this value to be kept under 12.
BREAKOUTROOM_LIMIT=8
# set to false to disable the learning dashboard
ENABLE_LEARNING_DASHBOARD=true
# ====================================
# Tuning
# ====================================
# Default = 2; Min = 1; Max = 4
# On powerful systems with high number of meetings you can set values up to 4 to accelerate handling of events
NUMBER_OF_BACKEND_NODEJS_PROCESSES=1
# Default = 2; Min = 1; Max = 8
# Set a number between 1 and 4 times the value of NUMBER_OF_BACKEND_NODEJS_PROCESSES where higher number helps with meetings
# stretching the recommended number of users in BigBlueButton
NUMBER_OF_FRONTEND_NODEJS_PROCESSES=1
# ====================================
# GREENLIGHT CONFIGURATION
# ====================================
### SMTP CONFIGURATION
# Emails are required for the basic features of Greenlight to function.
# Please refer to your SMTP provider to get the values for the variables below
#SMTP_SENDER_EMAIL=
#SMTP_SENDER_NAME=
#SMTP_SERVER=
#SMTP_PORT=
#SMTP_DOMAIN=
#SMTP_USERNAME=
#SMTP_PASSWORD=
#SMTP_AUTH=
#SMTP_STARTTLS_AUTO=true
#SMTP_STARTTLS=false
#SMTP_TLS=false
#SMTP_SSL_VERIFY=true
### EXTERNAL AUTHENTICATION METHODS
#
#OPENID_CONNECT_CLIENT_ID=
#OPENID_CONNECT_CLIENT_SECRET=
#OPENID_CONNECT_ISSUER=
#OPENID_CONNECT_REDIRECT=
# To enable hCaptcha on the user sign up and sign in, define these 2 keys
#HCAPTCHA_SITE_KEY=
#HCAPTCHA_SECRET_KEY=
# Set these if you are using a Simple Storage Service (S3)
# Uncomment S3_ENDPOINT only if you are using a S3 OTHER than Amazon Web Service (AWS) S3.
#S3_ACCESS_KEY_ID=
#S3_SECRET_ACCESS_KEY=
#S3_REGION=
#S3_BUCKET=
#S3_ENDPOINT=
# Define the default locale language code (i.e. 'en' for English) from the fallowing list:
# [en, ar, fr, es]
#DEFAULT_LOCALE=en

View File

@ -1,5 +1,5 @@
{{/* if you read this, you can ignore the following lines */}} {{/* if you read this, you can ignore the following lines */}}
# auto generated by ./scripts/generate # auto generated by ./scripts/generate-compose
# don't edit this directly. # don't edit this directly.
{{/* -------- */}} {{/* -------- */}}
@ -9,10 +9,12 @@ version: '3.6'
x-html5-backend: &html5backend x-html5-backend: &html5backend
build: build:
context: mod/html5 context: mod/html5
additional_contexts:
- source=./repos/bigbluebutton/bigbluebutton-html5
args: args:
BBB_BUILD_TAG: {{ .Env.BBB_BUILD_TAG }} BBB_BUILD_TAG: bbb27-2023-06-13-java17
TAG_HTML5: {{ .Env.TAG_HTML5 }} TAG_BBB: {{ .Env.TAG_BBB }}
image: alangecker/bbb-docker-html5:{{ .Env.TAG_HTML5 }} image: alangecker/bbb-docker-html5:{{ .Env.TAG_BBB }}
restart: unless-stopped restart: unless-stopped
depends_on: depends_on:
- redis - redis
@ -44,15 +46,18 @@ services:
bbb-web: bbb-web:
build: build:
context: mod/bbb-web context: mod/bbb-web
additional_contexts:
- src-web=./repos/bigbluebutton/bigbluebutton-web
- src-common-message=./repos/bigbluebutton/bbb-common-message
- src-common-web=./repos/bigbluebutton/bbb-common-web
args: args:
BBB_BUILD_TAG: {{ .Env.BBB_BUILD_TAG }} BBB_BUILD_TAG: bbb27-2023-06-13-java17
TAG_COMMON_MESSAGE: {{ .Env.TAG_COMMON_MESSAGE }} image: alangecker/bbb-docker-web:{{ .Env.TAG_BBB }}
TAG_BBB_WEB: {{ .Env.TAG_BBB_WEB }}
image: alangecker/bbb-docker-web:{{ .Env.TAG_BBB_WEB }}
restart: unless-stopped restart: unless-stopped
depends_on: depends_on:
- redis - redis
- etherpad - etherpad
- bbb-pads
healthcheck: healthcheck:
test: wget --no-proxy --no-verbose --tries=1 --spider http://10.7.7.2:8090/bigbluebutton/api || exit 1 test: wget --no-proxy --no-verbose --tries=1 --spider http://10.7.7.2:8090/bigbluebutton/api || exit 1
start_period: 2m start_period: 2m
@ -76,6 +81,34 @@ services:
ipv4_address: 10.7.7.2 ipv4_address: 10.7.7.2
{{ if isTrue .Env.DEV_HTML5 }}
html5-dev:
build:
context: mod/html5
dockerfile: Dockerfile.dev
args:
BBB_BUILD_TAG: bbb27-2023-06-13-java17
user: ${BBB_DOCKER_USER}
restart: unless-stopped
depends_on:
- redis
- mongodb
- etherpad
volumes:
- ./repos/bigbluebutton/bigbluebutton-html5:/app/:rw
- ./.cache/npm:/tmp/.npm:rw
- ./.cache/meteor:/tmp/.meteor:rw
- ./mod/html5/bbb-html5.yml:/tmp/bbb-html5.yml.tmpl
environment:
<<: *html5backend-env
HOME: /tmp
BBB_HTML5_ROLE: ""
networks:
bbb-net:
ipv4_address: 10.7.7.200
{{ else }}
{{ range $i := loop 0 (atoi .Env.NUMBER_OF_BACKEND_NODEJS_PROCESSES) }} {{ range $i := loop 0 (atoi .Env.NUMBER_OF_BACKEND_NODEJS_PROCESSES) }}
html5-backend-{{ add $i 1 }}: html5-backend-{{ add $i 1 }}:
<<: *html5backend <<: *html5backend
@ -100,14 +133,20 @@ services:
ipv4_address: 10.7.7.{{ add 200 $i }} ipv4_address: 10.7.7.{{ add 200 $i }}
{{end}} {{end}}
{{ end }}
freeswitch: freeswitch:
container_name: bbb-freeswitch container_name: bbb-freeswitch
build: build:
context: mod/freeswitch context: mod/freeswitch
additional_contexts:
- freeswitch=./repos/freeswitch/
- build-files=./repos/bigbluebutton/build/packages-template/bbb-freeswitch-core/
- fs-config=./repos/bigbluebutton/bbb-voice-conference/config/freeswitch/conf/
args: args:
TAG_FS_CONFIG: {{ .Env.TAG_FS_CONFIG }} BBB_BUILD_TAG: bbb27-2023-06-13-java17
image: alangecker/bbb-docker-freeswitch:{{ .Env.TAG_FS_CONFIG }} image: alangecker/bbb-docker-freeswitch:{{ .Env.TAG_FREESWITCH }}-{{ .Env.TAG_BBB }}
restart: unless-stopped restart: unless-stopped
cap_add: cap_add:
- IPC_LOCK - IPC_LOCK
@ -130,22 +169,41 @@ services:
- ./conf/dialplan_public:/etc/freeswitch/dialplan/public_docker - ./conf/dialplan_public:/etc/freeswitch/dialplan/public_docker
- vol-freeswitch:/var/freeswitch/meetings - vol-freeswitch:/var/freeswitch/meetings
network_mode: host network_mode: host
logging:
# reduce logs to a minimum, so `docker compose logs -f` still works
driver: "local"
options:
max-size: "10k"
max-file: "1"
compress: "false"
nginx: nginx:
build: build:
context: mod/nginx context: mod/nginx
additional_contexts:
- src-learning-dashboard=./repos/bigbluebutton/bbb-learning-dashboard
- src-playback=./repos/bbb-playback
args: args:
TAG_LEARNING_DASHBOARD: {{ .Env.TAG_LEARNING_DASHBOARD }} BBB_BUILD_TAG: bbb27-2023-06-13-java17
image: alangecker/bbb-docker-nginx:1.21-{{ .Env.TAG_PLAYBACK }}-{{ .Env.TAG_LEARNING_DASHBOARD }} image: alangecker/bbb-docker-nginx:1.23-{{ .Env.TAG_PLAYBACK }}-{{ .Env.TAG_BBB }}
restart: unless-stopped restart: unless-stopped
depends_on: depends_on:
- etherpad - etherpad
- webrtc-sfu - webrtc-sfu
{{ if isTrue .Env.DEV_HTML5 }}
- html5-dev
{{ else }}
- html5-backend-1 - html5-backend-1
{{ end }}
volumes: volumes:
- bigbluebutton:/var/bigbluebutton - bigbluebutton:/var/bigbluebutton
- html5-static:/html5-static:ro - html5-static:/html5-static:ro
- ${DEFAULT_PRESENTATION:-/dev/null}:/www/default.pdf - ${DEFAULT_PRESENTATION:-/dev/null}:/www/default.pdf
{{ if isTrue .Env.DEV_HTML5 }}
# don't let nginx directly serve static files
- ./mod/nginx/bbb-html5.dev.nginx:/etc/nginx/bbb/bbb-html5.nginx:ro
{{ end }}
network_mode: host network_mode: host
extra_hosts: extra_hosts:
- "host.docker.internal:10.7.7.1" - "host.docker.internal:10.7.7.1"
@ -153,10 +211,17 @@ services:
- "etherpad:10.7.7.4" - "etherpad:10.7.7.4"
- "webrtc-sfu:10.7.7.1" - "webrtc-sfu:10.7.7.1"
- "html5:10.7.7.11" - "html5:10.7.7.11"
- "greenlight:10.7.7.21"
etherpad: etherpad:
build: mod/etherpad build:
image: alangecker/bbb-docker-etherpad:1.8.18-3 context: mod/etherpad
additional_contexts:
- plugin=./repos/bbb-etherpad-plugin
- skin=./repos/bbb-etherpad-skin
args:
TAG_ETHERPAD: "1.9.1"
image: alangecker/bbb-docker-etherpad:1.9.1-s{{ .Env.COMMIT_ETHERPAD_SKIN }}-p{{ .Env.COMMIT_ETHERPAD_PLUGIN }}
restart: unless-stopped restart: unless-stopped
depends_on: depends_on:
- redis - redis
@ -167,7 +232,10 @@ services:
ipv4_address: 10.7.7.4 ipv4_address: 10.7.7.4
bbb-pads: bbb-pads:
build: mod/bbb-pads build:
context: mod/bbb-pads
additional_contexts:
- src=./repos/bbb-pads
image: alangecker/bbb-docker-pads:{{ .Env.TAG_PADS }} image: alangecker/bbb-docker-pads:{{ .Env.TAG_PADS }}
restart: unless-stopped restart: unless-stopped
depends_on: depends_on:
@ -180,7 +248,7 @@ services:
ipv4_address: 10.7.7.18 ipv4_address: 10.7.7.18
redis: redis:
image: redis:7.0-alpine image: redis:7.2-alpine
restart: unless-stopped restart: unless-stopped
healthcheck: healthcheck:
test: ["CMD", "redis-cli", "ping"] test: ["CMD", "redis-cli", "ping"]
@ -219,18 +287,23 @@ services:
webrtc-sfu: webrtc-sfu:
build: build:
context: mod/webrtc-sfu context: mod/webrtc-sfu
additional_contexts:
- source=./repos/bbb-webrtc-sfu
args: args:
BBB_BUILD_TAG: {{ .Env.BBB_BUILD_TAG }} BBB_BUILD_TAG: bbb27-2023-06-13-java17
image: alangecker/bbb-docker-webrtc-sfu:{{ .Env.TAG_WEBRTC_SFU }} image: alangecker/bbb-docker-webrtc-sfu:{{ .Env.TAG_WEBRTC_SFU }}
restart: unless-stopped restart: unless-stopped
depends_on: depends_on:
- redis - redis
- freeswitch - freeswitch
- kurento
environment: environment:
CLIENT_HOST: 10.7.7.1 CLIENT_HOST: 10.7.7.1
REDIS_HOST: 10.7.7.5 REDIS_HOST: 10.7.7.5
FREESWITCH_IP: 10.7.7.1 FREESWITCH_IP: 10.7.7.1
FREESWITCH_SIP_IP: ${EXTERNAL_IPv4} FREESWITCH_SIP_IP: ${EXTERNAL_IPv4}
MCS_HOST: 0.0.0.0
MCS_ADDRESS: 127.0.0.1
ESL_IP: 10.7.7.1 ESL_IP: 10.7.7.1
ESL_PASSWORD: ${FSESL_PASSWORD:-ClueCon} ESL_PASSWORD: ${FSESL_PASSWORD:-ClueCon}
# TODO: add mediasoup IPv6 # TODO: add mediasoup IPv6
@ -250,11 +323,13 @@ services:
fsesl-akka: fsesl-akka:
build: build:
context: mod/fsesl-akka context: mod/fsesl-akka
additional_contexts:
- src-common-message=./repos/bigbluebutton/bbb-common-message
- src-fsesl-client=./repos/bigbluebutton/bbb-fsesl-client
- src-fsesl-akka=./repos/bigbluebutton/akka-bbb-fsesl
args: args:
BBB_BUILD_TAG: {{ .Env.BBB_BUILD_TAG }} BBB_BUILD_TAG: bbb27-2023-06-13-java17
TAG_COMMON_MESSAGE: {{ .Env.TAG_COMMON_MESSAGE }} image: alangecker/bbb-docker-fsesl-akka:{{ .Env.TAG_BBB }}
TAG_FSESL_AKKA: {{ .Env.TAG_FSESL_AKKA }}
image: alangecker/bbb-docker-fsesl-akka:{{ .Env.TAG_FSESL_AKKA }}
restart: unless-stopped restart: unless-stopped
depends_on: depends_on:
- redis - redis
@ -268,11 +343,12 @@ services:
apps-akka: apps-akka:
build: build:
context: mod/apps-akka context: mod/apps-akka
additional_contexts:
- src-common-message=./repos/bigbluebutton/bbb-common-message
- src-apps-akka=./repos/bigbluebutton/akka-bbb-apps
args: args:
BBB_BUILD_TAG: {{ .Env.BBB_BUILD_TAG }} BBB_BUILD_TAG: bbb27-2023-06-13-java17
TAG_COMMON_MESSAGE: {{ .Env.TAG_COMMON_MESSAGE }} image: alangecker/bbb-docker-apps-akka:{{ .Env.TAG_BBB }}
TAG_APPS_AKKA: {{ .Env.TAG_APPS_AKKA }}
image: alangecker/bbb-docker-apps-akka:{{ .Env.TAG_APPS_AKKA }}
restart: unless-stopped restart: unless-stopped
depends_on: depends_on:
- redis - redis
@ -303,7 +379,7 @@ services:
periodic: periodic:
build: mod/periodic build: mod/periodic
image: alangecker/bbb-docker-periodic:v2.5.0-rc.1 image: alangecker/bbb-docker-periodic:v2.7.0
restart: unless-stopped restart: unless-stopped
depends_on: depends_on:
- mongodb - mongodb
@ -326,16 +402,21 @@ services:
recordings: recordings:
build: build:
context: mod/recordings context: mod/recordings
additional_contexts:
- record-core=./repos/bigbluebutton/record-and-playback/core
- presentation=./repos/bigbluebutton/record-and-playback/presentation
- bbb-conf=./repos/bigbluebutton/bigbluebutton-config
args: args:
BBB_BUILD_TAG: {{ .Env.BBB_BUILD_TAG }} BBB_BUILD_TAG: bbb27-2023-06-13-java17
TAG_RECORDINGS: {{ .Env.TAG_RECORDINGS }} TAG_BBB_PRESENTATION_VIDEO: "4.0.3"
image: alangecker/bbb-docker-recordings:{{ .Env.TAG_RECORDINGS }} image: alangecker/bbb-docker-recordings:{{ .Env.TAG_BBB }}
restart: unless-stopped restart: unless-stopped
depends_on: depends_on:
- redis - redis
- bbb-pads - bbb-pads
environment: environment:
DOMAIN: ${DOMAIN} DOMAIN: ${DOMAIN}
SHARED_SECRET: ${SHARED_SECRET}
volumes: volumes:
- bigbluebutton:/var/bigbluebutton - bigbluebutton:/var/bigbluebutton
- vol-freeswitch:/var/freeswitch/meetings - vol-freeswitch:/var/freeswitch/meetings
@ -352,7 +433,10 @@ services:
{{ if isTrue .Env.ENABLE_WEBHOOKS }} {{ if isTrue .Env.ENABLE_WEBHOOKS }}
# webhooks # webhooks
webhooks: webhooks:
build: mod/webhooks build:
context: mod/webhooks
additional_contexts:
- src=./repos/bbb-webhooks
image: alangecker/bbb-docker-webhooks:{{ .Env.TAG_WEBHOOKS }} image: alangecker/bbb-docker-webhooks:{{ .Env.TAG_WEBHOOKS }}
restart: unless-stopped restart: unless-stopped
environment: environment:
@ -377,12 +461,17 @@ services:
{{else}} {{else}}
- ./mod/https/site-ipv4only.conf:/etc/nginx/conf.d/bbb-docker.conf - ./mod/https/site-ipv4only.conf:/etc/nginx/conf.d/bbb-docker.conf
{{end}} {{end}}
{{ if isTrue .Env.DEV_MODE }}
# allow bbb api access without https
- ./mod/https/force-https.conf:/usr/local/openresty/nginx/conf/force-https.conf
{{end}}
environment: environment:
{{ if isTrue .Env.DEV_MODE }} {{ if isTrue .Env.DEV_MODE }}
ALLOWED_DOMAINS: "" ALLOWED_DOMAINS: ""
{{else}} {{else}}
ALLOWED_DOMAINS: ${DOMAIN} ALLOWED_DOMAINS: ${DOMAIN}
{{end}} {{end}}
RESOLVER_ADDRESS: ${RESOLVER_ADDRESS:-9.9.9.9}
network_mode: host network_mode: host
{{end}} {{end}}
@ -414,29 +503,35 @@ services:
{{ if isTrue .Env.ENABLE_GREENLIGHT }} {{ if isTrue .Env.ENABLE_GREENLIGHT }}
# greenlight # greenlight
greenlight: greenlight:
image: bigbluebutton/greenlight:v2 image: bigbluebutton/greenlight:v3.0.6.1
restart: unless-stopped restart: unless-stopped
env_file: .env env_file: .env
depends_on:
- postgres
- redis
environment: environment:
DB_ADAPTER: postgresql DATABASE_URL: postgres://postgres:${POSTGRESQL_SECRET:-password}@postgres:5432/greenlight-v3
DB_HOST: postgres REDIS_URL: redis://redis:6379
DB_NAME: greenlight
DB_USERNAME: postgres
DB_PASSWORD: ${POSTGRESQL_SECRET:-password}
{{ if isTrue .Env.DEV_MODE }} {{ if isTrue .Env.DEV_MODE }}
BIGBLUEBUTTON_ENDPOINT: http://10.7.7.1:48087/bigbluebutton/api/ BIGBLUEBUTTON_ENDPOINT: http://10.7.7.1/bigbluebutton/api
{{else}} {{else}}
BIGBLUEBUTTON_ENDPOINT: https://${DOMAIN}/bigbluebutton/api/ BIGBLUEBUTTON_ENDPOINT: https://${DOMAIN}/bigbluebutton/api
{{end}} {{end}}
BIGBLUEBUTTON_SECRET: ${SHARED_SECRET} BIGBLUEBUTTON_SECRET: ${SHARED_SECRET}
SECRET_KEY_BASE: ${RAILS_SECRET} SECRET_KEY_BASE: ${RAILS_SECRET}
ports: RELATIVE_URL_ROOT: /
- 10.7.7.1:5000:80 volumes:
- ./greenlight-data:/usr/src/app/storage
networks:
bbb-net:
ipv4_address: 10.7.7.21
postgres: postgres:
image: postgres:12-alpine image: postgres:12-alpine
restart: unless-stopped restart: unless-stopped
environment: environment:
POSTGRES_DB: greenlight POSTGRES_DB: greenlight-v3
POSTGRES_USER: postgres POSTGRES_USER: postgres
POSTGRES_PASSWORD: ${POSTGRESQL_SECRET:-password} POSTGRES_PASSWORD: ${POSTGRESQL_SECRET:-password}
healthcheck: healthcheck:
@ -446,6 +541,9 @@ services:
retries: 5 retries: 5
volumes: volumes:
- ./postgres-data:/var/lib/postgresql/data - ./postgres-data:/var/lib/postgresql/data
networks:
bbb-net:
ipv4_address: 10.7.7.22
{{end}} {{end}}
{{ if isTrue .Env.ENABLE_PROMETHEUS_EXPORTER }} {{ if isTrue .Env.ENABLE_PROMETHEUS_EXPORTER }}
@ -464,6 +562,11 @@ services:
volumes: volumes:
- bigbluebutton:/var/bigbluebutton:ro - bigbluebutton:/var/bigbluebutton:ro
{{end}} {{end}}
# the exporter requires /etc/bigbluebutton/bigbluebutton-release
tmpfs:
- /etc/bigbluebutton:mode=777
entrypoint: sh -c 'echo "BIGBLUEBUTTON_RELEASE=2.7.3" > /etc/bigbluebutton/bigbluebutton-release && python server.py'
{{end}} {{end}}

View File

@ -1,81 +1,46 @@
# bbb-docker Development # bbb-docker Development
## Basics ## Basics
normally people start BBB with the pre-built docker images, but for developing you need to build them by yourself. For that you need to ensure that the submodules are also checked out: normally people start BBB with the pre-built docker images, but for developing you need to build them by yourself. For that you need to ensure that the submodules are also checked out
```sh ```sh
$ git submodule update --init $ git clone --recurse-submodules https://github.com/bigbluebutton/docker.git bbb-dev
$ cd bbb-dev
``` ```
## Running ## Running
you can run bbb-docker locally without any certificate issues with following `.env` configurations: you can now run bbb-docker locally by simply starting
``` ```sh
DEV_MODE=true $ ./scripts/dev
ENABLE_HTTPS_PROXY=true
#ENABLE_COTURN=true
#ENABLE_GREENLIGHT=true
#ENABLE_WEBHOOKS=true
#ENABLE_PROMETHEUS_EXPORTER=true
#ENABLE_RECORDING=true
DOMAIN=10.7.7.1
EXTERNAL_IPv4=10.7.7.1
STUN_IP=216.93.246.18
STUN_PORT=3478
TURN_SERVER=turns:localhost:5349?transport=tcp
TURN_SECRET=SuperTurnSecret
SHARED_SECRET=SuperSecret
ETHERPAD_API_KEY=SuperEtherpadKey
RAILS_SECRET=SuperRailsSecret
# ====================================
# CUSTOMIZATION
# ====================================
[... add rest of sample.env here ...]
``` ```
- regenerate `docker-compose.yml` \ ### Hints
- the html5 component will watch and automatically reload on any changes 🚀
- if you change anything in the other components, you need to
* manually rebuilt it \
`$ docker compose build CONTAINERNAME`
* restart it \
`$ docker compose up -d CONTAINERNAME`
- if you change any variable in .env, always run following to rebuild the `docker-compose.yml``
`$ ./scripts/generate-compose` `$ ./scripts/generate-compose`
- build the images \
`$ docker-compose build`
- you can than start it with \
`$ docker-compose up -d`
- view the logs with \ - view the logs with \
`$ docker-compose logs -f` `$ docker compose logs -f`
- and access the API via \ - and access the API via \
https://mconf.github.io/api-mate/#server=https://10.7.7.1/bigbluebutton/api&sharedSecret=SuperSecret https://mconf.github.io/api-mate/#server=https://10.7.7.1/bigbluebutton/api&sharedSecret=SuperSecret
* At some point your browser will warn you about an invalid certificate, but you can press _"Accept the Risk and Continue" / "Proceed to 10.7.7.1 (unsafe)"_ * At some point your browser will warn you about an invalid certificate, but you can press _"Accept the Risk and Continue" / "Proceed to 10.7.7.1 (unsafe)"_
## Notes ## Notes
- Joining a room via Greenlight currently leads to a "401 session not found" error (see https://github.com/alangecker/bigbluebutton-docker/issues/66). Use the API Mate instead - Due to the self signed ssl certificate it is currently not possible to notify greenlight about recordings in dev mode
## Changes
- After doing some changes you usually must...
- recreate `docker-compose.yml` \
`$ ./scripts/generate-compose`
* rebuild the image(s): \
`$ docker-compose build [containername]`
* restart changes image(s): \
`$ docker-compose up -d`
## How to do create a new update for a newer BBB release? ## How to do create a new update for a newer BBB release?
This always consists out of following steps This always consists out of following steps
1. **Get an understanding about changes that happened and find out what changes to bbb-docker that require.** \ 1. **Get an understanding about changes that happened and find out what changes to bbb-docker that require.** \
* main source for that are the release notes in https://github.com/bigbluebutton/bigbluebutton/releases * main source for that are the release notes in https://github.com/bigbluebutton/bigbluebutton/releases
2. **Apply these changes to this project.** 2. **Apply these changes to this project.**
* Often you only need to update the TAGS in `tags.env` * Often you only need to checkout the git submodules to the specific release tag
* make sure only to switch to a newer tag if there were changes made avoid creating new (partialy big) images unnecessarily * List of all submodules: `git submodule`
* Also update submodules to the new state.
* List of all submodules `git submodule`
* for the main submodules you can use `./scripts/checkout-submodules` to checkout the tags specified in `tags.env`
3. Test everything (with firefox **and** chromium/chrome) 3. Test everything (with firefox **and** chromium/chrome)
* Audio * Audio
* Video * Video

View File

@ -1,11 +1,22 @@
# How To Upgrade bbb-docker # How To Upgrade bbb-docker
### Upgrading `v2.3.x` -> `v2.4.x` ### Upgrading from `v2.6.x`
*Breaking change:* The nginx port changes from `8080` to the less common port `48087`, to avoid port conflicts (see [#133](https://github.com/bigbluebutton/docker/issues/133)). If you use an reverse proxy not included in this repo, ensure to update your config accordingly! - **Breaking change:** We use now Docker Compose V2
* make sure you have docker ≥ 23.0 installed (`$ docker -v`)
* update all usages of `docker-compose` to `docker compose` in your scripts
apart from that follow the guide (_within v2.7.x_) below.
### Upgrading from `v2.5.x`
- **Breaking change:** Greenlight got fully rewritten
* it is starting as a fresh installation. you can migrate your data with `./scripts/greenlight-migrate-v2-v3`
* some greenlight settings under `.env` have changed. compare your version with `sample.env`
* it is now served directly under `/` and not in `/b`. If you use an reverse proxy not included in this repo, ensure to update your config accordingly!
apart from that follow the guide below. apart from that follow the guide below.
### within `v2.4.x` or `v2.3.x` ### within `v2.7.x`
#### Backup #### Backup
if you use greenlight, create a database backup first if you use greenlight, create a database backup first
```bash ```bash
@ -18,5 +29,5 @@ docker exec -t docker_postgres_1 pg_dumpall -c -U postgres > /root/greenlight_`d
./scripts/upgrade ./scripts/upgrade
# restart updated services # restart updated services
docker-compose up -d docker compose up -d --no-build
``` ```

View File

@ -1,20 +1,16 @@
ARG BBB_BUILD_TAG ARG BBB_BUILD_TAG
FROM gitlab.senfcall.de:5050/senfcall-public/docker-bbb-build:$BBB_BUILD_TAG AS builder FROM bigbluebutton/bbb-build:$BBB_BUILD_TAG AS builder
ARG TAG_COMMON_MESSAGE COPY --from=src-common-message / /bbb-common-message
# download bbb-common-message # build bbb-common-message
RUN svn checkout https://github.com/bigbluebutton/bigbluebutton/tags/$TAG_COMMON_MESSAGE/bbb-common-message /bbb-common-message \ RUN cd /bbb-common-message && ./deploy.sh
&& cd /bbb-common-message \
&& ./deploy.sh \
&& rm -rf /bbb-common-message
# =================================================== # ===================================================
ARG TAG_APPS_AKKA ARG TAG_APPS_AKKA
RUN svn checkout https://github.com/bigbluebutton/bigbluebutton/tags/$TAG_APPS_AKKA/akka-bbb-apps /source \ COPY --from=src-apps-akka / /source
&& rm -rf /source/.svn
# compile and unzip bin # compile and unzip bin
RUN cd /source \ RUN cd /source \

View File

@ -1,4 +1,4 @@
FROM openjdk:11-jre-slim-bullseye FROM eclipse-temurin:17-jre-jammy
RUN apt-get update && apt-get install -y \ RUN apt-get update && apt-get install -y \
wget unzip gosu locales \ wget unzip gosu locales \

View File

@ -1,16 +1,16 @@
FROM node:14.19.1-bullseye-slim AS builder FROM node:18-bullseye-slim AS builder
COPY ./bbb-pads /bbb-pads COPY --from=src / /bbb-pads
RUN cd /bbb-pads && rm -r .git && npm install --production RUN cd /bbb-pads && rm -r .git && npm install --production
RUN chmod 777 /bbb-pads/config RUN chmod 777 /bbb-pads/config
# ------------------------------ # ------------------------------
FROM node:14.19.1-bullseye-slim FROM node:18-bullseye-slim
RUN apt update && apt install -y jq moreutils \ RUN apt update && apt install -y jq moreutils \
&& useradd --uid 2003 --user-group bbb-pads && useradd --uid 2003 --create-home --user-group bbb-pads
COPY --from=builder /bbb-pads /bbb-pads COPY --from=builder /bbb-pads /bbb-pads
USER bbb-pads USER bbb-pads

View File

@ -1,29 +1,19 @@
ARG BBB_BUILD_TAG ARG BBB_BUILD_TAG
FROM gitlab.senfcall.de:5050/senfcall-public/docker-bbb-build:$BBB_BUILD_TAG AS builder FROM bigbluebutton/bbb-build:$BBB_BUILD_TAG AS builder
ARG TAG_COMMON_MESSAGE COPY --from=src-common-message / /bbb-common-message
# download bbb-common-message # build bbb-common-message
RUN svn checkout https://github.com/bigbluebutton/bigbluebutton/tags/$TAG_COMMON_MESSAGE/bbb-common-message /bbb-common-message \ RUN cd /bbb-common-message && ./deploy.sh
&& cd /bbb-common-message \
&& ./deploy.sh \
&& rm -rf /bbb-common-message
# =================================================== # ===================================================
ARG TAG_BBB_WEB
# download bbb-common-web COPY --from=src-common-web / /bbb-common-web
RUN svn checkout https://github.com/bigbluebutton/bigbluebutton/tags/$TAG_BBB_WEB/bbb-common-web /bbb-common-web \ # build bbb-common-web
&& rm -rf /bbb-common-message/.svn RUN cd /bbb-common-web && ./deploy.sh
# compile bbb-common-web COPY --from=src-web / /bbb-web
RUN cd /bbb-common-web \
&& ./deploy.sh
# download bbb-web
RUN svn checkout https://github.com/bigbluebutton/bigbluebutton/tags/$TAG_BBB_WEB/bigbluebutton-web /bbb-web \
&& rm -rf /bbb-web/.svn
# compile bbb-web # compile bbb-web
RUN cd /bbb-web && grails assemble RUN cd /bbb-web && grails assemble
@ -38,7 +28,7 @@ RUN unzip -q /bbb-web/build/libs/bigbluebutton-0.10.0.war -d /dist
# =================================================== # ===================================================
FROM alangecker/bbb-docker-base-java FROM alangecker/bbb-docker-base-java
# add blank presentation files and allow conversation to pdf/svg # add blank presentation files and allow conversion to pdf/svg
RUN mkdir -p /usr/share/bigbluebutton/blank \ RUN mkdir -p /usr/share/bigbluebutton/blank \
&& cd /usr/share/bigbluebutton/blank \ && cd /usr/share/bigbluebutton/blank \
&& wget \ && wget \

View File

@ -24,6 +24,6 @@ cd /usr/share/bbb-web/
dockerize \ dockerize \
-template /etc/bigbluebutton/bbb-web.properties.tmpl:/etc/bigbluebutton/bbb-web.properties \ -template /etc/bigbluebutton/bbb-web.properties.tmpl:/etc/bigbluebutton/bbb-web.properties \
-template /usr/share/bbb-web/WEB-INF/classes/spring/turn-stun-servers.xml.tmpl:/usr/share/bbb-web/WEB-INF/classes/spring/turn-stun-servers.xml \ -template /usr/share/bbb-web/WEB-INF/classes/spring/turn-stun-servers.xml.tmpl:/usr/share/bbb-web/WEB-INF/classes/spring/turn-stun-servers.xml \
gosu bigbluebutton java -Dgrails.env=prod -Dserver.address=0.0.0.0 -Dserver.port=8090 -Xms384m -Xmx384m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/bigbluebutton/diagnostics -cp WEB-INF/lib/*:/:WEB-INF/classes/:. org.springframework.boot.loader.WarLauncher gosu bigbluebutton java -Dgrails.env=prod -Dserver.address=0.0.0.0 -Dserver.port=8090 -Dspring.main.allow-circular-references=true -Xms384m -Xmx384m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/bigbluebutton/diagnostics -cp WEB-INF/lib/*:/:WEB-INF/classes/:. org.springframework.boot.loader.WarLauncher

View File

@ -1,26 +1,26 @@
FROM etherpad/etherpad:1.8.18 ARG TAG_ETHERPAD
FROM etherpad/etherpad:$TAG_ETHERPAD
USER root USER root
RUN apt-get update \ RUN apk add git curl
&& apt-get install -y git curl
USER etherpad USER etherpad
RUN npm install \ RUN npm install \
ep_cursortrace@3.1.16 \ ep_cursortrace@3.1.16 \
git+https://github.com/mconf/ep_pad_ttl.git#360136cd38493dd698435631f2373cbb7089082d \ git+https://github.com/mconf/ep_pad_ttl.git#360136cd38493dd698435631f2373cbb7089082d \
git+https://github.com/mconf/ep_redis_publisher.git#a30a48e4bc1e501b5b102884b9a0b26c30798484 \ git+https://github.com/mconf/ep_redis_publisher.git#2b6e47c1c59362916a0b2961a29b259f2977b694 \
ep_disable_chat@0.0.8 \ ep_disable_chat@0.0.8 \
ep_auth_session@1.1.1 \ ep_auth_session@1.1.1 \
# remove npm lockfile, because somehow it prevents etherpad from detecting the manual added plugin ep_bigbluebutton_patches # remove npm lockfile, because somehow it prevents etherpad from detecting the manual added plugin ep_bigbluebutton_patches
&& rm package-lock.json && rm package-lock.json package.json
# add skin from git submodule # add skin from git submodule
COPY --chown=etherpad:0 ./bbb-etherpad-skin /opt/etherpad-lite/src/static/skins/bigbluebutton COPY --chown=etherpad:0 --from=skin / /opt/etherpad-lite/src/static/skins/bigbluebutton
# add plugin from git submodule # add plugin from git submodule
COPY --chown=etherpad:0 ./bbb-etherpad-plugin /opt/etherpad-lite/node_modules/ep_bigbluebutton_patches COPY --chown=etherpad:0 --from=plugin / /opt/etherpad-lite/node_modules/ep_bigbluebutton_patches
COPY settings.json /opt/etherpad-lite/settings.json COPY settings.json /opt/etherpad-lite/settings.json
COPY etherpad-export.sh /etherpad-export.sh COPY etherpad-export.sh /etherpad-export.sh

View File

@ -1,4 +1,4 @@
#!/bin/bash #!/bin/sh
echo $ETHERPAD_API_KEY > /tmp/apikey echo $ETHERPAD_API_KEY > /tmp/apikey
export NODE_ENV=production export NODE_ENV=production

View File

@ -1,4 +1,4 @@
#!/bin/bash #!/bin/sh
src="$8" src="$8"
dest="$(echo $8 | sed -E -e 's/html|odt/'$7'/')" dest="$(echo $8 | sed -E -e 's/html|odt/'$7'/')"
convertTo="$7" convertTo="$7"

View File

@ -89,7 +89,7 @@
* *
* "defaultPadText" : "${DEFAULT_PAD_TEXT}Line 1\nLine 2" * "defaultPadText" : "${DEFAULT_PAD_TEXT}Line 1\nLine 2"
*/ */
{ {
/* /*
* Name your instance! * Name your instance!
*/ */
@ -198,8 +198,7 @@
"dbType": "redis", "dbType": "redis",
"dbSettings": { "dbSettings": {
"host": "redis", "url": "redis://redis:6379"
"port": 6379
}, },
/* /*
@ -220,9 +219,10 @@
*/ */
/* /*
* The default text of a pad * The default text of a pad: A zero-width-space is used to work around an issue with Etherpad 1.9.1 where empty pads are not being created.
*/ * See: https://github.com/ether/etherpad-lite/issues/5787
"defaultPadText" : "", */
"defaultPadText" : "\u200b",
/* /*
* Default Pad behavior. * Default Pad behavior.
@ -539,7 +539,7 @@
"windowMs": 90000, "windowMs": 90000,
// maximum number of requests per IP to allow during the rate limit window // maximum number of requests per IP to allow during the rate limit window
"max": 10 "max": 16
}, },
/* /*
@ -597,7 +597,40 @@
"loglevel": "INFO", "loglevel": "INFO",
/* Override any strings found in locale directories */ /* Override any strings found in locale directories */
"customLocaleStrings": {}, "customLocaleStrings": {
"de": {
"pad.importExport.import_export": "Export",
"pad.toolbar.import_export.title": "Export zu verschiedenen Dateiformaten"
},
"en-gb": {
"pad.importExport.import_export": "Export",
"pad.toolbar.import_export.title": "Export to different file formats"
},
"en": {
"pad.importExport.import_export": "Export",
"pad.toolbar.import_export.title": "Export to different file formats"
},
"es": {
"pad.importExport.import_export": "Exportar",
"pad.toolbar.import_export.title": "Exportar a diferentes formatos de archivos"
},
"fr": {
"pad.importExport.import_export": "Exporter",
"pad.toolbar.import_export.title": "Exporter vers un format de fichier différent"
},
"it": {
"pad.importExport.import_export": "Esportazione",
"pad.toolbar.import_export.title": "Esporta a diversi formati di file"
},
"pt-br": {
"pad.importExport.import_export": "Exportar",
"pad.toolbar.import_export.title": "Exportar para diferentes formatos de arquivo"
},
"pt": {
"pad.importExport.import_export": "Exportar",
"pad.toolbar.import_export.title": "Exportar para diferentes formatos de ficheiro"
}
},
/* Disable Admin UI tests */ /* Disable Admin UI tests */
"enableAdminUITests": false "enableAdminUITests": false

View File

@ -1,66 +1,71 @@
FROM debian:bullseye-slim ARG BBB_BUILD_TAG
FROM bigbluebutton/bbb-build:$BBB_BUILD_TAG AS builder
# install dependencies COPY --from=freeswitch / /build/freeswitch
# install most recent git version for proper sparse-checkout support
# https://stackoverflow.com/questions/72223738/failed-to-initialize-sparse-checkout
RUN echo 'deb https://ppa.launchpadcontent.net/git-core/ppa/ubuntu focal main' > /etc/apt/sources.list.d/git-core-ppa.list && \
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A1715D88E1DF1F24 && \
apt-get update && \
apt-get install -y git
# get build files for bbb-freeswitch (build/packages-template/bbb-freeswitch-core/)
COPY --from=build-files / /build/
# mock files expected by build.sh
RUN mkdir -p /build/bbb-voice-conference/config/freeswitch/conf/ && \
touch \
/build/opts-build.sh \
/build/freeswitch.service.build \
/build/bbb-voice-conference/config/freeswitch/conf/a \
&& \
echo "" > /usr/local/bin/fpm
# build freeswitch
RUN cd /build && ./build.sh
# add english sounds
RUN mkdir -p /build/staging/opt/freeswitch/share/freeswitch && \
wget http://bigbluebutton.org/downloads/sounds.tar.gz -O sounds.tar.gz && \
tar xvfz sounds.tar.gz -C /build/staging/opt/freeswitch/share/freeswitch && \
wget https://gitlab.senfcall.de/senfcall-public/mute-and-unmute-sounds/-/archive/master/mute-and-unmute-sounds-master.zip && \
unzip mute-and-unmute-sounds-master.zip && \
cd mute-and-unmute-sounds-master/sounds && \
find . -name "*.wav" -exec /bin/bash -c "sox -v 0.3 {} /tmp/tmp.wav; cp /tmp/tmp.wav /build/staging/opt/freeswitch/share/freeswitch/sounds/en/us/callie/conference/{}" \;
# add bigblugbutton config
ARG TAG_FS_CONFIG
COPY --from=fs-config / /build/staging/opt/freeswitch/etc/freeswitch/
# ===============================================
# we are using ubuntu here, because libjpeg8 is required, but not available in debian
FROM ubuntu:20.04
RUN apt-get update && \ RUN apt-get update && \
apt-get install -y --no-install-recommends \ apt-get install -y \
subversion curl wget ca-certificates gnupg gnupg2 lsb-release unzip xmlstarlet wget iptables curl \
libfreetype6 libcurl4 libspeex1 libspeexdsp1 libopus0 libsndfile1 libopusfile0 liblua5.2-0 libjbig0 libldns2 libedit2 libtiff5 libpng16-16 \
&& \
# install libopusenc0
wget -O /tmp/libopusenc0_0.2.1-1bbb2_amd64.deb https://launchpad.net/~bigbluebutton/+archive/ubuntu/support/+files/libopusenc0_0.2.1-1bbb2_amd64.deb \
&& dpkg -i /tmp/libopusenc0_0.2.1-1bbb2_amd64.deb \
&& rm /tmp/libopusenc0_0.2.1-1bbb2_amd64.deb
# add dockerize
COPY --from=alangecker/bbb-docker-base-java /usr/local/bin/dockerize /usr/local/bin/dockerize COPY --from=alangecker/bbb-docker-base-java /usr/local/bin/dockerize /usr/local/bin/dockerize
# copy over built freeswitch & config
COPY --from=builder /build/staging/opt /opt
COPY --from=builder /build/staging/etc /etc
# install freeswitch RUN ldconfig && \
RUN wget -q -O /usr/share/keyrings/freeswitch-archive-keyring.gpg https://freeswitch-mirror.chandi.it/repo/deb/debian-release/signalwire-freeswitch-repo.gpg && \ ln -s /opt/freeswitch/conf /etc/freeswitch && \
echo 'deb [signed-by=/usr/share/keyrings/freeswitch-archive-keyring.gpg] http://freeswitch-mirror.chandi.it/repo/deb/debian-release/ bullseye main' > /etc/apt/sources.list.d/freeswitch.list && \ groupadd freeswitch && \
apt-get update && \ useradd --home-dir /opt/freeswitch --shell /usr/sbin/nologin -g freeswitch freeswitch
apt-get install -y \
freeswitch \
freeswitch-mod-commands \
freeswitch-mod-conference \
freeswitch-mod-console \
freeswitch-mod-dialplan-xml \
freeswitch-mod-dptools \
freeswitch-mod-event-socket \
freeswitch-mod-native-file \
freeswitch-mod-opusfile \
freeswitch-mod-opus \
freeswitch-mod-sndfile \
freeswitch-mod-spandsp \
freeswitch-mod-sofia \
freeswitch-sounds-en-us-callie \
iptables
# replace mute & unmute sounds
RUN wget -q https://gitlab.senfcall.de/senfcall-public/mute-and-unmute-sounds/-/archive/master/mute-and-unmute-sounds-master.zip && \
unzip mute-and-unmute-sounds-master.zip && \
cd mute-and-unmute-sounds-master/sounds/ && \
find . -name "*.wav" -exec /bin/bash -c "echo {};sox -v 0.3 {} /tmp/tmp.wav; mv /tmp/tmp.wav /usr/share/freeswitch/sounds/en/us/callie/conference/{}" \; && \
cd ../.. && \
rm -r mute-and-unmute-sounds-master mute-and-unmute-sounds-master.zip
# -- get official bbb freeswitch config
# we use svn for retrieving the files since the repo is quite large,
# git sparse-checkout is not yet available with buster and there
# is no other sane way of downloading a single directory via git
ARG TAG_FS_CONFIG
RUN svn checkout https://github.com/bigbluebutton/bigbluebutton/tags/$TAG_FS_CONFIG/bbb-voice-conference/config/freeswitch/conf /etc/freeswitch \
&& rm -rf /etc/freeswitch/.svn
# the current available freeswitch-mod-opusfile is broken,
# it can't write any .opus files. The fix provided in
# https://github.com/signalwire/freeswitch/pull/719/files
# is not sufficient as the module still comes without opus
# write support, so we rather switch to the binary built
# by bigbluebutton and add its dependencies
RUN wget -O /usr/lib/freeswitch/mod/mod_opusfile.so https://github.com/bbb-pkg/bbb-freeswitch-core/raw/43f3a47af1fcf5ea559e16bb28b900c925a7f2c3/opt/freeswitch/lib/freeswitch/mod/mod_opusfile.so \
&& wget -O /tmp/libopusenc0_0.2.1-1bbb1_amd64.deb https://launchpad.net/~bigbluebutton/+archive/ubuntu/support/+files/libopusenc0_0.2.1-1bbb1_amd64.deb \
&& dpkg -i /tmp/libopusenc0_0.2.1-1bbb1_amd64.deb \
&& rm /tmp/libopusenc0_0.2.1-1bbb1_amd64.deb
# add modifications
COPY ./conf /etc/freeswitch/
COPY ./entrypoint.sh /entrypoint.sh COPY ./entrypoint.sh /entrypoint.sh
COPY ./conf /etc/freeswitch/
ENTRYPOINT /entrypoint.sh ENTRYPOINT /entrypoint.sh

View File

@ -13,6 +13,7 @@
<load module="mod_commands"/> <load module="mod_commands"/>
<load module="mod_conference"/> <load module="mod_conference"/>
<load module="mod_dptools"/> <load module="mod_dptools"/>
<load module="mod_audio_fork"/>
<!-- Dialplan Interfaces --> <!-- Dialplan Interfaces -->
<load module="mod_dialplan_xml"/> <load module="mod_dialplan_xml"/>

View File

@ -54,7 +54,7 @@
for presence. for presence.
--> -->
<!-- Name of the db to use for this profile --> <!-- Name of the db to use for this profile -->
<!--<param name="dbname" value="share_presence"/>--> <param name="dbname" value="sqlite://memory://file:external-ipv6?mode=memory&amp;cache=shared"/>
<!--<param name="presence-hosts" value="$${domain}"/>--> <!--<param name="presence-hosts" value="$${domain}"/>-->
<!--<param name="force-register-domain" value="$${domain}"/>--> <!--<param name="force-register-domain" value="$${domain}"/>-->
<!--all inbound reg will stored in the db using this domain --> <!--all inbound reg will stored in the db using this domain -->

View File

@ -52,7 +52,7 @@
for presence. for presence.
--> -->
<!-- Name of the db to use for this profile --> <!-- Name of the db to use for this profile -->
<!--<param name="dbname" value="share_presence"/>--> <param name="dbname" value="sqlite://memory://file:external?mode=memory&amp;cache=shared"/>
<!--<param name="presence-hosts" value="$${domain}"/>--> <!--<param name="presence-hosts" value="$${domain}"/>-->
<!--<param name="force-register-domain" value="$${domain}"/>--> <!--<param name="force-register-domain" value="$${domain}"/>-->
<!--all inbound reg will stored in the db using this domain --> <!--all inbound reg will stored in the db using this domain -->

View File

@ -1,4 +1,4 @@
#!/bin/bash #!/bin/bash -e
# remove all SIP (port 5060) iptable rules # remove all SIP (port 5060) iptable rules
iptables -S INPUT | grep "\-\-dport 5060 " | cut -d " " -f 2- | xargs -rL1 iptables -D iptables -S INPUT | grep "\-\-dport 5060 " | cut -d " " -f 2- | xargs -rL1 iptables -D
@ -15,13 +15,19 @@ for IP in "${ADDR[@]}"; do
iptables -I INPUT -p udp --dport 5060 -s $IP -j ACCEPT iptables -I INPUT -p udp --dport 5060 -s $IP -j ACCEPT
done done
mkdir -p /var/freeswitch/meetings
chown -R freeswitch:daemon /var/freeswitch/meetings chown -R freeswitch:daemon /var/freeswitch/meetings
chmod 777 /var/freeswitch/meetings chmod 777 /var/freeswitch/meetings
chown -R freeswitch:daemon /opt/freeswitch/var
chown -R freeswitch:daemon /opt/freeswitch/etc
chmod -R g-rwx,o-rwx /opt/freeswitch/etc
# install freeswitch sounds if missing # install freeswitch sounds if missing
SOUNDS_DIR=/usr/share/freeswitch/sounds SOUNDS_DIR=/opt/freeswitch/share/freeswitch/sounds
if [ "$SOUNDS_LANGUAGE" == "de-de-daedalus3" ]; then if [ "$SOUNDS_LANGUAGE" == "en-us-callie" ]; then
# default, is already installed
echo ""
elif [ "$SOUNDS_LANGUAGE" == "de-de-daedalus3" ]; then
if [ ! -d "$SOUNDS_DIR/de/de/daedalus3" ]; then if [ ! -d "$SOUNDS_DIR/de/de/daedalus3" ]; then
echo "sounds package for de-de-daedalus3 not installed yet" echo "sounds package for de-de-daedalus3 not installed yet"
wget -O /tmp/freeswitch-german-soundfiles.zip https://github.com/Daedalus3/freeswitch-german-soundfiles/archive/master.zip wget -O /tmp/freeswitch-german-soundfiles.zip https://github.com/Daedalus3/freeswitch-german-soundfiles/archive/master.zip
@ -36,10 +42,24 @@ if [ "$SOUNDS_LANGUAGE" == "de-de-daedalus3" ]; then
fi fi
else else
SOUNDS_PACKAGE=$(echo "freeswitch-sounds-${SOUNDS_LANGUAGE}" | tr '[:upper:]' '[:lower:]') if [ ! -f $SOUNDS_DIR/$SOUNDS_LANGUAGE.installed ]; then
if ! dpkg -s $SOUNDS_PACKAGE >/dev/null 2>&1; then
echo "sounds package for $SOUNDS_LANGUAGE not installed yet" echo "sounds package for $SOUNDS_LANGUAGE not installed yet"
apt-get install $SOUNDS_PACKAGE
# get filename of latest release for this sound package
FILENAME=$(curl -s https://files.freeswitch.org/releases/sounds/ | grep -i $SOUNDS_LANGUAGE 2> /dev/null | awk -F'\"' '{print $8}' | grep -E '\-48000-.*\.gz$' | sort -V | tail -n 1)
if [ "$FILENAME" = "" ]; then
echo "Error: could not find sounds for language '$SOUNDS_LANGUAGE'"
echo "make sure to specify a value for SOUNDS_LANGUAGE which exists on https://files.freeswitch.org/releases/sounds/"
exit 1
fi
for bitrate in 8000 16000 32000 48000; do
URL=https://files.freeswitch.org/releases/sounds/$(echo $FILENAME | sed "s/48000/$bitrate/")
wget -O /tmp/sounds.tar.gz $URL
tar xvfz /tmp/sounds.tar.gz -C $SOUNDS_DIR
done
touch $SOUNDS_DIR/$SOUNDS_LANGUAGE.installed
fi fi
fi fi
@ -49,4 +69,4 @@ export SOUNDS_PATH=$SOUNDS_DIR/$(echo "$SOUNDS_LANGUAGE" | sed 's|-|/|g')
dockerize \ dockerize \
-template /etc/freeswitch/vars.xml.tmpl:/etc/freeswitch/vars.xml \ -template /etc/freeswitch/vars.xml.tmpl:/etc/freeswitch/vars.xml \
-template /etc/freeswitch/autoload_configs/conference.conf.xml.tmpl:/etc/freeswitch/autoload_configs/conference.conf.xml \ -template /etc/freeswitch/autoload_configs/conference.conf.xml.tmpl:/etc/freeswitch/autoload_configs/conference.conf.xml \
/usr/bin/freeswitch -u freeswitch -g daemon -nonat -nf /opt/freeswitch/bin/freeswitch -u freeswitch -g daemon -nonat -nf

View File

@ -1,24 +1,16 @@
ARG BBB_BUILD_TAG ARG BBB_BUILD_TAG
FROM gitlab.senfcall.de:5050/senfcall-public/docker-bbb-build:$BBB_BUILD_TAG AS builder FROM bigbluebutton/bbb-build:$BBB_BUILD_TAG AS builder
ARG TAG_COMMON_MESSAGE COPY --from=src-common-message / /bbb-common-message
# download bbb-common-message # build bbb-common-message
RUN svn checkout https://github.com/bigbluebutton/bigbluebutton/tags/$TAG_COMMON_MESSAGE/bbb-common-message /bbb-common-message \ RUN cd /bbb-common-message && ./deploy.sh
&& cd /bbb-common-message \
&& ./deploy.sh \
&& rm -rf /bbb-common-message
# =================================================== # ===================================================
ARG TAG_FSESL_AKKA COPY --from=src-fsesl-client / /bbb-fsesl-client
RUN svn checkout https://github.com/bigbluebutton/bigbluebutton/tags/$TAG_FSESL_AKKA/bbb-fsesl-client /bbb-fsesl-client \ RUN cd /bbb-fsesl-client && ./deploy.sh
&& rm -rf /bbb-fsesl-client/.svn
RUN cd /bbb-fsesl-client \ COPY --from=src-fsesl-akka / /source
&& ./deploy.sh
RUN svn checkout https://github.com/bigbluebutton/bigbluebutton/tags/$TAG_FSESL_AKKA/akka-bbb-fsesl /source \
&& rm -rf /source/.svn
# compile and unzip bin # compile and unzip bin
RUN cd /source \ RUN cd /source \

View File

@ -1,34 +1,43 @@
ARG BBB_BUILD_TAG ARG BBB_BUILD_TAG
FROM gitlab.senfcall.de:5050/senfcall-public/docker-bbb-build:$BBB_BUILD_TAG AS builder FROM bigbluebutton/bbb-build:$BBB_BUILD_TAG AS builder
# RUN groupadd -g 2000 meteor && useradd -m -u 2001 -g meteor meteor # RUN groupadd -g 2000 meteor && useradd -m -u 2001 -g meteor meteor
# USER meteor # USER meteor
ARG TAG_HTML5 COPY --from=source ./ /source
RUN svn checkout https://github.com/bigbluebutton/bigbluebutton/tags/$TAG_HTML5/bigbluebutton-html5 /source \ RUN cd /source && meteor npm ci --production \
&& cd /source \
&& meteor npm ci --production \
&& METEOR_DISABLE_OPTIMISTIC_CACHING=1 meteor build --architecture os.linux.x86_64 --allow-superuser --directory /app \ && METEOR_DISABLE_OPTIMISTIC_CACHING=1 meteor build --architecture os.linux.x86_64 --allow-superuser --directory /app \
&& rm -rf /source && rm -rf /source
RUN cd /app/bundle/programs/server \ RUN cd /app/bundle/programs/server \
&& npm install --production && npm install --production
RUN sed -i "s/VERSION/$TAG_HTML5/" /app/bundle/programs/web.browser/head.html \ RUN mkdir -p /app/bundle/programs/web.browser/app/files && \
cp /app/bundle/programs/server/npm/node_modules/@fontsource/*/files/*.woff* /app/bundle/programs/web.browser/app/files/
ARG TAG_BBB
RUN sed -i "s/VERSION/$TAG_BBB/" /app/bundle/programs/web.browser/head.html \
&& find /app/bundle/programs/web.browser -name '*.js' -exec gzip -k -f -9 '{}' \; \ && find /app/bundle/programs/web.browser -name '*.js' -exec gzip -k -f -9 '{}' \; \
&& find /app/bundle/programs/web.browser -name '*.css' -exec gzip -k -f -9 '{}' \; \ && find /app/bundle/programs/web.browser -name '*.css' -exec gzip -k -f -9 '{}' \; \
&& find /app/bundle/programs/web.browser -name '*.wasm' -exec gzip -k -f -9 '{}' \; && find /app/bundle/programs/web.browser -name '*.wasm' -exec gzip -k -f -9 '{}' \;
# ------------------------------ # ------------------------------
FROM node:14.19.1-alpine FROM node:14.21-bullseye-slim
RUN apt-get update && apt-get install -y gosu
# add user & group
RUN groupadd -g 2000 meteor \
&& useradd -m -u 2001 -g meteor meteor
RUN addgroup -g 2000 meteor && \
adduser -D -u 2001 -G meteor meteor && \
apk add su-exec
COPY --from=alangecker/bbb-docker-base-java /usr/local/bin/dockerize /usr/local/bin/dockerize COPY --from=alangecker/bbb-docker-base-java /usr/local/bin/dockerize /usr/local/bin/dockerize
COPY --from=builder --chown=meteor:meteor /app/bundle /app COPY --from=builder --chown=meteor:meteor /app/bundle /app
COPY entrypoint.sh /entrypoint.sh COPY entrypoint.sh /entrypoint.sh
COPY bbb-html5.yml /app/bbb-html5.yml.tmpl COPY bbb-html5.yml /app/bbb-html5.yml.tmpl
# expose TAG_BBB in container for the version display
ARG TAG_BBB
ENV TAG_BBB $TAG_BBB
ENTRYPOINT ["/entrypoint.sh"] ENTRYPOINT ["/entrypoint.sh"]

16
mod/html5/Dockerfile.dev Normal file
View File

@ -0,0 +1,16 @@
ARG BBB_BUILD_TAG
FROM bigbluebutton/bbb-build:$BBB_BUILD_TAG AS builder
RUN curl https://install.meteor.com/\?release\=2.13 | sh
COPY --from=alangecker/bbb-docker-base-java /usr/local/bin/dockerize /usr/local/bin/dockerize
# make /root/.meteor accessible for user
RUN chmod 777 /root /root/.meteor
COPY entrypoint.dev.sh /entrypoint.dev.sh
ENTRYPOINT ["/entrypoint.dev.sh"]

View File

@ -1,6 +1,7 @@
public: public:
app: app:
bbbServerVersion: {{ .Env.TAG_HTML5 }}-docker html5ClientBuild: {{ .Env.TAG_BBB }}
bbbServerVersion: {{ .Env.TAG_BBB }}-docker
listenOnlyMode: {{ .Env.LISTEN_ONLY_MODE }} listenOnlyMode: {{ .Env.LISTEN_ONLY_MODE }}
skipCheck: {{ .Env.DISABLE_ECHO_TEST }} skipCheck: {{ .Env.DISABLE_ECHO_TEST }}
clientTitle: {{ .Env.CLIENT_TITLE }} clientTitle: {{ .Env.CLIENT_TITLE }}

31
mod/html5/entrypoint.dev.sh Executable file
View File

@ -0,0 +1,31 @@
#!/bin/sh -e
# use /tmp as home dir as writeable directory for whatever UID we get
export HOME=/tmp
export MONGO_OPLOG_URL=mongodb://10.7.7.6/local
export MONGO_URL=mongodb://10.7.7.6/meteor
export ROOT_URL=http://127.0.0.1/html5client
export BIND_IP=0.0.0.0
export LANG=en_US.UTF-8
export BBB_HTML5_LOCAL_SETTINGS=/tmp/bbb-html5.yml
echo "DEV_MODE=true, disable TLS certificate rejecting"
export NODE_TLS_REJECT_UNAUTHORIZED=0
if [ ! -f "/tmp/.meteor/copy-done" ]; then
echo "# copying over .meteor from docker image... (this might take some minutes)"
cp -a /root/.meteor/* /tmp/.meteor
touch /tmp/.meteor/copy-done
fi
cd /app
echo "# meteor npm install"
meteor npm install
echo "# npm start"
dockerize \
-template /tmp/bbb-html5.yml.tmpl:/tmp/bbb-html5.yml \
npm start

View File

@ -1,4 +1,4 @@
#!/bin/sh #!/bin/bash
set -e set -e
cd /app cd /app
@ -11,7 +11,7 @@ export BIND_IP=0.0.0.0
export LANG=en_US.UTF-8 export LANG=en_US.UTF-8
export INSTANCE_MAX=1 export INSTANCE_MAX=1
export ENVIRONMENT_TYPE=production export ENVIRONMENT_TYPE=production
export NODE_VERSION=node-v14.19.1-linux-x64 export NODE_VERSION=node-v14.21.1-linux-x64
export BBB_HTML5_LOCAL_SETTINGS=/app/bbb-html5.yml export BBB_HTML5_LOCAL_SETTINGS=/app/bbb-html5.yml
if [ "$DEV_MODE" == true ]; then if [ "$DEV_MODE" == true ]; then
@ -39,5 +39,5 @@ fi
dockerize \ dockerize \
-template /app/bbb-html5.yml.tmpl:/app/bbb-html5.yml \ -template /app/bbb-html5.yml.tmpl:/app/bbb-html5.yml \
su-exec meteor \ gosu meteor \
node --max-old-space-size=2048 --max_semi_space_size=128 main.js $PARAM node --max-old-space-size=2048 --max_semi_space_size=128 main.js $PARAM

View File

@ -0,0 +1,15 @@
# overwriting force-https.conf from valian/docker-nginx-auto-ssl
location /bigbluebutton/api/join {
return 301 https://$host$request_uri;
}
# allow /api calls without redirecting to https
location /bigbluebutton/api {
proxy_pass https://127.0.0.1:443;
proxy_ssl_verify off;
}
location / {
return 301 https://$host$request_uri;
}

View File

@ -1,6 +1,6 @@
FROM eugenmayer/jodconverter:rest FROM ghcr.io/jodconverter/jodconverter-examples:rest
RUN echo "ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true" | debconf-set-selections RUN echo "ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true" | debconf-set-selections
RUN sed -i 's/main/main contrib/' /etc/apt/sources.list && apt-get update RUN sed -i 's/main/main contrib/' /etc/apt/sources.list.d/debian.sources && apt-get update
RUN apt-get update && apt -y install --no-install-recommends \ RUN apt-get update && apt -y install --no-install-recommends \
fonts-arkpandora \ fonts-arkpandora \
fonts-crosextra-carlito \ fonts-crosextra-carlito \

View File

@ -1,19 +1,17 @@
FROM node:14-alpine AS builder ARG BBB_BUILD_TAG
FROM bigbluebutton/bbb-build:$BBB_BUILD_TAG AS builder
RUN apk add subversion git
# -------------------- # --------------------
ARG TAG_LEARNING_DASHBOARD COPY --from=src-learning-dashboard / /bbb-learning-dashboard
RUN svn checkout https://github.com/bigbluebutton/bigbluebutton/tags/$TAG_LEARNING_DASHBOARD/bbb-learning-dashboard /bbb-learning-dashboard && rm -r /bbb-learning-dashboard/.svn
RUN cd /bbb-learning-dashboard && npm ci && npm run build RUN cd /bbb-learning-dashboard && npm ci && npm run build
COPY ./bbb-playback /bbb-playback COPY --from=src-playback / /bbb-playback
RUN cd /bbb-playback && npm ci && npm run build RUN cd /bbb-playback && npm install && npm run-script build
# -------------------- # --------------------
FROM nginx:1.21-alpine FROM nginx:1.25-alpine
COPY --from=builder /bbb-learning-dashboard/build /www/learning-analytics-dashboard/ 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 /bbb-playback/build /www/playback/presentation/2.3

View File

@ -0,0 +1,6 @@
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";
}

View File

@ -6,11 +6,12 @@ location @html5client {
} }
location /html5client/locales { location /html5client/locales {
alias /html5-static/app/locales; alias /html5-static/app/locales;
} }
location /html5client/compatibility { location /html5client/compatibility {
alias /html5-static/app/compatibility; gzip_static on;
alias /html5-static/app/compatibility;
} }
location /html5client/resources { location /html5client/resources {
@ -25,6 +26,10 @@ location /html5client/fonts {
alias /html5-static/app/fonts; alias /html5-static/app/fonts;
} }
location /html5client/files {
alias /html5-static/app/files;
}
location /html5client/wasm { location /html5client/wasm {
types { types {
application/wasm wasm; application/wasm wasm;
@ -33,8 +38,12 @@ location /html5client/wasm {
alias /html5-static/app/wasm; alias /html5-static/app/wasm;
} }
location /html5client/ { location /html5client {
gzip_static on;
alias /html5-static; alias /html5-static;
try_files $uri @html5client; try_files $uri @html5client;
} }
location /html5client/sockjs {
try_files $uri @html5client;
}

View File

@ -1,34 +0,0 @@
# Routes requests to Greenlight based on the '/b' prefix.
# Use this file to route '/b' paths on your BigBlueButton server
# to the Greenlight application. If you are using a different
# subpath, you should change it here.
location /b {
proxy_pass http://host.docker.internal:5000;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Ssl on;
proxy_http_version 1.1;
}
location /b/cable {
proxy_pass http://host.docker.internal:5000;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Ssl on;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_http_version 1.1;
proxy_read_timeout 6h;
proxy_send_timeout 6h;
client_body_timeout 6h;
send_timeout 6h;
}
# this is necessary for the preupload_presentation feature
location /rails/active_storage {
return 301 /b$request_uri;
}

View File

@ -1,5 +1,5 @@
location ~ /learning-analytics-dashboard/([0-9a-f]+-[0-9]+)/(.*) { location ~ /learning-analytics-dashboard/([0-9a-f]+-[0-9]+)/(.*) {
root /var/bigbluebutton/learning-analytics-dashboard/; alias /var/bigbluebutton/learning-dashboard/$1/$2;
autoindex off; autoindex off;
} }

View File

@ -0,0 +1,21 @@
# This file is part of BigBlueButton.
#
# Copyright © BigBlueButton Inc. and by respective authors.
#
# BigBlueButton is free software: you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by the
# Free Software Foundation, either version 3.0 of the License, or (at your
# option) any later version.
#
# BigBlueButton is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
# details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with BigBlueButton. If not, see <https://www.gnu.org/licenses>.
location /playback/video/ {
alias /var/bigbluebutton/published/video/;
index index.html index.htm;
}

View File

@ -0,0 +1,22 @@
#
# BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
#
# Copyright (c) 2012 BigBlueButton Inc. and by respective authors (see below).
#
# This program is free software; you can redistribute it and/or modify it under the
# terms of the GNU Lesser General Public License as published by the Free Software
# Foundation; either version 3.0 of the License, or (at your option) any later
# version.
#
# BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License along
# with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
#
location /recording/screenshare {
alias /var/bigbluebutton/published/screenshare;
index index.html index.htm;
}

View File

@ -0,0 +1,28 @@
#
# BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
#
# Copyright (c) 2012 BigBlueButton Inc. and by respective authors (see below).
#
# This program is free software; you can redistribute it and/or modify it under the
# terms of the GNU Lesser General Public License as published by the Free Software
# Foundation; either version 3.0 of the License, or (at your option) any later
# version.
#
# BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License along
# with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
#
location /playback/slides {
root /var/bigbluebutton;
index index.html index.htm;
}
location /slides {
root /var/bigbluebutton/published;
index index.html index.htm;
}

View File

@ -1,10 +0,0 @@
location /verto {
proxy_pass https://host.docker.internal:8082;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_read_timeout 6h;
proxy_send_timeout 6h;
client_body_timeout 6h;
send_timeout 6h;
}

View File

@ -9,32 +9,16 @@
# Workaround IE refusal to set cookies in iframe # Workaround IE refusal to set cookies in iframe
add_header P3P 'CP="No P3P policy available"'; add_header P3P 'CP="No P3P policy available"';
if ($bbb_loadbalancer_node) {
add_header 'Access-Control-Allow-Origin' $bbb_loadbalancer_node always;
add_header 'Access-Control-Allow-Credentials' 'true' always;
}
} }
location ~ "^\/bigbluebutton\/presentation\/(?<prestoken>[a-zA-Z0-9_-]+)/upload$" { location ~ "^\/bigbluebutton\/presentation\/(?<prestoken>[a-zA-Z0-9_-]+)/upload$" {
# Grails can't handle CORS OPTION preflight requests correctly -> lets do this in nginx
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' $bbb_loadbalancer_node always;
add_header 'Access-Control-Allow-Credentials' 'true' always;
add_header 'Content-Type' 'text/plain; charset=utf-8';
add_header 'Content-Length' 0;
return 204;
}
proxy_pass http://bbb-web:8090; proxy_pass http://bbb-web:8090;
proxy_redirect default; proxy_redirect default;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# Workaround IE refusal to set cookies in iframe # Workaround IE refusal to set cookies in iframe
add_header P3P 'CP="No P3P policy available"'; add_header P3P 'CP="No P3P policy available"';
if ($bbb_loadbalancer_node) {
add_header 'Access-Control-Allow-Origin' $bbb_loadbalancer_node always;
add_header 'Access-Control-Allow-Credentials' 'true' always;
}
# high limit for presentation as bbb-web will reject upload if larger than configured # high limit for presentation as bbb-web will reject upload if larger than configured
client_max_body_size 1000m; client_max_body_size 1000m;
@ -73,9 +57,6 @@
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# Workaround IE refusal to set cookies in iframe # Workaround IE refusal to set cookies in iframe
add_header P3P 'CP="No P3P policy available"'; add_header P3P 'CP="No P3P policy available"';
if ($bbb_loadbalancer_node) {
add_header 'Access-Control-Allow-Origin' $bbb_loadbalancer_node always;
}
} }
location = /bigbluebutton/presentation/checkPresentation { location = /bigbluebutton/presentation/checkPresentation {
@ -87,6 +68,7 @@
proxy_set_header X-Original-URI $request_uri; proxy_set_header X-Original-URI $request_uri;
proxy_set_header Content-Length ""; proxy_set_header Content-Length "";
proxy_set_header X-Original-Content-Length $http_content_length; proxy_set_header X-Original-Content-Length $http_content_length;
proxy_set_header X-Original-Method $request_method;
# high limit for presentation as bbb-web will reject upload if larger than configured # high limit for presentation as bbb-web will reject upload if larger than configured
client_max_body_size 1000m; client_max_body_size 1000m;
@ -109,6 +91,7 @@
proxy_set_header Content-Length ""; proxy_set_header Content-Length "";
proxy_set_header X-Original-URI $request_uri; proxy_set_header X-Original-URI $request_uri;
} }
location = /bigbluebutton/connection/legacyCheckAuthorization { location = /bigbluebutton/connection/legacyCheckAuthorization {
internal; internal;
proxy_pass http://bbb-web:8090; proxy_pass http://bbb-web:8090;
@ -128,9 +111,6 @@
location ~ "^/bigbluebutton\/textTrack\/(?<textTrackToken>[a-zA-Z0-9]+)\/(?<recordId>[a-zA-Z0-9_-]+)\/(?<textTrack>.+)$" { location ~ "^/bigbluebutton\/textTrack\/(?<textTrackToken>[a-zA-Z0-9]+)\/(?<recordId>[a-zA-Z0-9_-]+)\/(?<textTrack>.+)$" {
# Workaround IE refusal to set cookies in iframe # Workaround IE refusal to set cookies in iframe
add_header P3P 'CP="No P3P policy available"'; add_header P3P 'CP="No P3P policy available"';
if ($bbb_loadbalancer_node) {
add_header 'Access-Control-Allow-Origin' $bbb_loadbalancer_node always;
}
# Allow 30M uploaded presentation document. # Allow 30M uploaded presentation document.
client_max_body_size 30m; client_max_body_size 30m;
@ -177,4 +157,4 @@
} }
return 403; return 403;
} }

View File

@ -5,6 +5,7 @@ location /bbb-webrtc-sfu {
auth_request_set $user_id $sent_http_user_id; auth_request_set $user_id $sent_http_user_id;
auth_request_set $meeting_id $sent_http_meeting_id; auth_request_set $meeting_id $sent_http_meeting_id;
auth_request_set $voice_bridge $sent_http_voice_bridge; auth_request_set $voice_bridge $sent_http_voice_bridge;
auth_request_set $user_name $sent_http_user_name;
proxy_pass http://10.7.7.1:3008; proxy_pass http://10.7.7.1:3008;
proxy_http_version 1.1; proxy_http_version 1.1;
@ -14,9 +15,11 @@ location /bbb-webrtc-sfu {
proxy_set_header User-Id $user_id; proxy_set_header User-Id $user_id;
proxy_set_header Meeting-Id $meeting_id; proxy_set_header Meeting-Id $meeting_id;
proxy_set_header Voice-Bridge $voice_bridge; proxy_set_header Voice-Bridge $voice_bridge;
proxy_read_timeout 6h; proxy_set_header User-Name $user_name;
proxy_send_timeout 6h;
client_body_timeout 6h; proxy_read_timeout 60s;
send_timeout 6h; proxy_send_timeout 60s;
client_body_timeout 60s;
send_timeout 60s;
} }

View File

@ -29,12 +29,42 @@ server {
# https://www.eff.org/deeplinks/2021/03/googles-floc-terrible-idea # https://www.eff.org/deeplinks/2021/03/googles-floc-terrible-idea
add_header Permissions-Policy "interest-cohort=()"; add_header Permissions-Policy "interest-cohort=()";
# redirect to greenlight
location = / {
return 302 /b;
}
# Include specific rules for record and playback # Include specific rules for record and playback
include /etc/nginx/bbb/*.nginx; include /etc/nginx/bbb/*.nginx;
# redirect old greenlight v2 room links
location ~ "/b/([a-z0-9\-]+)" {
return 302 /rooms/$1;
}
# serve default.pdf from /www/
location = /default.pdf {
try_files $uri =404;
}
location / {
proxy_pass http://greenlight:3000;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For "127.0.0.1";
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Ssl on;
proxy_http_version 1.1;
client_max_body_size 1000m;
}
location /cable {
proxy_pass http://greenlight:3000;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For "127.0.0.1";
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Ssl on;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_http_version 1.1;
proxy_read_timeout 6h;
proxy_send_timeout 6h;
client_body_timeout 6h;
send_timeout 6h;
}
} }

View File

@ -16,11 +16,18 @@ RUN apt-get update && apt-get install -y \
python3-lxml \ python3-lxml \
python3-icu \ python3-icu \
python3-pyinotify \ python3-pyinotify \
python3-sortedcollections \
python3-packaging \
gir1.2-pangocairo-1.0 \ gir1.2-pangocairo-1.0 \
gir1.2-poppler-0.18 \
gir1.2-gtk-3.0 \
gir1.2-gdkpixbuf-2.0 \
fonts-croscore \
ffmpeg \ ffmpeg \
poppler-utils \ poppler-utils \
imagemagick \ imagemagick \
supervisor \ supervisor \
unzip \
locales \ locales \
locales-all locales-all
# TODO: missing packages # TODO: missing packages
@ -53,30 +60,30 @@ RUN wget -q https://github.com/mikefarah/yq/releases/download/3.4.1/yq_linux_am
RUN mkdir -p \ RUN mkdir -p \
/usr/local/bigbluebutton \ /usr/local/bigbluebutton \
/usr/local/bigbluebutton/core \ /usr/local/bigbluebutton/core \
/etc/bigbluebutton /etc/bigbluebutton \
/etc/bigbluebutton/recording
# dependency for bbb-presentation-video
RUN wget -q -O /tmp/python3-perfect-freehand.deb https://github.com/bigbluebutton/perfect-freehand-python/releases/download/1.2.0/python3-perfect-freehand_1.2.0_all.deb && \
dpkg -i /tmp/python3-perfect-freehand.deb && \
rm /tmp/python3-perfect-freehand.deb
ARG TAG_RECORDINGS ARG TAG_RECORDINGS
# add bbb-record-core (lib, scripts and Gemfile) COPY --from=record-core / /usr/local/bigbluebutton/core
RUN cd /usr/local/bigbluebutton/core \
&& svn checkout https://github.com/bigbluebutton/bigbluebutton/tags/$TAG_RECORDINGS/record-and-playback/core/lib \
&& svn checkout https://github.com/bigbluebutton/bigbluebutton/tags/$TAG_RECORDINGS/record-and-playback/core/scripts \
&& rm -rf /usr/local/bigbluebutton/core/*/.svn \
&& wget https://raw.githubusercontent.com/bigbluebutton/bigbluebutton/$TAG_RECORDINGS/record-and-playback/core/Gemfile.lock \
&& wget https://raw.githubusercontent.com/bigbluebutton/bigbluebutton/$TAG_RECORDINGS/record-and-playback/core/Gemfile \
&& wget https://raw.githubusercontent.com/bigbluebutton/bigbluebutton/$TAG_RECORDINGS/record-and-playback/core/Rakefile
# add bbb-playback-presentation scripts # add bbb-playback-presentation scripts
RUN cd /tmp \ COPY --from=presentation /scripts /usr/local/bigbluebutton/core/scripts/
&& svn checkout https://github.com/bigbluebutton/bigbluebutton/tags/$TAG_RECORDINGS/record-and-playback/presentation/scripts \
&& rsync -av /tmp/scripts/ /usr/local/bigbluebutton/core/scripts/ \
&& rm -rf /tmp/scripts
# install ruby dependencies # install ruby dependencies
RUN cd /usr/local/bigbluebutton/core \ RUN cd /usr/local/bigbluebutton/core \
&& gem install builder \ && gem install builder \
&& gem install bundler --no-document \ && gem install bundler --no-document \
&& /usr/local/bin/bundle && bundle config set --local deployment true \
&& bundle install \
&& bundle clean \
&& rm -r vendor/bundle/ruby/*/cache \
&& find vendor/bundle -name '*.o' -delete
# log to file instead of journald # log to file instead of journald
RUN sed -i 's|Journald::Logger\.new.*|Logger.new("/var/log/bigbluebutton/recording.log")|g' /usr/local/bigbluebutton/core/lib/recordandplayback.rb && \ RUN sed -i 's|Journald::Logger\.new.*|Logger.new("/var/log/bigbluebutton/recording.log")|g' /usr/local/bigbluebutton/core/lib/recordandplayback.rb && \
@ -88,8 +95,8 @@ RUN sed -i 's|Journald::Logger\.new.*|Logger.new("/var/log/bigbluebutton/recordi
sed -i 's|Logger\.new.*|Logger.new("/var/log/bigbluebutton/recording.log")|g' /usr/local/bigbluebutton/core/scripts/process/presentation.rb sed -i 's|Logger\.new.*|Logger.new("/var/log/bigbluebutton/recording.log")|g' /usr/local/bigbluebutton/core/scripts/process/presentation.rb
# add bbb-record with some adjustments so bbb-record works in this environment # add bbb-record with some adjustments so bbb-record works in this environment
COPY --from=bbb-conf /bin/bbb-record /usr/bin/bbb-record
RUN cd /usr/bin \ RUN cd /usr/bin \
&& wget https://raw.githubusercontent.com/bigbluebutton/bigbluebutton/$TAG_RECORDINGS/bigbluebutton-config/bin/bbb-record \
&& chmod +x /usr/bin/bbb-record \ && chmod +x /usr/bin/bbb-record \
&& sed -i 's/^BBB_WEB.*/BBB_WEB=""/' /usr/bin/bbb-record \ && sed -i 's/^BBB_WEB.*/BBB_WEB=""/' /usr/bin/bbb-record \
&& sed -i 's/systemctl.*//' /usr/bin/bbb-record \ && sed -i 's/systemctl.*//' /usr/bin/bbb-record \
@ -103,8 +110,15 @@ RUN groupadd -g 998 bigbluebutton && useradd -m -u 998 -g bigbluebutton bigblueb
# https://github.com/alangecker/bigbluebutton-docker/issues/63 # https://github.com/alangecker/bigbluebutton-docker/issues/63
RUN chown -R 998:998 /usr/local/bigbluebutton RUN chown -R 998:998 /usr/local/bigbluebutton
ARG TAG_BBB_PRESENTATION_VIDEO
RUN cd /tmp/ && \
wget -q -O bbb-presentation-video.zip "https://github.com/bigbluebutton/bbb-presentation-video/releases/download/${TAG_BBB_PRESENTATION_VIDEO}/ubuntu-20.04.zip" && \
unzip -o bbb-presentation-video.zip -d bbb-presentation-video && \
dpkg -i bbb-presentation-video/bbb-presentation-video*.deb && \
rm -rf /tmp/*
COPY bbb-web.properties /etc/bigbluebutton/bbb-web.properties.tmpl COPY bbb-web.properties /etc/bigbluebutton/bbb-web.properties.tmpl
COPY bigbluebutton.yml /usr/local/bigbluebutton/core/scripts/bigbluebutton.yml.tmpl COPY recording.yml /etc/bigbluebutton/recording/recording.yml.tmpl
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
COPY entrypoint.sh /entrypoint.sh COPY entrypoint.sh /entrypoint.sh

View File

@ -1 +1,2 @@
bigbluebutton.web.serverURL=https://{{ .Env.DOMAIN }}
securitySalt={{ .Env.SHARED_SECRET }} securitySalt={{ .Env.SHARED_SECRET }}

View File

@ -1,59 +0,0 @@
bbb_version: '2.1.0'
raw_audio_src: /var/freeswitch/meetings
raw_video_src: /usr/share/red5/webapps/video/streams
kurento_video_src: /var/kurento/recordings
kurento_screenshare_src: /var/kurento/screenshare
raw_screenshare_src: /usr/share/red5/webapps/screenshare/streams
raw_webrtc_deskshare_src: /usr/share/red5/webapps/video-broadcast/streams
raw_deskshare_src: /var/bigbluebutton/deskshare
raw_presentation_src: /var/bigbluebutton
notes_endpoint: http://bbb-pads:9002/p
# Specify the notes formats we archive
# txt, doc and odt are also supported
notes_formats:
- etherpad
- html
- pdf
redis_host: redis
redis_port: 6379
# Uncomment and set password if redis require it.
# redis_password: changeme
# redis_workers_host: 127.0.0.1
# redis_workers_port: 6379
# Set to true to insert recording process status into
# redis list with key "store_recording_status: true".
# This is useful if you want to track progress status
# and have another script process it.
store_recording_status: false
# Sequence of recording steps. Keys are the current step, values
# are the next step(s). Examples:
# current_step: next_step
# "current_step-format": "next_step-format"
# current_step:
# - next_step
# - another_step-format
steps:
archive: "sanity"
sanity: "captions"
captions: "process:presentation"
"process:presentation": "publish:presentation"
# For PRODUCTION
log_dir: /var/log/bigbluebutton
events_dir: /var/bigbluebutton/events
recording_dir: /var/bigbluebutton/recording
published_dir: /var/bigbluebutton/published
captions_dir: /var/bigbluebutton/captions
playback_host: {{ .Env.DOMAIN }}
playback_protocol: https
# For DEVELOPMENT
# This allows us to run the scripts manually
#scripts_dir: /home/ubuntu/dev/bigbluebutton/record-and-playback/core/scripts
#log_dir: /home/ubuntu/temp/log
#recording_dir: /home/ubuntu/temp/recording
#published_dir: /home/ubuntu/temp/published
#playback_host: 127.0.0.1

View File

@ -2,11 +2,15 @@
touch /var/log/bigbluebutton/recording.log touch /var/log/bigbluebutton/recording.log
touch /var/log/bigbluebutton/bbb-web.log touch /var/log/bigbluebutton/bbb-web.log
touch /var/log/bigbluebutton/sanity.log
touch /var/log/bigbluebutton/post_publish.log
mkdir -p /var/log/bigbluebutton/presentation mkdir -p /var/log/bigbluebutton/presentation
chown -R bigbluebutton:bigbluebutton /var/log/bigbluebutton chown -R bigbluebutton:bigbluebutton /var/log/bigbluebutton
dockerize \ dockerize \
-template /usr/local/bigbluebutton/core/scripts/bigbluebutton.yml.tmpl:/usr/local/bigbluebutton/core/scripts/bigbluebutton.yml \ -template /etc/bigbluebutton/recording/recording.yml.tmpl:/etc/bigbluebutton/recording/recording.yml \
-template /etc/bigbluebutton/bbb-web.properties.tmpl:/etc/bigbluebutton/bbb-web.properties \ -template /etc/bigbluebutton/bbb-web.properties.tmpl:/etc/bigbluebutton/bbb-web.properties \
-stdout /var/log/bigbluebutton/recording.log \ -stdout /var/log/bigbluebutton/recording.log \
-stdout /var/log/bigbluebutton/post_publish.log \
-stdout /var/log/bigbluebutton/sanity.log \
/usr/bin/supervisord --nodaemon /usr/bin/supervisord --nodaemon

View File

@ -0,0 +1,4 @@
redis_host: redis
notes_endpoint: http://bbb-pads:9002/p
playback_host: {{ .Env.DOMAIN }}
playback_protocol: https

View File

@ -2,7 +2,7 @@
user=root user=root
[program:rasque_workers] [program:rasque_workers]
command=rake resque:workers command=bundle exec rake -f Rakefile resque:workers
directory=/usr/local/bigbluebutton/core/scripts directory=/usr/local/bigbluebutton/core/scripts
environment=QUEUE="rap:archive,rap:publish,rap:process,rap:sanity,rap:captions,rap:events",COUNT="1",VVERBOSE="1",HOME="/home/bigbluebutton" environment=QUEUE="rap:archive,rap:publish,rap:process,rap:sanity,rap:captions,rap:events",COUNT="1",VVERBOSE="1",HOME="/home/bigbluebutton"
user=bigbluebutton user=bigbluebutton

View File

@ -1,4 +1,4 @@
FROM node:14.18.3-bullseye-slim AS builder FROM node:18-bullseye-slim AS builder
RUN apt-get update && apt-get install -y git wget RUN apt-get update && apt-get install -y git wget
@ -6,13 +6,13 @@ RUN apt-get update && apt-get install -y git wget
RUN wget -q https://github.com/mikefarah/yq/releases/download/v4.25.1/yq_linux_amd64 -O /usr/bin/yq \ RUN wget -q https://github.com/mikefarah/yq/releases/download/v4.25.1/yq_linux_amd64 -O /usr/bin/yq \
&& chmod +x /usr/bin/yq && chmod +x /usr/bin/yq
COPY ./bbb-webhooks /bbb-webhooks COPY --from=src / /bbb-webhooks
RUN cd /bbb-webhooks && npm install --production RUN cd /bbb-webhooks && npm install --production
RUN chmod 777 /bbb-webhooks/config RUN chmod 777 /bbb-webhooks/config
# ------------------------------ # ------------------------------
FROM node:14.18.3-bullseye-slim FROM node:18-bullseye-slim
RUN useradd --uid 2004 --user-group bbb-webhooks RUN useradd --uid 2004 --user-group bbb-webhooks
COPY --from=builder /usr/bin/yq /usr/bin/yq COPY --from=builder /usr/bin/yq /usr/bin/yq

View File

@ -1,20 +1,15 @@
ARG BBB_BUILD_TAG ARG BBB_BUILD_TAG
FROM gitlab.senfcall.de:5050/senfcall-public/docker-bbb-build:$BBB_BUILD_TAG AS builder FROM bigbluebutton/bbb-build:$BBB_BUILD_TAG AS builder
RUN useradd --uid 2004 --user-group webrtc-sfu RUN useradd --uid 2004 --user-group webrtc-sfu
ADD ./bbb-webrtc-sfu /app COPY --from=source / /app
ENV NODE_ENV production ENV NODE_ENV production
# due to the git submodule npm install crashes with following error:
# npm ERR! fatal: Not a git repository: ../.git/modules/bbb-webrtc-sfu
# we simply delete the .git file
RUN cd /app \ RUN cd /app \
&& cp config/default.example.yml config/production.yml \ && cp config/default.example.yml config/production.yml \
&& rm .git \
&& npm install --unsafe-perm \ && npm install --unsafe-perm \
&& npm cache clear --force \ && npm cache clear --force \
&& rm -rf node_modules/mediasoup/worker/out/Release/subprojects \ && rm -rf node_modules/mediasoup/worker/out/Release/subprojects \
@ -23,12 +18,12 @@ RUN cd /app \
# ============================= # =============================
FROM node:14.19.1-bullseye-slim FROM node:18-bullseye-slim
RUN useradd --uid 2004 --user-group webrtc-sfu RUN useradd --uid 2004 --user-group webrtc-sfu
ENV NODE_ENV production ENV NODE_ENV production
COPY --from=builder /app /app COPY --from=builder /app /app
RUN chown -R webrtc-sfu:webrtc-sfu /app/config RUN mkdir /home/webrtc-sfu && chown -R webrtc-sfu:webrtc-sfu /app/config /home/webrtc-sfu
USER webrtc-sfu USER webrtc-sfu
WORKDIR /app WORKDIR /app

1
repos/bbb-pads Submodule

Submodule repos/bbb-pads added at 433fe4c393

1
repos/bbb-playback Submodule

Submodule repos/bbb-playback added at a8f5a72a7d

1
repos/bbb-webhooks Submodule

Submodule repos/bbb-webhooks added at 7c0cd8e6ca

1
repos/bbb-webrtc-sfu Submodule

Submodule repos/bbb-webrtc-sfu added at c0de0ff385

1
repos/bigbluebutton Submodule

Submodule repos/bigbluebutton added at 5d671b3b50

1
repos/freeswitch Submodule

Submodule repos/freeswitch added at 4cb05e7f4a

13
repos/tags Normal file
View File

@ -0,0 +1,13 @@
# autogenerated by ./scripts/collect-tags
#
# used to determine submodule tags without the need for
# checking out the whole submodule
repos/bbb-etherpad-plugin 068ded5
repos/bbb-etherpad-skin 8328b77
repos/bbb-pads v1.5.2
repos/bbb-playback v5.0.2
repos/bbb-webhooks v2.6.1
repos/bbb-webrtc-sfu v2.12.0
repos/bigbluebutton v2.7.3
repos/freeswitch v1.10.10

View File

@ -6,6 +6,8 @@
# HTTPS Proxy # HTTPS Proxy
# fully automated Lets Encrypt certificates # fully automated Lets Encrypt certificates
ENABLE_HTTPS_PROXY=true ENABLE_HTTPS_PROXY=true
# If your network doesn't allow access to DNS at 8.8.8.8 specify your own resolvers
#RESOLVER_ADDRESS=x.x.x.x
# coturn (a TURN Server) # coturn (a TURN Server)
# requires either the abhove HTTPS Proxy to be enabled # requires either the abhove HTTPS Proxy to be enabled
@ -44,7 +46,7 @@ ENABLE_GREENLIGHT=true
# important! change these to any random values # important! change these to any random values
SHARED_SECRET=SuperSecret SHARED_SECRET=SuperSecret
ETHERPAD_API_KEY=SuperEtherpadKey ETHERPAD_API_KEY=SuperEtherpadKey
RAILS_SECRET=SuperRailsSecret RAILS_SECRET=SuperRailsSecret_SuperRailsSecret
POSTGRESQL_SECRET=SuperPostgresSecret POSTGRESQL_SECRET=SuperPostgresSecret
FSESL_PASSWORD=SuperFreeswitchESLPassword FSESL_PASSWORD=SuperFreeswitchESLPassword
@ -97,7 +99,7 @@ DEFAULT_PRESENTATION=./mod/nginx/default.pdf
# options: # options:
# - en-ca-june - EN Canadian June # - en-ca-june - EN Canadian June
# - en-us-allison - US English Allison # - en-us-allison - US English Allison
# - en-us-callie - US English Callie # - en-us-callie - US English Callie (default)
# - de-de-daedalus3 - German by Daedalus3 (https://github.com/Daedalus3/freeswitch-german-soundfiles) # - de-de-daedalus3 - German by Daedalus3 (https://github.com/Daedalus3/freeswitch-german-soundfiles)
# - es-ar-mario - Spanish/Argentina Mario # - es-ar-mario - Spanish/Argentina Mario
# - fr-ca-june - FR Canadian June # - fr-ca-june - FR Canadian June
@ -160,180 +162,42 @@ NUMBER_OF_FRONTEND_NODEJS_PROCESSES=2
# GREENLIGHT CONFIGURATION # GREENLIGHT CONFIGURATION
# ==================================== # ====================================
# Microsoft Office365 Login Provider (optional) ### SMTP CONFIGURATION
# # Emails are required for the basic features of Greenlight to function.
# For in-depth steps on setting up a Office 365 Login Provider, see: # Please refer to your SMTP provider to get the values for the variables below
# #SMTP_SENDER_EMAIL=
# https://docs.bigbluebutton.org/greenlight/gl-config.html#office365-oauth2 #SMTP_SENDER_NAME=
# #SMTP_SERVER=
OFFICE365_KEY= #SMTP_PORT=
OFFICE365_SECRET= #SMTP_DOMAIN=
OFFICE365_HD= #SMTP_USERNAME=
#SMTP_PASSWORD=
#SMTP_AUTH=
#SMTP_STARTTLS_AUTO=true
#SMTP_STARTTLS=false
#SMTP_TLS=false
#SMTP_SSL_VERIFY=true
# OAUTH2_REDIRECT allows you to specify the redirect_url passed to oauth on sign in. ### EXTERNAL AUTHENTICATION METHODS
# It is useful for cases when Greenlight is deployed behind a Network Load Balancer or proxy #
OAUTH2_REDIRECT= #OPENID_CONNECT_CLIENT_ID=
#OPENID_CONNECT_CLIENT_SECRET=
#OPENID_CONNECT_ISSUER=
#OPENID_CONNECT_REDIRECT=
# LDAP Login Provider (optional) # To enable hCaptcha on the user sign up and sign in, define these 2 keys
# #HCAPTCHA_SITE_KEY=
# You can enable LDAP authentication by providing values for the variables below. #HCAPTCHA_SECRET_KEY=
# Configuring LDAP authentication will take precedence over all other providers.
# For information about setting up LDAP, see:
#
# https://docs.bigbluebutton.org/greenlight/gl-config.html#ldap-auth
#
# LDAP_SERVER=ldap.example.com
# LDAP_PORT=389
# LDAP_METHOD=plain
# LDAP_UID=uid
# LDAP_BASE=dc=example,dc=com
# LDAP_AUTH=simple
# LDAP_BIND_DN=cn=admin,dc=example,dc=com
# LDAP_PASSWORD=password
# LDAP_ROLE_FIELD=ou
# LDAP_FILTER=(&(attr1=value1)(attr2=value2))
LDAP_SERVER=
LDAP_PORT=
LDAP_METHOD=
LDAP_UID=
LDAP_BASE=
LDAP_BIND_DN=
LDAP_AUTH=
LDAP_PASSWORD=
LDAP_ROLE_FIELD=
LDAP_FILTER=
# Set this to true if you want GreenLight to support user signup and login without # Set these if you are using a Simple Storage Service (S3)
# Omniauth. For more information, see: # Uncomment S3_ENDPOINT only if you are using a S3 OTHER than Amazon Web Service (AWS) S3.
# #S3_ACCESS_KEY_ID=
# https://docs.bigbluebutton.org/greenlight/gl-overview.html#accounts-and-profile #S3_SECRET_ACCESS_KEY=
# #S3_REGION=
ALLOW_GREENLIGHT_ACCOUNTS=true #S3_BUCKET=
#S3_ENDPOINT=
# Set this to true if you want GreenLight to send verification emails upon # Define the default locale language code (i.e. 'en' for English) from the fallowing list:
# the creation of a new account # [en, ar, fr, es]
# #DEFAULT_LOCALE=en
# ALLOW_MAIL_NOTIFICATIONS=true
#
# The notifications are sent using sendmail, unless the SMTP_SERVER variable is set.
# In that case, make sure the rest of the variables are properly set.
#
# SMTP_SERVER=smtp.gmail.com
# SMTP_PORT=587
# SMTP_DOMAIN=gmail.com
# SMTP_USERNAME=<youremail@gmail.com>
# SMTP_PASSWORD=<yourpassword>
# SMTP_AUTH=plain
# SMTP_STARTTLS_AUTO=true
#
# If your mail server has a self-signed certificate, you'll also need to include the line below.
# Please note that enable this presents its own security risks and should not be done unless necessary.
# SMTP_OPENSSL_VERIFY_MODE=none
#
SMTP_SERVER=
SMTP_PORT=
SMTP_DOMAIN=
SMTP_USERNAME=
SMTP_PASSWORD=
SMTP_AUTH=
SMTP_STARTTLS_AUTO=
# Specify the email address that all mail is sent from
SMTP_SENDER=
# Prefix for the applications root URL.
# Useful for deploying the application to a subdirectory, which is highly recommended
# if deploying on a BigBlueButton server. Keep in mind that if you change this, you'll
# have to update your authentication callback URL's to reflect this change.
#
# The recommended prefix is "/b".
#
RELATIVE_URL_ROOT=/b
# Specify which settings you would like the users to configure on room creation
# or edit after the room has been created
# By default, all settings are turned OFF.
#
# Current settings available:
# mute-on-join: Automatically mute users by default when they join a room
# require-moderator-approval: Require moderators to approve new users before they can join the room
# anyone-can-start: Allows anyone with the join url to start the room in BigBlueButton
# all-join-moderator: All users join as moderators in BigBlueButton
ROOM_FEATURES=mute-on-join,require-moderator-approval,anyone-can-start,all-join-moderator
# Specify the maximum number of records to be sent to the BigBlueButton API in one call
# Default is set to 25 records
PAGINATION_NUMBER=25
# Specify the maximum number of rows that should be displayed per page for a paginated table
# Default is set to 25 rows
NUMBER_OF_ROWS=25
# Specify if you want to display the Google Calendar button
# ENABLE_GOOGLE_CALENDAR_BUTTON=true|false
ENABLE_GOOGLE_CALENDAR_BUTTON=
# Set the application into Maintenance Mode
#
# Current options supported:
# true: Renders an error page that does not allow users to access any of the features in the application
# false: Application runs normally
MAINTENANCE_MODE=false
# Displays a flash that appears to inform the user of a scheduled maintenance window
# This variable should contain ONLY the date and time of the scheduled maintenance
#
# Ex: MAINTENANCE_WINDOW=Friday August 18 6pm-10pm EST
MAINTENANCE_WINDOW=
# The link to the Report an Issue button that appears on the 500 page and in the Account Dropdown
#
# Defaults to the Github Issues Page for Greenlight
# Button can be disabled by setting the value to blank
#
# REPORT_ISSUE_URL=https://github.com/bigbluebutton/greenlight/issues/new
# The link to the Need help? button that appears on the Account Dropdown
#
# Defaults to the Greenlight documentation
# Button can be disabled by setting the value to blank
HELP_URL=https://docs.bigbluebutton.org/greenlight/gl-overview.html
# Comment this out to send logs to STDOUT in production instead of log/production.log .
#
# RAILS_LOG_TO_STDOUT=true
#
# When using docker-compose the logs can be sent to an centralized repository like PaperTrail
# just by using the built in driver. Make sure to add to docker-compose.yml the next lines:
#
# logging:
# driver: $LOG_DRIVER
# options:
# syslog-address: $LOG_ADDRESS
# tag: $LOG_TAG
#
# And set this variables up:
#
# LOG_DRIVER=syslog
# LOG_ADDRESS=udp://logs4.papertrailapp.com:[99999]
# LOG_TAG=greenlight.example.com:v2
#
# Check docker-compose and papertrail documentation for encrypting and
# protecting access to the log repository.
# https://docs.docker.com/config/containers/logging/syslog/#options
# https://help.papertrailapp.com/kb/configuration/encrypting-remote-syslog-with-tls-ssl/
#
# For sending logs to a remote aggregator enable these variables:
#
# RAILS_LOG_REMOTE_NAME=logxx.papertrailapp.com
# RAILS_LOG_REMOTE_PORT=9999
# RAILS_LOG_REMOTE_TAG=greenlight
#
# Specify the default registration to be used by Greenlight until an administrator sets the
# registration method
# Allowed values are:
# open - For open registration
# invite - For invite only registration
# approval - For approve/decline registration
DEFAULT_REGISTRATION=open

View File

@ -4,11 +4,8 @@ set -e
cd $(dirname $0)/.. cd $(dirname $0)/..
# load .env # load .env
if [ -f .env ] . functions.sh
then load_env
# exclude WELCOME_FOOTER because it may contain invalid characters
export $(cat .env | sed 's/#.*//g' | grep -v "WELCOME_FOOTER" | grep -v "WELCOME_MESSAGE" | xargs)
fi
if [ ! "$ENABLE_RECORDING" == true ]; then if [ ! "$ENABLE_RECORDING" == true ]; then
echo "Error: recording is disabled why can't use bbb-record" echo "Error: recording is disabled why can't use bbb-record"
@ -16,5 +13,5 @@ if [ ! "$ENABLE_RECORDING" == true ]; then
exit 1 exit 1
fi fi
docker-compose exec recordings bbb-record $@ docker compose exec recordings bbb-record $@
docker-compose logs --tail=15 recordings docker compose logs --tail=15 recordings

View File

@ -1,27 +0,0 @@
#!/bin/bash
# checkouts submodules based on the tag
# provided in `tags.env`
set -e
cd "$(dirname "$0")/.."
export $(cat tags.env | sed 's/#.*//g' | xargs)
function checkout {
path=$1
ref=$2
pushd $path
git checkout $ref
popd > /dev/null
}
checkout mod/webrtc-sfu/bbb-webrtc-sfu $TAG_WEBRTC_SFU
checkout mod/nginx/bbb-playback $TAG_PLAYBACK
checkout mod/bbb-pads/bbb-pads $TAG_PADS
checkout mod/webhooks/bbb-webhooks $TAG_WEBHOOKS
echo ""
echo "# git submodule"
git submodule

20
scripts/collect-tags Executable file
View File

@ -0,0 +1,20 @@
#!/bin/bash
set -e
cd "$(dirname "$0")/.."
. scripts/functions.sh
# can't summarize the submodules without having the submodules
ensure_submodules
FILE=repos/tags
echo '# autogenerated by ./scripts/collect-tags' > $FILE
echo '#' >> $FILE
echo '# used to determine submodule tags without the need for' >> $FILE
echo '# checking out the whole submodule' >> $FILE
echo "" >> $FILE
# get list of submodules and their current tag as `git describe` also provides
git submodule foreach --quiet 'echo $sm_path $(git describe --tags --always)' >> $FILE

76
scripts/dev Executable file
View File

@ -0,0 +1,76 @@
#!/bin/bash
set -e
cd "$(dirname "$0")/.."
. scripts/functions.sh
if [ -f ".env" ]; then
load_env
if [[ "$DEV_MODE" == "" ]]; then
echo "Error: .env is not configured as a development environment"
echo ""
read -r -p "Should .env be automatically overwritten with a predefined .env? [Y/n]" response
response=${response,,} # tolower
if [[ $response =~ ^(y| ) ]] || [[ -z $response ]]; then
cp .env .env.bak
cp dev.env .env
else
echo "we can't continue with a .env file configured as a development environment"
exit 1
fi
fi
else
echo "# creating a .env for the dev setup"
cp dev.env .env
fi
# to avoid any file permission issues we want to run some containers with the same
# UID and GID as the current user
export BBB_DOCKER_USER="$(id -u):$(id -g)"
# also add it to ~/.zshrc and/or ~/.bashrc so
# that people can also use commands like `docker compose up`
# without that variable being missing
function add_permanent_env {
STR='export BBB_DOCKER_USER="$(id -u):$(id -g)"'
if [ -z "$(grep "$STR" "$1")" ]; then
echo "append"
echo "" >> $1
echo "# following line got added by bbb-docker" >> $1
echo "$STR" >> $1
fi
}
if [ -f "$(realpath ~/.zshrc)" ]; then
add_permanent_env "$(realpath ~/.zshrc)"
fi
if [ -f "$(realpath ~/.bashrc)" ]; then
add_permanent_env "$(realpath ~/.bashrc)"
fi
echo ""
echo "# ensure submodules are checked out"
ensure_submodules
echo ""
echo "# recreating docker-compose.yml"
./scripts/generate-compose
echo ""
echo "# rebuilding images"
docker compose build
echo ""
echo "============================================"
echo "BBB Development server"
echo "============================================"
echo "API Mate: https://mconf.github.io/api-mate/#server=https://10.7.7.1/bigbluebutton/api&sharedSecret=SuperSecret"
echo "Greenlight: https://10.7.7.1/"
echo "Check containers: docker-compose ps"
echo "Rebuilding container: docker-compose up --build CONTAINERNAME"
echo "============================================"
sleep 1
docker compose up

View File

@ -4,9 +4,7 @@ set -e
cd $(dirname $0)/.. cd $(dirname $0)/..
# load .env # load .env
if [ -f .env ] . functions.sh
then load_env
export $(cat .env | sed 's/#.*//g' | grep "FSESL_PASSWORD" | xargs)
fi
docker-compose exec freeswitch fs_cli -H 10.7.7.1 -p "$FSESL_PASSWORD" docker compose exec freeswitch /opt/freeswitch/bin/fs_cli -H 10.7.7.1 -p "$FSESL_PASSWORD"

18
scripts/functions.sh Normal file
View File

@ -0,0 +1,18 @@
function load_env {
export $(cat .env | sed 's/#.*//g' | grep -v "WELCOME_FOOTER" | grep -v "WELCOME_MESSAGE" | grep -v "CLIENT_TITLE" | xargs)
}
function ensure_submodules {
MISSING_SUBMODULES=$(git submodule status | grep -v ' (' | awk '{print $2}' || /bin/true)
echo
if [ ! -z "$MISSING_SUBMODULES" ]; then
echo "ERROR: following submodules are not checked out. we can't continue here"
git submodule status | grep -v ' (' | awk '{print " -", $2}'
echo ""
echo "if you really want to build images by yourself (not required for a normal production setup), use following command to check out all the submodules and try again"
echo " git submodule update --init"
exit 1
fi
}

View File

@ -4,11 +4,8 @@ set -e
cd $(dirname $0)/.. cd $(dirname $0)/..
# load .env # load .env
if [ -f .env ] . scripts/functions.sh
then load_env
# exclude WELCOME_MESSAGE && WELCOME_FOOTER && CLIENT_TITLE because it may contain invalid characters
export $(cat .env | sed 's/#.*//g' | grep -v "WELCOME_FOOTER" | grep -v "WELCOME_MESSAGE" | grep -v "CLIENT_TITLE" | xargs)
fi
# check for non-optional environment variables, # check for non-optional environment variables,
# which got introduced later and may miss in existing # which got introduced later and may miss in existing
@ -33,29 +30,31 @@ if [ "$ENABLE_COTURN" == true ]; then
fi fi
fi fi
export $(cat tags.env | sed 's/#.*//g' | xargs) function get_tag {
# is submodule checked out?
if [ -f "$1/.git" ]; then
git --git-dir=$1/.git describe --tags --always
else
# get cached tag name from repos/tags
grep "$1" repos/tags | awk '{print $2}'
fi
}
docker run \ docker run \
--rm \ --rm \
-v $(pwd)/docker-compose.tmpl.yml:/docker-compose.tmpl.yml \ -v $(pwd)/docker-compose.tmpl.yml:/docker-compose.tmpl.yml \
-e BBB_BUILD_TAG=${BBB_BUILD_TAG} \ -e TAG_BBB=$(get_tag repos/bigbluebutton) \
-e TAG_COMMON_MESSAGE=${TAG_COMMON_MESSAGE} \ -e TAG_FREESWITCH=$(get_tag repos/freeswitch) \
-e TAG_APPS_AKKA=${TAG_APPS_AKKA} \ -e TAG_WEBRTC_SFU=$(get_tag repos/bbb-webrtc-sfu) \
-e TAG_FSESL_AKKA=${TAG_FSESL_AKKA} \ -e TAG_WEBHOOKS=$(get_tag repos/bbb-webhooks) \
-e TAG_BBB_WEB=${TAG_BBB_WEB} \ -e TAG_PLAYBACK=$(get_tag repos/bbb-playback) \
-e TAG_HTML5=${TAG_HTML5} \ -e TAG_PADS=$(get_tag repos/bbb-pads) \
-e TAG_FS_CONFIG=${TAG_FS_CONFIG} \ -e COMMIT_ETHERPAD_SKIN=$(get_tag repos/bbb-etherpad-skin) \
-e TAG_LEARNING_DASHBOARD=${TAG_LEARNING_DASHBOARD} \ -e COMMIT_ETHERPAD_PLUGIN=$(get_tag repos/bbb-etherpad-plugin) \
-e TAG_RECORDINGS=${TAG_RECORDINGS} \
-e TAG_WEBRTC_SFU=${TAG_WEBRTC_SFU} \
-e TAG_WEBHOOKS=${TAG_WEBHOOKS} \
-e TAG_PLAYBACK=${TAG_PLAYBACK} \
-e TAG_PADS=${TAG_PADS} \
-e DEV_MODE=${DEV_MODE:-false} \ -e DEV_MODE=${DEV_MODE:-false} \
-e DEV_HTML5=${DEV_HTML5:-false} \
-e EXTERNAL_IPv6=${EXTERNAL_IPv6:-} \ -e EXTERNAL_IPv6=${EXTERNAL_IPv6:-} \
-e ENABLE_RECORDING=${ENABLE_RECORDING:-false} \ -e ENABLE_RECORDING=${ENABLE_RECORDING:-false} \
-e REMOVE_OLD_RECORDING=${REMOVE_OLD_RECORDING:-false} \
-e RECORDING_MAX_AGE_DAYS=${RECORDING_MAX_AGE_DAYS:-14} \
-e ENABLE_HTTPS_PROXY=${ENABLE_HTTPS_PROXY:-false} \ -e ENABLE_HTTPS_PROXY=${ENABLE_HTTPS_PROXY:-false} \
-e ENABLE_WEBHOOKS=${ENABLE_WEBHOOKS:-false} \ -e ENABLE_WEBHOOKS=${ENABLE_WEBHOOKS:-false} \
-e ENABLE_COTURN=${ENABLE_COTURN:-false} \ -e ENABLE_COTURN=${ENABLE_COTURN:-false} \

View File

@ -0,0 +1,49 @@
#!/bin/bash
cd $(dirname $0)/..
# load .env
if [ -f .env ]
then
export $(cat .env | sed 's/#.*//g' | grep -E "RAILS_SECRET|POSTGRESQL_SECRET" | xargs)
fi
COMPOSE_PREFIX=$(docker compose ps | grep postgres | awk '{print $1}' | sed 's/-postgres-1//')
docker kill -s SIGKILL greenlight-v2-tmp 2>/dev/null
sleep 1
echo "temporarily starting old greenlight v2..."
docker run \
--rm \
--detach --name greenlight-v2-tmp \
--network ${COMPOSE_PREFIX}_bbb-net \
--env-file .env \
-e DB_ADAPTER=postgresql \
-e DB_HOST=10.7.7.22 \
-e DB_NAME=greenlight \
-e DB_USERNAME=postgres \
-e DB_PASSWORD=${POSTGRESQL_SECRET:-password} \
-e SECRET_KEY_BASE=${RAILS_SECRET} \
-e V3_ENDPOINT="http://10.7.7.21:3000" \
-e V3_SECRET_KEY_BASE=${RAILS_SECRET} \
bigbluebutton/greenlight:v2.14
docker logs -f greenlight-v2-tmp &
LOGGING_PID=$!
while ! docker exec greenlight-v2-tmp nc -zw3 127.0.0.1 80
do
echo "Waiting for greenlight v2 to start up ..."
sleep 1
done
echo "greenlight is up! starting migrations"
docker exec -it greenlight-v2-tmp bundle exec rake migrations:roles && \
docker exec -it greenlight-v2-tmp bundle exec rake migrations:users && \
docker exec -it greenlight-v2-tmp bundle exec rake migrations:rooms && \
docker exec -it greenlight-v2-tmp bundle exec rake migrations:settings
kill $LOGGING_PID
docker kill greenlight-v2-tmp

View File

@ -4,11 +4,8 @@ set -e
cd "$(dirname "$0")/.." cd "$(dirname "$0")/.."
# load .env # load .env
if [ -f .env ] . functions.sh
then load_env
# exclude WELCOME_MESSAGE && WELCOME_FOOTER && CLIENT_TITLE because it may contain invalid characters
export $(cat .env | sed 's/#.*//g' | grep -v "WELCOME_FOOTER" | grep -v "WELCOME_MESSAGE" | grep -v "CLIENT_TITLE" | xargs)
fi
if [ -z "$ENABLE_WEBHOOKS" ]; then if [ -z "$ENABLE_WEBHOOKS" ]; then
echo "ERROR: ENABLE_WEBHOOKS must be set to true, otherwise the image would not be built" echo "ERROR: ENABLE_WEBHOOKS must be set to true, otherwise the image would not be built"
@ -31,11 +28,11 @@ fi
docker build -t alangecker/bbb-docker-base-java:latest mod/base-java docker build -t alangecker/bbb-docker-base-java:latest mod/base-java
# buld and push other images # buld and push other images
docker-compose build docker compose build
# push images # push images
docker push alangecker/bbb-docker-base-java:latest docker push alangecker/bbb-docker-base-java:latest
docker-compose push \ docker compose push \
html5-backend-1 \ html5-backend-1 \
bbb-web \ bbb-web \
freeswitch \ freeswitch \

View File

@ -208,4 +208,4 @@ echo "make sure to recreate the docker-compose.yml after each change"
echo " $ ./scripts/generate-compose" echo " $ ./scripts/generate-compose"
echo "" echo ""
echo "to start bigbluebutton run" echo "to start bigbluebutton run"
echo " $ docker-compose up -d" echo " $ docker compose up -d"

View File

@ -21,7 +21,7 @@ else
echo "" echo ""
echo "# pull newest images" echo "# pull newest images"
docker-compose pull --ignore-pull-failures docker compose pull --ignore-pull-failures
COMMIT_HASH=$(git rev-parse --short HEAD) COMMIT_HASH=$(git rev-parse --short HEAD)
@ -33,6 +33,6 @@ else
echo "we are on $COMMIT_HASH ($BRANCH_NAME)" echo "we are on $COMMIT_HASH ($BRANCH_NAME)"
echo "" echo ""
echo "use following command for restarting bbb:" echo "use following command for restarting bbb:"
echo " $ docker-compose up -d" echo " $ docker compose up -d --no-build"
echo "-------------------------------------" echo "-------------------------------------"
fi fi

View File

@ -14,26 +14,20 @@ then
exit exit
else else
echo ""
echo "# pull newest git submodules"
git submodule init
git submodule update
echo "" echo ""
echo "# recreate docker-compose.yml" echo "# recreate docker-compose.yml"
./scripts/generate-compose ./scripts/generate-compose
echo "" echo ""
echo "# pull newest images" echo "# pull newest images"
docker-compose pull --ignore-pull-failures docker compose pull --ignore-pull-failures
echo "" echo ""
echo "# rebuild images" echo "# rebuild images"
docker build -t alangecker/bbb-docker-base-java:latest mod/base-java docker build -t alangecker/bbb-docker-base-java:latest mod/base-java
# rebuild everything which got modified # rebuild everything which got modified
docker-compose build docker compose build
COMMIT_HASH=$(git rev-parse --short HEAD) COMMIT_HASH=$(git rev-parse --short HEAD)
BRANCH_NAME=$(git rev-parse --abbrev-ref HEAD) BRANCH_NAME=$(git rev-parse --abbrev-ref HEAD)
@ -44,6 +38,6 @@ else
echo "we are on $COMMIT_HASH ($BRANCH_NAME)" echo "we are on $COMMIT_HASH ($BRANCH_NAME)"
echo "" echo ""
echo "use following command for restarting bbb:" echo "use following command for restarting bbb:"
echo " $ docker-compose up -d" echo " $ docker compose up -d"
echo "-------------------------------------" echo "-------------------------------------"
fi fi

View File

@ -1,27 +0,0 @@
# after changing a tag always run following commands to apply
# - ./scripts/generate-compose
# - docker-compose build
# https://gitlab.senfcall.de/senfcall-public/docker-bbb-build
BBB_BUILD_TAG=v2022-03-30
# https://github.com/bigbluebutton/bigbluebutton
TAG_COMMON_MESSAGE=v2.5.7
TAG_APPS_AKKA=v2.5.7
TAG_FSESL_AKKA=v2.5.7
TAG_BBB_WEB=v2.5.8
TAG_HTML5=v2.5.7
TAG_RECORDINGS=v2.5.7
TAG_LEARNING_DASHBOARD=v2.5.5
TAG_FS_CONFIG=v2.5.7
# individual git submodules
# use `./scripts/checkout-submodules` to ensure, that the submodules
# match the provided tags here
TAG_WEBRTC_SFU=v2.8.6
TAG_WEBHOOKS=v2.6.0
TAG_PLAYBACK=v4.0.0
TAG_PADS=v1.2.2