Ecosyste.ms: Awesome

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

Awesome Lists | Featured Topics | Projects

https://github.com/ennuicastr/ennuicastr-server

The server for Ennuicastr ( https://ecastr.com/ )
https://github.com/ennuicastr/ennuicastr-server

Last synced: about 2 months ago
JSON representation

The server for Ennuicastr ( https://ecastr.com/ )

Awesome Lists containing this project

README

        

This is the server component for Ennuicastr, a system for recording multiple
users distributed across the world in a well-synchronized way, without
significant loss, over the web. This is the server software that runs
https://ecastr.com/ , the main installation of Ennuicastr.

This software is divided into several subcomponents:

db: The database

njsp: The configuration for NodeJS-Server-Pages
(`npm install nodejs-server-pages`), which is needed to run the
templated web site component.

server: The server for Ennuicastr recordings itself.

web: The web page

cook: Tools used to process raw audio into usable formats.

Some very light documentation on running your own instance of Ennuicastr is
provided in [docs/INSTALL.md](docs/INSTALL.md).

# Server requirements

The server has two main components: The Ennuicastr protocol server, and the web
components. The web components use
[nodejs-server-pages](https://github.com/Yahweasel/nodejs-server-pages), so
you'll need to set up your web server of choice to use that.

For nodejs-server-pages WebSockets to work, your web server needs to delegate
/ws accesses to it. In nginx, for example:
```
location ~ /ws$ {
proxy_pass http://unix:/tmp/nodejs-server-pages-ws.sock;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
proxy_read_timeout 86400;
proxy_send_timeout 86400;
send_timeout 86400;
}
```

For the AudioWorkletProcessor to be able to use SharedArrayBuffer, you need the
correct "security" features. For instance, in nginx:
```
add_header 'Cross-Origin-Opener-Policy' 'same-origin';
add_header 'Cross-Origin-Embedder-Policy' 'require-corp';
```

The client uses Jitsi to communicate, so you'll need to set up a Jitsi server.
If the client is at https://weca.st/ , then Jitsi must be at
https://jitsi.weca.st/ . That is, it must be at jitsi.X, where X is the domain
used for the client.

You can hide the actual Jitsi interface, since Ennuicastr provides its own. In
nginx, for example:
```
location = / {
return 301 https://ecastr.com/;
}

...

location @root_path {
#rewrite ^/(.*)$ / break;
return 301 https://ecastr.com/;
}
```

Jitsi will also need correct CORS so that it can be connected to from another
domain. For instance, with nginx and weca.st:
```
location = /http-bind {
...
add_header 'Access-Control-Allow-Origin' 'https://weca.st';
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
}
```