Realtime Collaboration broken after fresh 18.3.0 install

Hi,

I’m running XWiki 18.3.0 in a Podman container behind an Apache reverse proxy. After setting up the instance I’m unable to use the Realtime WYSIWYG editor. The editor does not load.

Setup:

  • XWiki 18.3.0 (Tomcat 10.1.55)
  • Deployed as Podman container
  • Apache httpd as reverse proxy with WebSocket support (ProxyPass with upgrade=websocket)
  • F5 BIG-IP in front with WebSocket profile enabled

What I did:

  1. Fresh install of XWiki 18.3.0 (empty, no flavor)
  2. Installed the standard XWiki Flavor

Symptoms:

  • The WebSocket handshake itself works fine (101 response is immediate, tested with curl directly against the container and through the full proxy chain)
  • The CKEditor does not load. I can’t edit pages iun WYSIWYG mode

All Realtime extensions are consistently on 18.3.0:

  • Realtime WebJar 18.3.0
  • XWiki Platform - Realtime - API 18.3.0
  • Realtime UI 18.3.0

The error persists after a full container restart.

Any ideas?

I encountered the same issue, and a similar issue when upgrading from 18.2 as a trial for a customer project.

I have currently disabled both CKEditor and Real-time… that’s the only way I could continue to add content.

The WYSIWYG editor is supposed to fail-safe (i.e. continue with realtime editing disabled) in case the connection to the Netflux WebSocket end-point fails. The fact that the editor doesn’t load suggests you might have a different problem. Would be great if you could:

  • try cleaning the browser cache and reload; even if it’s a fresh installation, you might have tested a different XWiki version previously on the same URL, so some resources might be cached.
    • alternatively you can use a private / incognito browser window
  • check the JavaScript console (using the browser’s developer tools); I expect some error to be logged there, that might explain why the editor doesn’t load
  • try disabling the xwiki-realtime CKEditor plugin from the WYSIWYG editor administration section, to see if the editor loads; I doubt realtime editing is the problem, but you never know..

Hope this helps,
Marius

Hi Marius,

in the developer console everythings seems to be fine.

In the JavaScript console i only get

09:10:43.498 GET wss://xwiki-test.example.com/websocket/xwiki/netflux [HTTP/1.1 101 29ms]
09:11:43.590 We lost the connection to the editing session. webjar.bundle.min.js:28:363
09:12:50.745 We lost the connection to the editing session. webjar.bundle.min.js:28:363

So it seems to be a timeout issue. If i disable the xwiki-realtimeplugin, i can edit all pages again. However, the collaboration feature is important for us to switcxxh from Confluence to XWiki.

I even check our stack:

Client → Big IP F5 → Apache → Podmancontainer

  • In the Big IP F5 i added a tcp profile to the virtualserver with a timeout of 3600s and a keep alive interval of 60s
  • In the Apache Configuration the ProxyTimeout is set to 3600

And my Apache configuration:

<VirtualHost *:443>
    ServerName xwiki-test.example.com

    ErrorLog logs/ssl_error_log
    TransferLog logs/ssl_access_log
    LogLevel warn

    SSLEngine on
    SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
    SSLCipherSuite "EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA256:EECDH:+CAMELLIA128:+AES128:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:!IDEA:!ECDSA:kEDH:CAMELLIA128-SHA:AES128-SHA"
    SSLCompression off
    SSLCertificateFile /etc/pki/tls/certs/xwiki-test.crt
    SSLCertificateKeyFile /etc/pki/tls/private/xwiki-test.key

    AllowEncodedSlashes NoDecode

    <Location />
        Require all granted
    </Location>

    ProxyRequests Off
    ProxyPreserveHost On
    ProxyTimeout 3600

    ProxyPass / http://[::]:8080/ nocanon upgrade=websocket
    ProxyPassReverse / http://[::]:8080/ nocanon

    RequestHeader set X-Forwarded-Proto "https"
    RequestHeader set X-Forwarded-Port "443"
</VirtualHost>

I don’t think i missed something.

I found the issue.

my F5 Rule was the problem:

when HTTP_REQUEST { if { [HTTP::header "Upgrade"] eq "websocket" } { HTTP::disable TCP::collect } }

After removing it works.