Installing docker containers on a Ubuntu VPS fails at starting a room

Hi everyone,

I have been a Jitsi user for years and love it. Thanks a lot for making it available. I am trying to advocate for Jitsi in the school where I teach, to try and keep the video meetings platform that I share with my students free of commercial players that have less than clear data policies.

I installed Jitsi meet from the official Docker image using Docker compose. On a VPS running Ubuntu 16.04.6 LTS. Everything seems to be running fine, the Docker compose install was a breeze, thanks! After configuring HTTPS in the subdomain and configuring nginx as proxy (see below) and changing the .env file to include the subdomain configuration. If I visit the site I can see the web interface. When I try to open a meeting room, my browser asks for camera and mic access but Jitsi never really creates the room, it gets stuck in an infinite loop. I am not sure what more to do to troubleshoot this problem, so any advice you might have is most appreciated. Scroll down for details on my configuration.

This is the browser console log I get when I try to open a room:

2020-04-29T15:31:52.408Z [features/analytics] <te/<>:  Error: "No analytics handlers created!"
    te functions.js:100
Logger.js:154:22
    o Logger.js:154
    te functions.js:107
2020-04-29T15:31:56.102Z [features/analytics] <te/<>:  Error: "No analytics handlers created!"
    te functions.js:100
Logger.js:154:22
2020-04-29T15:31:58.009Z [JitsiMeetJS.js] <getGlobalOnErrorHandler>:  UnhandledError: null Script: null Line: null Column: null StackTrace:  Error: "Strophe: request id 1.1 error 502 happened"
    log strophe.util.js:89
    error strophe.umd.js:1392
    _onRequestStateChange strophe.umd.js:5017
Logger.js:154:22
    o Logger.js:154
    getGlobalOnErrorHandler JitsiMeetJS.js:612
    onerror middleware.js:100
    callErrorHandler GlobalOnErrorHandler.js:61
    log strophe.util.js:89
    error strophe.umd.js:1392
    _onRequestStateChange strophe.umd.js:5017
2020-04-29T15:31:58.012Z [modules/xmpp/strophe.util.js] <t.a/i.Strophe.log>:  Strophe: request id 1.1 error 502 happened Logger.js:154:22
XML Parsing Error: mismatched tag. Expected: </hr>.
Location: https://meet.interactiefarnhem.nl/http-bind?room=stickycourtesiesimposeway
Line Number 6, Column 3: http-bind:6:3
2020-04-29T15:31:58.081Z [JitsiMeetJS.js] <getGlobalOnErrorHandler>:  UnhandledError: null Script: null Line: null Column: null StackTrace:  Error: "Strophe: request id 2.2 error 502 happened"
    log strophe.util.js:89
    error strophe.umd.js:1392
    _onRequestStateChange strophe.umd.js:5017
Logger.js:154:22
2020-04-29T15:31:58.083Z [modules/xmpp/strophe.util.js] <t.a/i.Strophe.log>:  Strophe: request id 2.2 error 502 happened Logger.js:154:22
XML Parsing Error: mismatched tag. Expected: </hr>.
Location: https://meet.interactiefarnhem.nl/http-bind?room=stickycourtesiesimposeway
Line Number 6, Column 3: http-bind:6:3
2020-04-29T15:32:06.134Z [JitsiMeetJS.js] <getGlobalOnErrorHandler>:  UnhandledError: null Script: null Line: null Column: null StackTrace:  Error: "Strophe: request id 3.3 error 502 happened"
    log strophe.util.js:89
    error strophe.umd.js:1392
    _onRequestStateChange strophe.umd.js:5017
Logger.js:154:22
2020-04-29T15:32:06.139Z [modules/xmpp/strophe.util.js] <t.a/i.Strophe.log>:  Strophe: request id 3.3 error 502 happened Logger.js:154:22
XML Parsing Error: mismatched tag. Expected: </hr>.
Location: https://meet.interactiefarnhem.nl/http-bind?room=stickycourtesiesimposeway
Line Number 6, Column 3: http-bind:6:3

I run docker without escalated privileges, as a user. These are the status of docker containers:

IMAGE               COMMAND       PORTS                                              NAMES
jitsi/jvb           "/init"       0.0.0.0:4443->4443/tcp, 0.0.0.0:10000->10000/udp   docker-jitsi-meet_jvb_1
jitsi/jicofo        "/init"                                                          docker-jitsi-meet_jicofo_1
jitsi/prosody       "/init"       5222/tcp, 5269/tcp, 5280/tcp, 5347/tcp             docker-jitsi-meet_prosody_1
jitsi/web           "/init"       0.0.0.0:8000->80/tcp, 0.0.0.0:8443->443/tcp        docker-jitsi-m

These are the disc mounts on the different containers, want to make sure that the config is being mounted and read:

docker inspect -f '{{ .Mounts }}' c62a2474631c
[{bind  /home/admin/.jitsi-meet-cfg/jvb /config  rw true rprivate}]
docker inspect -f '{{ .Mounts }}' c9dd389ed569
[{bind  /home/admin/.jitsi-meet-cfg/jicofo /config  rw true rprivate}]
docker inspect -f '{{ .Mounts }}' 65cb4633d36e
[{bind  /home/admin/.jitsi-meet-cfg/prosody /config  rw true rprivate} {volume c52384fa758f10108bf11004cea73e373bf2f176e6175d8f67eba2a5dceec492 /var/lib/docker/volumes/c52384fa758f10108bf11004cea73e373bf2f176e6175d8f67eba2a5dceec492/_data /prosody-plugins-custom local  true }]
docker inspect -f '{{ .Mounts }}' a62d633511f7
[{bind  /home/admin/.jitsi-meet-cfg/web /config  rw true rprivate} {bind  /home/admin/.jitsi-meet-cfg/transcripts /usr/share/jitsi-meet/transcripts  rw true rprivate} {bind  /home/admin/.jitsi-meet-cfg/web/letsencrypt /etc/letsencrypt  rw true rprivate}]

This is my nginx proxy config:

server {
    listen 443 ssl http2;
    server_name meet.interactiefarnhem.nl;

    location / {
        proxy_set_header Host $http_host;
        proxy_http_version 1.1;
        proxy_set_header X-Forwarded-Ssl on;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_pass https://localhost:8443;
    }

    # BOSH, Bidirectional-streams Over Synchronous HTTP
    # https://en.wikipedia.org/wiki/BOSH_(protocol)
    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/xmpp-websocket;
        proxy_http_version      1.1;
        proxy_set_header        Upgrade $http_upgrade;
        proxy_set_header        Connection "upgrade";
        proxy_set_header        Host $host;
        tcp_nodelay             on;
    }
    ssl_certificate /etc/letsencrypt/live/meet.interactiefarnhem.nl/fullchain.pem; # managed by $
    ssl_certificate_key /etc/letsencrypt/live/meet.interactiefarnhem.nl/privkey.pem; # managed b$
}

I am using UFW as a firewall, this is the configuration:

Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere                  
80/tcp                     ALLOW       Anywhere                  
443/tcp                    ALLOW       Anywhere                  
4443/tcp                   ALLOW       Anywhere                  
10000/udp                  ALLOW       Anywhere                  
22/tcp (v6)                ALLOW       Anywhere (v6)             
80/tcp (v6)                ALLOW       Anywhere (v6)             
443/tcp (v6)               ALLOW       Anywhere (v6)             
4443/tcp (v6)              ALLOW       Anywhere (v6)             
10000/udp (v6)             ALLOW       Anywhere (v6)