How to host Nextcloud Talk with High Performance Backend for 15-20 people

The Basics

  • Nextcloud Server version (e.g., 29.x.x):
    • 32.0.1
  • Operating system and version (e.g., Ubuntu 24.04):
    • Ubuntu 24.04
  • Web server and version (e.g, Apache 2.4.25):
    • Apache 2.4.58
  • Reverse proxy and version _(e.g. nginx 1.27.2)
    • (none)
  • PHP version (e.g, 8.3):
    • 8.3
  • Is this the first time you’ve seen this error? (Yes / No):
    • No
  • When did this problem seem to first start?
    • It never was different
  • Installation method (e.g. AlO, NCP, Bare Metal/Archive, etc.)
    • Bare Metal
  • Are you using CloudfIare, mod_security, or similar? (Yes / No)
    • No

Summary of the issue you are facing:

I host Nextcloud on virtual server (KVM based) with 6 cores (Intel(R) Xeon(R) Gold 6230 CPU @ 2.10GHz) and 32 GB RAM.

In addition there is the Nextcloud Talk High Performance backend which is hosted on the same machine, build from source along with TURN, NATS and Janus as seperate services and Apache as reverse proxy to handle HTTPS/WSS following the instructions on https://arnowelzel.de/en/nextcloud-talk-with-coturn-and-self-hosted-signaling-server-high-performance-backend.

With this setup I was able to run sessions with 15-20 users - however: in nearly every session there where issues with performance. Despite the server itself was only using 20-30% of CPU resources and the network connection was only around 15% of the theoretical maximum of 800 MBit/s up/down, the video quality was quite bad for around half of the participants. Also some participants could not connect at all without retrying it at least once or twice.

For this reason, that group decided to go back to Zoom which worked out of the box without any issues at all for everyone - good video quality, no connection issues at all.

I already moved the HPB to another server as documented in Nextcloud Talk High Performance Backend with Docker | Arno Welzel - but I don’t know yet, if this works better.

However I wonder if there are real world examples or “best practice” guides for successful setups which are able to handle around 20 users in a session in a comparable quality like any of the big commercial products.

Steps to replicate it (hint: details matter!):

  1. Install Nextcloud manually using PHP via fcgi, Apache as webserver and MariaDB for the database on a KVM based server with 8 cores (Intel(R) Xeon(R) Gold 6230 CPU @ 2.10GHz), 32 GB RAM and 1 GBit/s network connection (effective around 800 MBit/s usable).

  2. Install Nextcloud High Performance Backend according to this instructions on the same server: Nextcloud Talk with Coturn and self hosted signaling server (High Performance Backend) | Arno Welzel

  3. Configure Nextcloud Talk to use the installed High Performance Backend and STUN, TURN.

Log entries

Nextcloud

Please provide the log entries from your Nextcloud log that are generated during the time of problem (via the Copy raw option from Administration settings->Logging screen or from your nextcloud.log located in your data directory). Feel free to use a pastebin/gist service if necessary.

-

Web Browser

If the problem is related to the Web interface, open your browser inspector Console and Network tabs while refreshing (reloading) and reproducing the problem. Provide any relevant output/errors here that appear.

-

Web server / Reverse Proxy

The output of your Apache/nginx/system log in /var/log/____:

-

Configuration

Nextcloud

The output of occ config:list system or similar is best, but, if not possible, the contents of your config.php file from /path/to/nextcloud is fine (make sure to remove any identifiable information!):

