Need help: LibreOffice file preview is sometimes not available although Collabora is installed

Hello!

I’m operating and managing a Seafile server with Collabora Online integration.
The server is a VPS with Debian 11, 2 virtual CPU cores and 2 GB of RAM.
Seafile Community Edition version 10.0.1 is installed via Docker.
The server does not only serve the Seafile instance but also a static website and a Jitsi Meet instance.
An Nginx reverse proxy is used to handle the incoming traffic and forward it to the mentioned individual services.
The server was set up in 2019 and Seafile has been upgraded to newer versions regularly since then.

In general, everything works perfectly fine. There is only one problem: Sometimes, and only for some of the 45 Seafile users, Collabora Online does not work. When they click to open a .ods file, the file view is not opened but instead it shows the message »Preview is not available for this file format« and a Download button. But for other users, editing the very same file with Collabora Online does work just fine. For some users, it works sometimes and for some users always, but for some unlucky users it works never.

I would be very happy if someone could help me find the root of this problem and solve it.

Here’s some ideas I already have:
Is there a log file where I can look for helpful info?
Could it be that the server’s specs are not sufficient to serve dockerized Collabora Online and Seafile besides other services? (Although when I check RAM usage, I see it rarely exceeding 25 %.)

Any help would be greatly appreciated! My config files are shown below. Please let me know if some important file is missing.

Thank you in advance!

Here is my configuration of the Nginx reverse proxy, regarding the Seafile instance:

server {
  server_name ..........;
  location / {
    proxy_pass http://localhost:8822;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_max_temp_file_size 0;
    client_max_body_size 0;
  }

    listen [::]:443 ssl; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/........../fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/........../privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}

server {
    if ($host = ..........) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

  server_name ..........;

  listen 80;
  listen [::]:80;
    return 404; # managed by Certbot
}

Here is my configuration of the Nginx reverse proxy, regarding Collabora Online:

##
# You should look at the following URL's in order to grasp a solid understanding
# of Nginx configuration files in order to fully unleash the power of Nginx.
# https://www.nginx.com/resources/wiki/start/
# https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/
# https://wiki.debian.org/Nginx/DirectoryStructure
#
# In most cases, administrators will remove this file from sites-enabled/ and
# leave it as reference inside of sites-available where it will continue to be
# updated by the nginx packaging team.
#
# This file will automatically load configuration files provided by other
# applications, such as Drupal or Wordpress. These applications will be made
# available underneath a path with that package name, such as /drupal8.
#
# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
##

# Default server configuration
#
server {

	# SSL configuration
	#
	# listen 443 ssl default_server;
	# listen [::]:443 ssl default_server;
	#
	# Note: You should disable gzip for SSL traffic.
	# See: https://bugs.debian.org/773332
	#
	# Read up on ssl_ciphers to ensure a secure configuration.
	# See: https://bugs.debian.org/765782
	#
	# Self signed certs generated by the ssl-cert package
	# Don't use them in a production server!
	#
	# include snippets/snakeoil.conf;

	# root /var/www/html;

	# Add index.php to the list if you are using PHP
	# index index.html index.htm index.nginx-debian.html;

	server_name collabora-online...........;

	# location / {
		# First attempt to serve request as file, then
		# as directory, then fall back to displaying a 404.
		# try_files $uri $uri/ =404;
	# }

	# pass PHP scripts to FastCGI server
	#
	#location ~ \.php$ {
	#	include snippets/fastcgi-php.conf;
	#
	#	# With php-fpm (or other unix sockets):
	#	fastcgi_pass unix:/run/php/php7.4-fpm.sock;
	#	# With php-cgi (or other tcp sockets):
	#	fastcgi_pass 127.0.0.1:9000;
	#}

	# deny access to .htaccess files, if Apache's document root
	# concurs with nginx's one
	#
	#location ~ /\.ht {
	#	deny all;
	#}

        # static files
        location ^~ /browser {
            proxy_pass https://127.0.0.1:9980;
            proxy_set_header Host $http_host;
        }
    
        # WOPI discovery URL
        location ^~ /hosting/discovery {
            proxy_pass https://127.0.0.1:9980;
            proxy_set_header Host $http_host;
        }
    
        # Capabilities
        location ^~ /hosting/capabilities {
            proxy_pass https://127.0.0.1:9980;
            proxy_set_header Host $http_host;
        }
    
        # main websocket
        location ~ ^/cool/(.*)/ws$ {
            proxy_pass https://127.0.0.1:9980;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "Upgrade";
            proxy_set_header Host $http_host;
            proxy_read_timeout 36000s;
        }
    
        # download, presentation and image upload
        location ~ ^/(c|l)ool {
            proxy_pass https://127.0.0.1:9980;
            proxy_set_header Host $http_host;
        }
    
        # Admin Console websocket
        location ^~ /cool/adminws {
            proxy_pass https://127.0.0.1:9980;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "Upgrade";
            proxy_set_header Host $http_host;
            proxy_read_timeout 36000s;
        }

    listen [::]:443 ssl; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/........../fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/........../privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}


# Virtual Host configuration for example.com
#
# You can move that to a different file under sites-available/ and symlink that
# to sites-enabled/ to enable it.
#
#server {
#	listen 80;
#	listen [::]:80;
#
#	server_name example.com;
#
#	root /var/www/example.com;
#	index index.html;
#
#	location / {
#		try_files $uri $uri/ =404;
#	}
#}

