External jvb config

I’m trying to setup a HA-environment with jitsi docker.
On main server I have installed “everything except jvb” and on second jvb, on both servers using things from: Self-Hosting Guide - Docker | Jitsi Meet

Ports are open on both servers and accessible between servers.
On main server an extra user is created in prosody for the external jvb-server.
The two servers are not in the same docker network.
On the main server I have references the jvb with JVB_ADVERTISE_IPS

The problem is that I fail to configure the JVB-server properly.
I think it’s the part at shard0 and domains I don’t get right.
I have googled ALOT and tried to different ways, but failing :wink:
“vid.ourserver.tld” is the main domain for our jitsi-install.

HOSTNAME / DOMAIN is probably wrong?
jvb.conf below:

videobridge {
    ice {
        udp {
            port = 10000
        advertise-private-candidates = true
    apis {
        xmpp-client {
            configs {

                shard0 {
                    HOSTNAME = "vid.ourserver.tld"
                    PORT = "5222"
                    DOMAIN = "vid.ourserver.tld"
                    USERNAME = "jvb2"
                    PASSWORD = "the_same_password_as_configured_in_prosody"
                    MUC_JIDS = "jvbbrewery@internal-muc.meet.jitsi"
                    MUC_NICKNAME = "a6771c49b3ab"
        rest {
            enabled = false
    rest {
        shutdown {
            enabled = false
    stats {
        enabled = true
    websockets {
        enabled = true
        domain = "vid.ourserver.tld"
        tls = true
        server-id = ""
    http-servers {
        private {
          host =
        public {
            host =
            port = 9090


ice4j {
    harvest {
        mapping {
            stun {
addresses = [ "meet-jit-si-turnrelay.jitsi.net:443" ]
            static-mappings = [
                    local-address = ""
                    public-address = "jvb-external-ip-is-here"
                    name = "ip-0"

What do you mean by “configured correctly?” Is your JVB running and the passwords on the JVB the sames in prosody?

The common mistake I make when setting up an external JVB is I forgot to route my traffic to the bridge in Nginx. Meaning I have to make sure:

location ~ ^/colibri-ws/default-id/(.*) {
        proxy_pass http://jvb1/colibri-ws/default-id/$1$is_args$args;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        tcp_nodelay on;

should be pointing to:

location ~ ^/colibri-ws/default-id/(.*) {
        proxy_pass http://x.x.x.x:9090/colibri-ws/default-id/$1$is_args$args;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        tcp_nodelay on;

JVB is running, and user/pwd is the same in both prosody and jvb.

The routing to the bridge in Nginx, is that done on jvb or main server?

I think my first problem is I am not sure how to reference main server in jvb server.
If I leave XMPP_SERVER (docker .env config) empty I get one error and if I enter our jtisi main domain I get the second error.

jvb_1  | 2023-01-02T19:50:32.794162656Z org.jivesoftware.smack.SmackException$EndpointConnectionException: Could not lookup the following endpoints: RemoteConnectionEndpointLookupFailure(description='DNS lookup exception for xmpp.meet.jitsi' exception='java.net.UnknownHostException: xmpp.meet.jitsi')
jvb_1  | 2023-01-02T19:50:32.794334551Z 	at org.jivesoftware.smack.SmackException$EndpointConnectionException.from(SmackException.java:334)
jvb_1  | 2023-01-02T19:50:32.794417205Z 	at org.jivesoftware.smack.tcp.XMPPTCPConnection.connectUsingConfiguration(XMPPTCPConnection.java:664)
jvb_1  | 2023-01-02T19:50:32.794502110Z 	at org.jivesoftware.smack.tcp.XMPPTCPConnection.connectInternal(XMPPTCPConnection.java:849)
jvb_1  | 2023-01-02T19:50:32.794526707Z 	at org.jivesoftware.smack.AbstractXMPPConnection.connect(AbstractXMPPConnection.java:526)
jvb_1  | 2023-01-02T19:50:32.794634128Z 	at org.jitsi.xmpp.mucclient.MucClient.lambda$getConnectAndLoginCallable$9(MucClient.java:627)
jvb_1  | 2023-01-02T19:50:32.794674537Z 	at org.jitsi.retry.RetryStrategy$TaskRunner.run(RetryStrategy.java:167)
jvb_1  | 2023-01-02T19:50:32.794828223Z 	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
jvb_1  | 2023-01-02T19:50:32.794853826Z 	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
jvb_1  | 2023-01-02T19:50:32.794917117Z 	at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
jvb_1  | 2023-01-02T19:50:32.794939376Z 	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
jvb_1  | 2023-01-02T19:50:32.795070382Z 	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
jvb_1  | 2023-01-02T19:50:32.795099900Z 	at java.base/java.lang.Thread.run(Thread.java:829)

This is when I use our main domain in jvb config

jvb_1  | 2023-01-02T19:39:50.506038913Z org.jivesoftware.smack.XMPPException$StreamErrorException: host-unknown You can read more about the meaning of this stream error at http://xmpp.org/rfcs/rfc6120.html#streams-error-conditions
jvb_1  | 2023-01-02T19:39:50.506044032Z <stream:error><host-unknown xmlns='urn:ietf:params:xml:ns:xmpp-streams'/><text>This server does not serve **vid.ourserver.tld**</text></stream:error>
jvb_1  | 2023-01-02T19:39:50.506048468Z     at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.parsePackets(XMPPTCPConnection.java:984)
jvb_1  | 2023-01-02T19:39:50.506051993Z     at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.access$700(XMPPTCPConnection.java:916)
jvb_1  | 2023-01-02T19:39:50.506055472Z     at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader$1.run(XMPPTCPConnection.java:939)
jvb_1  | 2023-01-02T19:39:50.506073134Z     at java.base/java.lang.Thread.run(Thread.java:829)
jvb_1  | 2023-01-02T19:39:51.622844710Z JVB 2023-01-02 20:39:51.622 WARNING: [27] [hostname=**vid.ourserver.tld** id=shard0] MucClient.setPresenceExtensions#459: Cannot set presence extension: not connected.

No, the nginx file is in on the server with jitsi/prosody/jicofo. It should be under /etc/nginx/sites-enabled/your.jisti.site.config.

1 Like

Thanks a lot BingeWave!!! This solved my problems.
Really appreciate the time from you and your help.

Half way done…
By accident i activated a local jvb on the main server.turning that off I still have a problem with external jvb.

I get this error and I guess that’s because I don’t reference from jvb correctly?

jvb_1  | 2023-01-02T21:44:23.401031098Z org.jivesoftware.smack.SmackException$EndpointConnectionException: Could not lookup the following endpoints: RemoteConnectionEndpointLookupFailure(description='DNS lookup exception for xmpp.meet.jitsi' exception='java.net.UnknownHostException: xmpp.meet.jitsi: Name or service not known')
jvb_1  | 2023-01-02T21:44:23.401200306Z 	at org.jivesoftware.smack.SmackException$EndpointConnectionException.from(SmackException.java:334)
jvb_1  | 2023-01-02T21:44:23.401230702Z 	at org.jivesoftware.smack.tcp.XMPPTCPConnection.connectUsingConfiguration(XMPPTCPConnection.java:664)
jvb_1  | 2023-01-02T21:44:23.401322313Z 	at org.jivesoftware.smack.tcp.XMPPTCPConnection.connectInternal(XMPPTCPConnection.java:849)
jvb_1  | 2023-01-02T21:44:23.401350053Z 	at org.jivesoftware.smack.AbstractXMPPConnection.connect(AbstractXMPPConnection.java:526)
jvb_1  | 2023-01-02T21:44:23.401469650Z 	at org.jitsi.xmpp.mucclient.MucClient.lambda$getConnectAndLoginCallable$9(MucClient.java:627)
jvb_1  | 2023-01-02T21:44:23.401500305Z 	at org.jitsi.retry.RetryStrategy$TaskRunner.run(RetryStrategy.java:167)
jvb_1  | 2023-01-02T21:44:23.401651423Z 	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
jvb_1  | 2023-01-02T21:44:23.401682054Z 	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
jvb_1  | 2023-01-02T21:44:23.401749659Z 	at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
jvb_1  | 2023-01-02T21:44:23.401774060Z 	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
jvb_1  | 2023-01-02T21:44:23.401847522Z 	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
jvb_1  | 2023-01-02T21:44:23.401872359Z 	at java.base/java.lang.Thread.run(Thread.java:829)

Looks like you are using xmpp.meet.jitsi as xmpp host, you propably only want to set this as domain and use the servername/ip of the machine running prosody as host…