system
{
    "system": {
        "instanceid": "***REMOVED SENSITIVE VALUE***",
        "passwordsalt": "***REMOVED SENSITIVE VALUE***",
        "secret": "***REMOVED SENSITIVE VALUE***",
        "trusted_domains": [
            "nextcloud.0x0c.de"
        ],
        "datadirectory": "***REMOVED SENSITIVE VALUE***",
        "skeletondirectory": "",
        "overwrite.cli.url": "***REMOVED SENSITIVE VALUE***",
        "dbtype": "mysql",
        "version": "32.0.1.2",
        "installed": true,
        "htaccess.RewriteBase": "\/",
        "maintenance": false,
        "dbname": "***REMOVED SENSITIVE VALUE***",
        "dbhost": "***REMOVED SENSITIVE VALUE***",
        "dbuser": "***REMOVED SENSITIVE VALUE***",
        "dbpassword": "***REMOVED SENSITIVE VALUE***",
        "dbpersistent": true,
        "memcache.local": "\\OC\\Memcache\\APCu",
        "memcache.distributed": "\\OC\\Memcache\\Redis",
        "filelocking.enabled": true,
        "memcache.locking": "\\OC\\Memcache\\Redis",
        "redis": {
            "host": "***REMOVED SENSITIVE VALUE***",
            "port": 0,
            "dbindex": 0
        },
        "knowledgebaseenabled": false,
        "theme": "",
        "simpleSignUpLink.shown": false,
        "loglevel": 2,
        "log_authfailip": true,
        "mysql.utf8mb4": true,
        "mail_from_address": "***REMOVED SENSITIVE VALUE***",
        "mail_domain": "***REMOVED SENSITIVE VALUE***",
        "mail_smtpmode": "sendmail",
        "mail_smtphost": "***REMOVED SENSITIVE VALUE***",
        "mail_smtpsecure": "ssl",
        "mail_smtpname": "***REMOVED SENSITIVE VALUE***",
        "mail_smtppassword": "***REMOVED SENSITIVE VALUE***",
        "updater.release.channel": "stable",
        "trashbin_retention_obligation": "auto, 30",
        "versions_retention_obligation": "auto, 180",
        "has_rebuilt_cache": true,
        "default_language": "de",
        "default_phone_region": "DE",
        "check_data_directory_permissions": false,
        "log_rotate_size": 52428800,
        "profile.enabled": false,
        "preview_max_x": 1920,
        "preview_max_y": 1920,
        "mail_sendmailmode": "smtp",
        "mail_smtpauth": 1,
        "mail_smtpport": "465",
        "trusted_proxies": "***REMOVED SENSITIVE VALUE***",
        "auth.bruteforce.protection.enabled": true,
        "ratelimit.protection.enabled": true,
        "reference_opengraph": true,
        "integrity.check.disabled": false,
        "defaultapp": "files",
        "maintenance_window_start": 2,
        "apps_paths": [
            {
                "path": "\/var\/www\/***REMOVED SENSITIVE VALUE***\/apps",
                "url": "\/apps",
                "writable": true
            }
        ],
        "app_install_overwrite": [],
        "forbidden_filename_basenames": [
            "con",
            "prn",
            "aux",
            "nul",
            "com0",
            "com1",
            "com2",
            "com3",
            "com4",
            "com5",
            "com6",
            "com7",
            "com8",
            "com9",
            "com\u00b9",
            "com\u00b2",
            "com\u00b3",
            "lpt0",
            "lpt1",
            "lpt2",
            "lpt3",
            "lpt4",
            "lpt5",
            "lpt6",
            "lpt7",
            "lpt8",
            "lpt9",
            "lpt\u00b9",
            "lpt\u00b2",
            "lpt\u00b3"
        ],
        "forbidden_filename_characters": [
            "<",
            ">",
            ":",
            "\"",
            "|",
            "?",
            "*",
            "\\",
            "\/"
        ],
        "forbidden_filename_extensions": [
            " ",
            ".",
            ".filepart",
            ".part"
        ],
        "memories.db.triggers.fcu": true,
        "memories.exiftool": "\/var\/www\/***REMOVED SENSITIVE VALUE***\/apps\/memories\/bin-ext\/exiftool-amd64-glibc",
        "memories.vod.path": "\/var\/www\/***REMOVED SENSITIVE VALUE***\/apps\/memories\/bin-ext\/go-vod-amd64",
        "memories.index.path.blacklist": "***REMOVED SENSITIVE VALUE***",
        "enabledPreviewProviders": [
            "OC\\Preview\\Movie",
            "OC\\Preview\\Image",
            "OC\\Preview\\HEIC",
            "OC\\Preview\\TIFF"
        ],
        "dbtableprefix": "oc_",
        "memories.gis_type": 1,
        "memories.vod.ffmpeg": "\/usr\/bin\/ffmpeg",
        "memories.vod.ffprobe": "\/usr\/bin\/ffprobe"
    }
}

