diff --git a/README.md b/README.md index 45323b0..3e00c7b 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ A WebRTC meeting service using [mediasoup](https://mediasoup.org) as its backend. -Try it online at https://mediasoup.akademia.no. +Try it online at https://akademia.no. You can add /roomname to the URL for specifying a room. ## Installation @@ -14,22 +14,17 @@ $ git clone https://github.com/havfo/multiparty-meeting.git $ cd multiparty-meeting ``` -* Set up the server: +* Copy `server/config.example.js` to `server/config.js` : ```bash -$ cd server -$ npm install +$ cp server/config.example.js server/config.js ``` +* Copy `app/config.example.js` to `app/config.js` : + In addition, the server requires a screen to be installed for the server to be able to seed shared torrent files. This is because the headless -Electron instance used by WebTorrent expects one. This means that in order -to run the project on a server, you need to install a virtual screen -such as `xvfb` by running - -```bash -sudo apt install xvfb -``` +Electron instance used by WebTorrent expects one. See [webtorrent-hybrid](https://github.com/webtorrent/webtorrent-hybrid) for more information about this. @@ -37,15 +32,20 @@ more information about this. * Copy `config.example.js` as `config.js` and customize it for your scenario: ```bash -$ cp config.example.js config.js +$ cp app/config.example.js app/config.js ``` +* Edit your two `config.js` with appropriate settings (listening IP/port, logging options, **valid** TLS certificate, etc). + * Set up the browser app: ```bash $ cd app $ npm install +$ export NODE_ENV=production +$ gulp dist ``` +This will build the client application and copy everythink to `server/public` from where the server can host client code to browser requests. (no apache/NGINX needed) * Globally install `gulp-cli` NPM module (may need `sudo`): @@ -53,45 +53,63 @@ $ npm install $ npm install -g gulp-cli ``` +* Set up the server: + +```bash +$ cd .. +$ cd server +$ npm install +``` ## Run it locally * Run the Node.js server application in a terminal: ```bash -$ cd server $ node server.js ``` - -* In another terminal build and run the browser application: - -```bash -$ cd app -$ gulp live -``` - -* Enjoy. - +* test your service in a webRTC enabled browser: `https://yourDomainOrIPAdress:3443/roomname` ## Deploy it in a server -* Build the production ready browser application: - +* Stop your locally running server. Copy systemd-service file `multiparty-meeting.service` to `/etc/systemd/system/` and dobbel check location path settings: ```bash -$ cd app -$ gulp dist +$ cp multiparty-meeting.service /etc/systemd/system/ +$ edit /etc/systemd/system/multiparty-meeting.service ``` -* Upload the entire `server` folder to your server and make your web server (Apache, Nginx...) expose the `server/public` folder. +* reload systemd configuration and start service: -* Edit your `server/config.js` with appropriate settings (listening IP/port, logging options, **valid** TLS certificate, etc). +```bash +$ systemctl daemon-reload +$ systemctl start multiparty-meeting +``` -* Within your server, run the server side Node.js application. We recommend using the [pm2](https://www.npmjs.com/package/pm2) NPM daemon launcher, but any other can be used. +* if you want to start multiparty-meeting at boot time: +```bash +$ systemctl enable multiparty-meeting +``` +## Ports and firewall + +* 3443/tcp (default https webserver and signaling - adjustable in `server/config.js`) +* 3000/tcp (default `gulp live` port for developing with live browser reload, not needed in production enviroments - adjustable in app/gulpfile.js) +* 40000-49999/udp/tcp (media ports - adjustable in `server/config.js`) + +* If you want your service running at standard ports 80/443 you should: + * Make a redirect from HTTP port 80 to HTTPS (with Apache/NGINX) + * Configure a forwarding rule with iptables from port 443 to your configured service port (default 3443) + + +## TURN configuration + +* You need an addtional [TURN](https://github.com/coturn/coturn)-server for clients located behind restrictive firewalls! Add your server and credentials to `app/config.js` ## Author * Håvar Aambø Fosstveit +* Stefan Otto +* Mészáros Mihály This is heavily based on the [work](https://github.com/versatica/mediasoup-demo) done by: