256 lines
7.8 KiB
Markdown
256 lines
7.8 KiB
Markdown
# Server Installation for Jitsi Meet
|
|
|
|
This describes configuring a server `jitsi.example.com`. You will need to
|
|
change references to that to match your host, and generate some passwords for
|
|
`YOURSECRET1` and `YOURSECRET2`.
|
|
|
|
There are also some complete [example config files](https://github.com/jitsi/jitsi-meet/tree/master/doc/example-config-files/) available, mentioned in each section.
|
|
|
|
## Install prosody and otalk modules
|
|
```sh
|
|
apt-get install lsb-release
|
|
echo deb http://packages.prosody.im/debian $(lsb_release -sc) main | sudo tee -a /etc/apt/sources.list
|
|
wget --no-check-certificate https://prosody.im/files/prosody-debian-packages.key -O- | sudo apt-key add -
|
|
apt-get update
|
|
apt-get install prosody-trunk
|
|
apt-get install git lua-zlib lua-sec-prosody lua-dbi-sqlite3 liblua5.1-bitop-dev liblua5.1-bitop0
|
|
git clone https://github.com/andyet/otalk-server.git
|
|
cd otalk-server
|
|
cp -r mod* /usr/lib/prosody/modules
|
|
```
|
|
|
|
## Configure prosody
|
|
Modify the config file in `/etc/prosody/prosody.cfg.lua` (see also the example config file):
|
|
|
|
- modules to enable/add: compression, bosh, smacks, carbons, mam, lastactivity, offline, pubsub, adhoc, websocket, http_altconnect
|
|
- comment out: `c2s_require_encryption = true`, and `s2s_secure_auth = false`
|
|
- change `authentication = "internal_hashed"`
|
|
- add this:
|
|
```
|
|
daemonize = true
|
|
cross_domain_bosh = true;
|
|
storage = {archive2 = "sql2"}
|
|
sql = { driver = "SQLite3", database = "prosody.sqlite" }
|
|
default_archive_policy = "roster"
|
|
```
|
|
- configure your domain by editing the example.com virtual host section section:
|
|
```
|
|
VirtualHost "jitsi.example.com"
|
|
authentication = "anonymous"
|
|
ssl = {
|
|
key = "/var/lib/prosody/jitsi.example.com.key";
|
|
certificate = "/var/lib/prosody/jitsi.example.com.crt";
|
|
}
|
|
```
|
|
- and finally configure components:
|
|
```
|
|
Component "conference.jitsi.example.com" "muc"
|
|
Component "jitsi-videobridge.jitsi.example.com"
|
|
component_secret = "YOURSECRET1"
|
|
```
|
|
|
|
Generate certs for the domain:
|
|
```sh
|
|
prosodyctl cert generate jitsi.example.com
|
|
```
|
|
|
|
Restart prosody XMPP server with the new config
|
|
```sh
|
|
prosodyctl restart
|
|
```
|
|
|
|
## Install nginx
|
|
```sh
|
|
apt-get install nginx
|
|
```
|
|
|
|
Add nginx config for domain in `/etc/nginx/nginx.conf`:
|
|
```
|
|
tcp_nopush on;
|
|
types_hash_max_size 2048;
|
|
server_names_hash_bucket_size 64;
|
|
```
|
|
|
|
Add a new file `jitsi.example.com` in `/etc/nginx/sites-available` (see also the example config file):
|
|
```
|
|
server {
|
|
listen 80;
|
|
server_name jitsi.example.com;
|
|
# set the root
|
|
root /srv/jitsi.example.com;
|
|
index index.html;
|
|
location ~ ^/([a-zA-Z0-9]+)$ {
|
|
rewrite ^/(.*)$ / break;
|
|
}
|
|
# BOSH
|
|
location /http-bind {
|
|
proxy_pass http://localhost:5280/http-bind;
|
|
proxy_set_header X-Forwarded-For $remote_addr;
|
|
proxy_set_header Host $http_host;
|
|
}
|
|
# xmpp websockets
|
|
location /xmpp-websocket {
|
|
proxy_pass http://localhost:5280;
|
|
proxy_http_version 1.1;
|
|
proxy_set_header Upgrade $http_upgrade;
|
|
proxy_set_header Connection "upgrade";
|
|
proxy_set_header Host $host;
|
|
tcp_nodelay on;
|
|
}
|
|
}
|
|
```
|
|
|
|
Add link for the added configuration
|
|
```sh
|
|
cd /etc/nginx/sites-enabled
|
|
ln -s ../sites-available/jitsi.example.com jitsi.example.com
|
|
```
|
|
|
|
## Fix firewall if needed
|
|
```sh
|
|
ufw allow 80
|
|
ufw allow 5222
|
|
```
|
|
|
|
## Install Jitsi Videobridge
|
|
```sh
|
|
wget https://download.jitsi.org/jitsi-videobridge/linux/jitsi-videobridge-linux-{arch-buildnum}.zip
|
|
unzip jitsi-videobridge-linux-{arch-buildnum}.zip
|
|
```
|
|
|
|
Install JRE if missing:
|
|
```
|
|
apt-get install default-jre
|
|
```
|
|
|
|
In the user home that will be starting Jitsi Videobridge create `.sip-communicator` folder and add the file `sip-communicator.properties` with one line in it:
|
|
```
|
|
org.jitsi.impl.neomedia.transform.srtp.SRTPCryptoContext.checkReplay=false
|
|
```
|
|
|
|
Start the videobridge with:
|
|
```sh
|
|
./jvb.sh --host=localhost --domain=jitsi.example.com --port=5347 --secret=YOURSECRET1 &
|
|
```
|
|
Or autostart it by adding the line in `/etc/rc.local`:
|
|
```sh
|
|
/bin/bash /root/jitsi-videobridge-linux-{arch-buildnum}/jvb.sh --host=localhost --domain=jitsi.example.com --port=5347 --secret=YOURSECRET1 </dev/null >> /var/log/jvb.log 2>&1
|
|
```
|
|
|
|
## Deploy Jitsi Meet
|
|
Checkout and configure Jitsi Meet:
|
|
```sh
|
|
cd /srv
|
|
git clone https://github.com/jitsi/jitsi-meet.git
|
|
mv jitsi-meet/ jitsi.example.com
|
|
```
|
|
|
|
Edit host names in `/srv/jitsi.example.com/config.js` (see also the example config file):
|
|
```
|
|
var config = {
|
|
hosts: {
|
|
domain: 'jitsi.example.com',
|
|
muc: 'conference.jitsi.example.com',
|
|
bridge: 'jitsi-videobridge.jitsi.example.com'
|
|
},
|
|
useNicks: false,
|
|
bosh: '//jitsi.example.com/http-bind', // FIXME: use xep-0156 for that
|
|
desktopSharing: 'false' // Desktop sharing method. Can be set to 'ext', 'webrtc' or false to disable.
|
|
//chromeExtensionId: 'diibjkoicjeejcmhdnailmkgecihlobk', // Id of desktop streamer Chrome extension
|
|
//minChromeExtVersion: '0.1' // Required version of Chrome extension
|
|
};
|
|
```
|
|
|
|
Restart nginx to get the new configuration:
|
|
```sh
|
|
invoke-rc.d nginx restart
|
|
```
|
|
|
|
|
|
## Install [Turn server](https://github.com/andyet/otalk-server/tree/master/restund)
|
|
```sh
|
|
apt-get install make gcc
|
|
wget http://creytiv.com/pub/re-0.4.7.tar.gz
|
|
tar zxvf re-0.4.7.tar.gz
|
|
ln -s re-0.4.7 re
|
|
cd re-0.4.7
|
|
sudo make install PREFIX=/usr
|
|
cd ..
|
|
wget http://creytiv.com/pub/restund-0.4.2.tar.gz
|
|
wget https://raw.github.com/andyet/otalk-server/master/restund/restund-auth.patch
|
|
tar zxvf restund-0.4.2.tar.gz
|
|
cd restund-0.4.2/
|
|
patch -p1 < ../restund-auth.patch
|
|
sudo make install PREFIX=/usr
|
|
cp debian/restund.init /etc/init.d/restund
|
|
chmod +x /etc/init.d/restund
|
|
cd /etc
|
|
wget https://raw.github.com/andyet/otalk-server/master/restund/restund.conf
|
|
```
|
|
|
|
Configure addresses and ports as desired, and the password to be configured in prosody:
|
|
```
|
|
realm jitsi.example.com
|
|
# share this with your prosody server
|
|
auth_shared YOURSECRET2
|
|
|
|
# modules
|
|
module_path /usr/lib/restund/modules
|
|
turn_relay_addr [turn ip address]
|
|
```
|
|
|
|
Configure prosody to use it in `/etc/prosody/prosody.cfg.lua`. Add to your virtual host:
|
|
```
|
|
turncredentials_secret = "YOURSECRET2";
|
|
turncredentials = {
|
|
{ type = "turn", host = "turn.address.ip.configured", port = 3478, transport = "tcp" }
|
|
}
|
|
```
|
|
|
|
Add turncredentials module in the "modules_enabled" section
|
|
|
|
Reload prosody if needed
|
|
```
|
|
prosodyctl restart
|
|
```
|
|
|
|
## Running behind NAT
|
|
In case of videobridge being installed on a machine behind NAT, add the following extra lines to the file `~/.sip-communicator/sip-communicator.properties` (in the home of user running the videobridge):
|
|
```
|
|
org.jitsi.videobridge.NAT_HARVESTER_LOCAL_ADDRESS=<Local.IP.Address>
|
|
org.jitsi.videobridge.NAT_HARVESTER_PUBLIC_ADDRESS=<Public.IP.Address>
|
|
```
|
|
|
|
So the file should look like this at the end:
|
|
```
|
|
org.jitsi.impl.neomedia.transform.srtp.SRTPCryptoContext.checkReplay=false
|
|
org.jitsi.videobridge.NAT_HARVESTER_LOCAL_ADDRESS=<Local.IP.Address>
|
|
org.jitsi.videobridge.NAT_HARVESTER_PUBLIC_ADDRESS=<Public.IP.Address>
|
|
```
|
|
|
|
# Hold your first conference
|
|
You are now all set and ready to have your first meet by going to http://jitsi.example.com
|
|
|
|
|
|
## Enabling recording
|
|
Currently recording is only supported for linux-64 and macos. To enable it, add
|
|
the following properties to sip-communicator.properties:
|
|
```
|
|
org.jitsi.videobridge.ENABLE_MEDIA_RECORDING=true
|
|
org.jitsi.videobridge.MEDIA_RECORDING_PATH=/path/to/recordings/dir
|
|
org.jitsi.videobridge.MEDIA_RECORDING_TOKEN=secret
|
|
```
|
|
|
|
where /path/to/recordings/dir is the path to a pre-existing directory where recordings
|
|
will be stored (needs to be writeable by the user running jitsi-videobridge),
|
|
and "secret" is a string which will be used for authentication.
|
|
|
|
Then, edit the Jitsi-Meet config.js file and set:
|
|
```
|
|
enableRecording: true
|
|
```
|
|
|
|
Restart jitsi-videobridge and start a new conference (making sure that the page
|
|
is reloaded with the new config.js) -- the organizer of the conference should
|
|
now have a "recoriding" button in the floating menu, near the "mute" button.
|