Apps

The output of occ app:list (if possible).

Enabled:
  - activity: 5.0.0-dev.0
  - admin_audit: 1.22.0
  - app_api: 32.0.0
  - bookmarks: 16.0.0
  - bruteforcesettings: 5.0.0-dev.0
  - calendar: 6.0.2
  - circles: 32.0.0
  - cloud_federation_api: 1.16.0
  - collectives: 3.2.3
  - comments: 1.22.0
  - contacts: 8.0.4
  - contactsinteraction: 1.13.1
  - dav: 1.34.2
  - deck: 1.16.0
  - drawio: 3.1.1
  - external: 7.0.0
  - federatedfilesharing: 1.22.0
  - federation: 1.22.0
  - files: 2.4.0
  - files_downloadlimit: 5.0.0-dev.0
  - files_pdfviewer: 5.0.0-dev.0
  - files_reminders: 1.5.0
  - files_sharing: 1.24.0
  - files_trashbin: 1.22.0
  - files_versions: 1.25.0
  - firstrunwizard: 5.0.0-dev.0
  - flow_notifications: 3.0.0
  - impersonate: 3.0.0
  - logreader: 5.0.0-dev.0
  - lookup_server_connector: 1.20.0
  - memories: 7.7.0
  - nextcloud_announcements: 4.0.0-dev.0
  - notes: 4.12.3
  - notifications: 5.0.0-dev.0
  - oauth2: 1.20.0
  - password_policy: 4.0.0-dev.0
  - photos: 5.0.0-dev.1
  - previewgenerator: 5.10.0
  - privacy: 4.0.0-dev.0
  - profile: 1.1.0
  - provisioning_api: 1.22.0
  - richdocuments: 9.0.1
  - serverinfo: 4.0.0-dev.0
  - settings: 1.15.1
  - sharebymail: 1.22.0
  - spreed: 22.0.1
  - support: 4.0.0-dev.0
  - survey_client: 4.0.0-dev.0
  - systemtags: 1.22.0
  - text: 6.0.1
  - theming: 2.7.0
  - theming_customcss: 1.19.0
  - twofactor_backupcodes: 1.21.0
  - twofactor_webauthn: 2.4.1
  - updatenotification: 1.22.0
  - viewer: 5.0.0-dev.0
  - webhook_listeners: 1.3.0
  - whiteboard: 1.4.0
  - workflowengine: 2.14.0
Disabled:
  - appointments: 2.6.1 (installed 2.6.1)
  - dashboard: 7.12.0 (installed 7.8.0)
  - dicomviewer: 2.3.1 (installed 2.3.1)
  - encryption: 2.20.0 (installed 2.13.0)
  - files_external: 1.24.0 (installed 1.19.0)
  - notify_push: 1.2.0 (installed 1.2.0)
  - recommendations: 5.0.0-dev.0 (installed 0.4.0)
  - related_resources: 3.0.0-dev.0 (installed 1.1.0-alpha1)
  - suspicious_login: 10.0.0-dev.0
  - twofactor_nextcloud_notification: 6.0.0-dev.0
  - twofactor_totp: 14.0.0
  - user_ldap: 1.23.0
  - user_status: 1.12.0 (installed 1.5.0)
  - weather_status: 1.12.0 (installed 1.3.0)

Tips for increasing the likelihood of a response

  • Use the preformatted text formatting option in the editor for all log entries and configuration output.
  • If screenshots are useful, feel free to include them.
    • If possible, also include key error output in text form so it can be searched for.
  • Try to edit log output only minimally (if at all) so that it can be ran through analyzers / formatters by those trying to help you.