server {
    if ($host = collabora-online...........) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


	listen 80;
	listen [::]:80;

	server_name collabora-online...........;
    return 404; # managed by Certbot


}

Here is my docker-compose.yml:

version: '2.0'
services:
  db:
    image: mariadb
    container_name: seafile-mysql
    environment:
      - MYSQL_ROOT_PASSWORD=..........
      - MYSQL_LOG_CONSOLE=true
    volumes:
      - ./data/mariadb:/var/lib/mysql
    networks:
      - seafile-net

  memcached:
    image: memcached
    container_name: seafile-memcached
    entrypoint: memcached -m 256
    networks:
      - seafile-net
          
  seafile:
    image: seafileltd/seafile-mc
    container_name: seafile
    ports:
      - "8822:80"
    volumes:
      - ./data/app:/shared
    environment:
      - DB_HOST=db
      - DB_ROOT_PASSWD=..........
      - TIME_ZONE=..........
      - SEAFILE_ADMIN_EMAIL=..........
      - SEAFILE_ADMIN_PASSWORD=..........
      - SEAFILE_SERVER_LETSENCRYPT=false
      - SEAFILE_SERVER_HOSTNAME=..........
    depends_on:
      - db
      - memcached
    networks:
      - seafile-net

networks:
  seafile-net:

Here is my seafile.conf:

[fileserver]
max_download_dir_size = 81920
port = 8082

[database]
type = mysql
host = db
port = 3306
user = seafile
password = ..........
db_name = seafile_db
connection_charset = utf8

[notification]
enabled = true
# the ip of notification server
host = 127.0.0.1
# the port of notification server
port = 8083
# the log level of notification server
log_level = info
# jwt_private_key is used to generate jwt token and authenticate seafile server
jwt_private_key = ..........

Here is my seahub_settings.py:

# -*- coding: utf-8 -*-
SECRET_KEY = ..........
SERVICE_URL = "http://........../"

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'seahub_db',
        'USER': 'seafile',
        'PASSWORD': '..........',
        'HOST': 'db',
        'PORT': '3306',
        'OPTIONS': {'charset': 'utf8mb4'},
    }
}


CACHES = {
    'default': {
        'BACKEND': 'django_pylibmc.memcached.PyLibMCCache',
        'LOCATION': 'memcached:11211',
    },
    'locmem': {
        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
    },
}
COMPRESS_CACHE_BACKEND = 'locmem'
TIME_ZONE = '..........'
FILE_SERVER_ROOT = "http://........../seafhttp"

# OFFICE_CONVERTOR_ROOT = 'http://office-preview:8089'

# From 6.1.0 CE version on, Seafile support viewing/editing **doc**, **ppt**, **xls** files via LibreOffice
# Add this setting to view/edit **doc**, **ppt**, **xls** files
OFFICE_SERVER_TYPE = 'CollaboraOffice'

# Enable LibreOffice Online
ENABLE_OFFICE_WEB_APP = True

# Url of LibreOffice Online's discovery page
# The discovery page tells Seafile how to interact with LibreOffice Online when view file online
# You should change `https://collabora-online.seafile.com/hosting/discovery` to your actual LibreOffice Online server address
OFFICE_WEB_APP_BASE_URL = 'https://collabora-online.........../hosting/discovery'

# Expiration of WOPI access token
# WOPI access token is a string used by Seafile to determine the file's
# identity and permissions when use LibreOffice Online view it online
# And for security reason, this token should expire after a set time period
WOPI_ACCESS_TOKEN_EXPIRATION = 30 * 60   # seconds

# List of file formats that you want to view through LibreOffice Online
# You can change this value according to your preferences
# And of course you should make sure your LibreOffice Online supports to preview
# the files with the specified extensions
OFFICE_WEB_APP_FILE_EXTENSION = ('odp', 'ods', 'odt', 'xls', 'xlsb', 'xlsm', 'xlsx','ppsx', 'ppt', 'pptm', 'pptx', 'doc', 'docm', 'docx')

# Enable edit files through LibreOffice Online
ENABLE_OFFICE_WEB_APP_EDIT = True

# types of files should be editable through LibreOffice Online
OFFICE_WEB_APP_EDIT_FILE_EXTENSION = ('odp', 'ods', 'odt', 'xls', 'xlsb', 'xlsm', 'xlsx','ppsx', 'ppt', 'pptm', 'pptx', 'doc', 'docm', 'docx')

EMAIL_USE_SSL = True
EMAIL_HOST = '..........'        # smpt server
EMAIL_HOST_USER = '..........'    # username and domain
EMAIL_HOST_PASSWORD = '..........'    # password
EMAIL_PORT = 465
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
SERVER_EMAIL = EMAIL_HOST_USER

ADDITIONAL_APP_BOTTOM_LINKS = {
    '..........': 'https://..........',
    '..........': 'https://..........'
}

FILE_PREVIEW_MAX_SIZE = 30 * 1024 * 1024

Here is my ccnet.conf:

[General]

[Database]
ENGINE = mysql
HOST = db
PORT = 3306
USER = seafile
PASSWD = ..........
DB = ccnet_db
CONNECTION_CHARSET = utf8