Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/gjovanov/roomler

Roomler - Multi-party Video Conferencing & Team Collaboration Tool using WebRTC (Janus Gateway)
https://github.com/gjovanov/roomler

chat coturn docker fastify janus-gateway mongodb nginx nuxtjs redis video-conferencing vuejs webrtc

Last synced: 1 day ago
JSON representation

Roomler - Multi-party Video Conferencing & Team Collaboration Tool using WebRTC (Janus Gateway)

Awesome Lists containing this project

README

        

# Roomler

> Roomler.Live - Live video conferencing & collaboration tool using WebRTC (Janus Gateway)

It's like Slack on Crack and Microsoft Teams on Steroids.
All that fully free and open source.

[![Roomler Intro](https://img.youtube.com/vi/lzHeRwVDfPQ/0.jpg)](https://www.youtube.com/watch?v=lzHeRwVDfPQ)

# Features

| MULTI PARTY CALLS | POWERFUL CHAT | ORGANIZED ROOMS |
|-------------------------|-------------------------|-------------------------|
|


  • [x] Video

  • [x] Audio

  • [x] Screen share

  • [x] Encrypted

  • [x] up to 50 call participants

|

  • [x] Rich-text

  • [x] File sharing

  • [x] Emojis & Giphy's

  • [x] Mentions

  • [x] Reactions

|

  • [x] Public Rooms

  • [x] Private Rooms

  • [x] Hierarchy of Rooms

  • [x] User invite system

  • [x] Owner, moderator & member roles

|

# Technology stack
- [Janus Gateway](https://github.com/meetecho/janus-gateway)
- [Coturn](https://github.com/coturn/coturn)
- [Fastify](https://github.com/fastify/fastify)
- [PM2](https://github.com/Unitech/pm2)
- [MongoDB](https://github.com/mongodb/mongo)
- [Redis](https://github.com/antirez/redis)
- [VueJS](https://github.com/vuejs/vue)
- [NuxtJS](https://github.com/nuxt/nuxt.js/)
- [VuetifyJS](https://github.com/vuetifyjs/vuetify)
- [Tiptap](https://github.com/ueberdosis/tiptap)
- [ProseMirror](https://github.com/ProseMirror/prosemirror)
- [Nginx](https://github.com/nginx/nginx)
- [Docker](https://github.com/docker)

# Architecture
![Architecture](./packages/ui/static/architecture.png)

# Prerequisites

Roomler requires:
- docker engine being installed on your host machine
- two docker networks being created
- environment variables being setup
- serveral micro services up and running

before we can start Roomler (both in development and production environemnt)

## Docker network
Besides the default `host` Docker network, we need to create two addition bridge networks:
1. `docker network create frontend` (used by containers `roomler`, `nginx`)
2. `docker network create backend` (used by containers `roomler`, `mongo`, `redis`)
3. on the existing `host` network `janus` and `coturn` will be attached

## Microservice dependencies
- [Janus Gateway](docs/deps-janus.md)
- [Coturn](docs/deps-coturn.md)
- [MongoDB](docs/deps-mongo.md)
- [Redis](docs/deps-redis.md) - optional in development, but recommended in production!
- [Nginx](docs/deps-nginx.md) - optional in development, but recommended in production!

## Environment variables
You need to setup all your Required (even Optional if desired) [environment variables](docs/env.md), before you can run Roomler

# Start Roomler App

## Start in development mode

``` bash
# install dependencies
$ npx lerna bootstrap

# Start API server (localhost:3001)
$ yarn run dev:api

# Start UI server (localhost:3000)
$ yarn run dev:ui
```

## Start in production mode

``` bash
# install dependencies
$ npx lerna bootstrap --scope roomler.ui

# build for production and launch server
$ yarn run build
$ yarn run start
```

## Start in production mode using docker

### Docker build
`.scripts/build.sh`

### Docker release
`.scripts/release.sh`

### Docker run
``` bash
docker run -d --name roomler \
--hostname roomler \
--network backend \
--restart always \
-v /path_to_your_uploads_folder:/roomler/packages/ui/static/uploads \
-e API_URL=https://roomler.live \
-p 8082:3000 \
-e DB_CONN=YOUR_DB_CONN \
-e WS_SCALEOUT_ENABLED=true \
-e WS_SCALEOUT_HOST=redis \
-e SENDGRID_API_KEY=YOUR_SEND_GRID_KEY \
-e FACEBOOK_ID=YOUR_FACEBOOK_ID \
-e FACEBOOK_SECRET=YOUR_FACEBOOK_SECRET \
-e GOOGLE_ID=YOUR_GOOGLE_ID \
-e GOOGLE_SECRET=YOUR_GOOGLE_SECRET \
-e GITHUB_ID=YOUR_GITHUB_ID \
-e GITHUB_SECRET=YOUR_GITHUB_SECRET \
-e LINKEDIN_ID=YOUR_LINKEDIN_ID \
-e LINKEDIN_SECRET=YOUR_LINKEDIN_SECRET \
-e MICROSOFT_ID=YOUR_MICROSOFT_ID \
-e MICROSOFT_SECRET=YOUR_MICROSOFT_SECRET \
-e TURN_URL=YOUR_TURN_URL \
-e TURN_USERNAME=YOUR_TURN_USERNAME \
-e TURN_PASSWORD=YOUR_TURN_PASSWORD \
-e GIPHY_API_KEY=YOUR_GIPHY_KEY \
-e GOOGLE_ANALYTICS_ID=YOUR_GOOGLE_ANALYTICS_ID \
-e SUPER_ADMIN_EMAILS='["[email protected]"]' \
-e WEB_PUSH_CONTACT="mailto: [email protected]" \
-e WEB_PUSH_PUBLISH_KEY=YOUR_VAPID_PUBLIC_KEY \
-e WEB_PUSH_PRIVATE_KEY=YOUR_VAPID_PRIVATE_KEY \
-e NUXT_TELEMETRY_DISABLED=1 \
gjovanov/roomler

# attach roomler container to backend network
docker network connect backend roomler
```

## Start in production mode using docker-compose
`docker-compose up` - this will start the whole docker stack of services

# Testing
## Run API tests

``` bash
# makes sure MongoDB is reachable based on /config/index.js (dbSettings)
$ yarn run test:api
```

## Run E2E tests (TODO)