All Projects β†’ TheNerdful8 β†’ Lecture2Gether

TheNerdful8 / Lecture2Gether

Licence: MIT license
A tool for synchronized online streaming

Programming Languages

Vue
7211 projects
python
139335 projects - #7 most used programming language
typescript
32286 projects
Dockerfile
14818 projects
javascript
184084 projects - #8 most used programming language
SCSS
7915 projects

Projects that are alternatives of or similar to Lecture2Gether

gateway.js
The gateway to Discord.
Stars: ✭ 23 (-55.77%)
Mutual labels:  websockets
pm2-prometheus-exporter
🐰 🐰 pm2 prometheus exporter
Stars: ✭ 90 (+73.08%)
Mutual labels:  prometheus
mojo.js
πŸ¦„ The Mojolicious real-time web framework for Node.js
Stars: ✭ 145 (+178.85%)
Mutual labels:  websockets
webfuse
websocket filesystem based on libfuse
Stars: ✭ 23 (-55.77%)
Mutual labels:  websockets
observatorium
This repository contains the deployment configurations for the Observatorium instances
Stars: ✭ 129 (+148.08%)
Mutual labels:  prometheus
freeradius exporter
FreeRADIUS Prometheus Exporter
Stars: ✭ 25 (-51.92%)
Mutual labels:  prometheus
ito-app
A privacy-first contact tracing app
Stars: ✭ 50 (-3.85%)
Mutual labels:  euvsvirus
chaos-exporter
Prometheus Exporter for Litmus Chaos Metrics
Stars: ✭ 25 (-51.92%)
Mutual labels:  prometheus
piccolo
Netty4ι•ΏθΏžζŽ₯网关
Stars: ✭ 19 (-63.46%)
Mutual labels:  prometheus
hetzner exporter
Prometheus exporter for Hetzner
Stars: ✭ 16 (-69.23%)
Mutual labels:  prometheus
hcloud-pricing-exporter
A prometheus exporter for the current pricing and costs of your HCloud account
Stars: ✭ 19 (-63.46%)
Mutual labels:  prometheus
ginprom
Gin Prometheus metrics exporter inspired by https://github.com/zsais/go-gin-prometheus
Stars: ✭ 97 (+86.54%)
Mutual labels:  prometheus
skalogs-bundle
Open Source data and event driven real time Monitoring and Analytics Platform
Stars: ✭ 16 (-69.23%)
Mutual labels:  prometheus
MAVCesium
An experimental web based map display for MAVProxy based on Cesium
Stars: ✭ 28 (-46.15%)
Mutual labels:  websockets
django-rest-live
Subscribe to updates from Django REST Framework over Websockets.
Stars: ✭ 48 (-7.69%)
Mutual labels:  websockets
ng2-STOMP-Over-WebSocket
STOMP Over WebSocket service for angular2
Stars: ✭ 35 (-32.69%)
Mutual labels:  websockets
socketio-shared-webworker
Socket.io client inside a WebWorker thread
Stars: ✭ 85 (+63.46%)
Mutual labels:  websockets
nginx-prometheus
Turn Nginx logs into Prometheus metrics
Stars: ✭ 29 (-44.23%)
Mutual labels:  prometheus
mattermost-plugin-alertmanager
AlertManager Bot for Mattermost
Stars: ✭ 48 (-7.69%)
Mutual labels:  prometheus
play2-sockjs
A SockJS server implementation for Play Framework.
Stars: ✭ 60 (+15.38%)
Mutual labels:  websockets

Logo

Lecture2Gether

Watch online lectures together!

View Demo Β· Report Bug Β· Request Feature Β· Send a Pull Request

About The Project

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.

Flask CI    Node.js CI    Kubernetes configuration

Screenshots

Screenshot Frontpage Screenshot Player

Install

Using docker (or podman)

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/.

Full Development Environment

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.

Install single Backend

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 single Frontend

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

Configuration

How to configure

The application is configured at two places:

  1. Environment variables for the backend
  2. 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).

Detailed Configuration possibilities

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
}

Statistics

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.

Built With

License

Distributed under the MIT License. See LICENSE for more information.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].