Watch online lectures together!
View Demo
·
Report Bug
·
Request Feature
·
Send a Pull Request
Lecture2Gether makes it possible to watch online lectures with friends by pasting a link to a Lecture2Go Video, a YouTube Video, Google Drive Video or a simple .mp4 link. The video streams are synchronized to partially restore the social aspect of campus life.
You can either build the image from source or use one of the provided versions from our Docker Hub Repository.
# for building from source
docker build -t lecture2gether .
docker run -p 8000:8000 lecture2gether
# for running from docker hub
docker run -p 8000:8000 thenerdful8/lecture2gether
This will start the whole application stack and expose it at http://localhost:8000/.
For development we recommend building a dev container (defined in default Dockerfile) and mounting your local sources into it.
This can be done by simply executing the dev_up.sh
script.
Any arguments appended to this script are passed to the container runtime so if you want to
define environment variables you should use a -e NAME=VALUE
flag.
By default the script uses docker as a container runtime but you can choose a different
one (like podman) by exporting the environment variable CONTAINER_RUNTIME
before executing the script.
The backend runs on a redis database.
Run the redis docker docker run -it -p 6379:6379 redis:buster
or install manually by following this guide.
Set the environment-variables 'REDIS_HOST', 'REDIS_PORT', 'REDIS_DB', 'REDIS_PASSWORD'
accordingly.
#Clone the repository
git clone https://github.com/TheNerdful8/Lecture2Gether
#Go to the backend folder
cd Lecture2Gether/lecture2gether_flask/
#Get Poetry
pip3 install poetry --user
#install the dependencies
poetry install --no-root
#start the server manually
poetry run python app.py
Install npm on your machine
#Clone the repository
git clone https://github.com/TheNerdful8/Lecture2Gether
#Go to the frontend folder
cd Lecture2Gether/lecture2gether-vue/
#Install required npm dependencies
npm install
#Run the application with
npm run serve
The application is configured at two places:
- Environment variables for the backend
- A
settings.json
file for the frontend
Defaults defined in the source code were chosen to work in a development environment. The
Container Image uses different defaults for the frontend which make more sense in a
production environment (defined in docker/settings.json
).
The server can be configured via the following environment variables
Name | Default Value | Description |
---|---|---|
SECRET_KEY | codenames | Change this in production |
REDIS_HOST | localhost | Hostname of the redis database which should be used |
REDIS_PORT | 6379 | Port on which redis listens on the redis-host |
REDIS_DB | 0 | Which database on the redis server should be used |
REDIS_PASSWORD | empty | Password to authenticate at the redis server |
CLEANUP_INTERVAL | 900 | Interval (in seconds) of searching for abandoned rooms |
CLEANUP_ROOM_EXPIRE_TIME | 3600 | Time (in seconds) until an empty room gets abandoned |
CLEANUP_MAX_ROOM_LIFE_TIME | 86400 | Time (in seconds) until an active room gets abandoned |
LOGLEVEL | INFO | Configures the python logging loglevel |
GOOGLE_YOUTUBE_API_KEY | empty | Google YouTube Data v3 API-key, used to extract meta data from YouTube videos |
GOOGLE_DRIVE_API_KEY_BACKEND | empty | Google Drive API key, used to access meta data in the backend |
GOOGLE_DRIVE_API_KEY_FRONTEND | empty | Google Drive API key, used to access Google Drive files in the frontend (see warning [1]) |
SENTRY_DSN | empty | Sentry connection DSN |
SENTRY_ENV | default | Sentry environment |
[1] This key is publicly readable, restrict its usage to the used website (e.g. https://lecture2gether.eu) and Google Drive in the Google API console.
The frontend is configured via a settings.js
file which should be reachable on a
request to /settings.js
from the running browser application.
This Javascript file must register the variable window.L2GO_SETTINGS
which must be an object defining the
below described properties.
It can be mounted into our provided container under /app/config/settings.js
.
The frontend settings object is defined as follows:
{
"apiRoot": <string>, // Under which url the server is reachable for http api calls
"socketioHost": <string>, // Under which host the socket.io endpoint is served.
// Can be an empty string which results in the same as where the frontend is deployed
"environment": <string>, // Determines the sentry environment
"sentry_dsn": <string> // Sentry connection DSN
// Can be an empty string which disables sentry reporting
}
The backend publishes statistical data (No. sessions, No. joined/left rooms, server infos, ...) in the Prometheus format to /metrics
. This can be scraped by a Prometheus server and displayed in e.g. Grafana.
- Vue.js
- Vuetify
- socket.io
- video.js
- videojs-youtube
- videojs-contrib-hls
- Flask
- Flask-SocketIO
- Prometheus Flask exporter
- Prometheus Python Client
- gevent
- BeautifulSoup
- Google API Python Client
- Nose
- Redis
- coolname
Distributed under the MIT License. See LICENSE
for more information.