Nextcloud + collabora + traefik not work

A few days ago, I accidentally deleted the Nextcloud service, so my Nextcloud and Collabora settings were deleted, and now I’m getting an error.

nextcloud + collabora docker-compose

services:
  nextcloud:
    image: 'lscr.io/linuxserver/nextcloud:latest'
    environment:
      SERVICE_URL_NEXTCLOUD_80: 'https://drive.domain.com:80'
      PUID: '1000'
      PGID: '1000'
      TZ: '${TZ:-Europe/Istanbul}'
      POSTGRES_DB: '${POSTGRES_DB:-nextcloud}'
      POSTGRES_USER: '${SERVICE_USER_POSTGRES}'
      POSTGRES_PASSWORD: '${SERVICE_PASSWORD_POSTGRES}'
      POSTGRES_HOST: nextcloud-db
      REDIS_HOST: redis
      REDIS_PORT: '6379'
      COOLIFY_RESOURCE_UUID: dw80ws0c0k4gscs0ssgowsc8
      COOLIFY_CONTAINER_NAME: nextcloud-dw80ws0c0k4gscs0ssgowsc8
      COOLIFY_FQDN: drive.domain.com
      COOLIFY_URL: 'https://drive.domain.com'
      SERVICE_NAME_NEXTCLOUD: nextcloud
      SERVICE_NAME_NEXTCLOUD_DB: nextcloud-db
      SERVICE_NAME_REDIS: redis
      SERVICE_NAME_COLLABORA: collabora
    volumes:
      - 'dw80ws0c0k4gscs0ssgowsc8_nextcloud-config:/config'
      - 'dw80ws0c0k4gscs0ssgowsc8_nextcloud-data:/data'
    depends_on:
      nextcloud-db:
        condition: service_healthy
      redis:
        condition: service_healthy
    labels:
      - traefik.http.middlewares.secure-headers.headers.forceSTSHeader=true
      - traefik.http.middlewares.secure-headers.headers.STSSeconds=15552000
      - traefik.http.middlewares.secure-headers.headers.STSIncludeSubdomains=true
      - traefik.http.middlewares.secure-headers.headers.STSPreload=true
      - 'traefik.http.routers.https-0-dw80ws0c0k4gscs0ssgowsc8-nextcloud.middlewares=gzip,secure-headers@docker'
      - coolify.managed=true
      - coolify.version=4.0.0-beta.452
      - coolify.serviceId=45
      - coolify.type=service
      - coolify.name=nextcloud-dw80ws0c0k4gscs0ssgowsc8
      - coolify.resourceName=nextcloud-with-postgres-dw80ws0c0k4gscs0ssgowsc8
      - coolify.projectName=nextcloud
      - coolify.serviceName=nextcloud
      - coolify.environmentName=production
      - coolify.pullRequestId=0
      - coolify.service.subId=166
      - coolify.service.subType=application
      - coolify.service.subName=nextcloud
      - traefik.enable=true
      - traefik.http.middlewares.gzip.compress=true
      - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https
      - traefik.http.routers.http-0-dw80ws0c0k4gscs0ssgowsc8-nextcloud.entryPoints=http
      - traefik.http.routers.http-0-dw80ws0c0k4gscs0ssgowsc8-nextcloud.middlewares=redirect-to-https
      - 'traefik.http.routers.http-0-dw80ws0c0k4gscs0ssgowsc8-nextcloud.rule=Host(`drive.domain.com`) && PathPrefix(`/`)'
      - traefik.http.routers.http-0-dw80ws0c0k4gscs0ssgowsc8-nextcloud.service=http-0-dw80ws0c0k4gscs0ssgowsc8-nextcloud
      - traefik.http.routers.https-0-dw80ws0c0k4gscs0ssgowsc8-nextcloud.entryPoints=https
      - 'traefik.http.routers.https-0-dw80ws0c0k4gscs0ssgowsc8-nextcloud.middlewares=gzip,secure-headers'
      - 'traefik.http.routers.https-0-dw80ws0c0k4gscs0ssgowsc8-nextcloud.rule=Host(`drive.domain.com`) && PathPrefix(`/`)'
      - traefik.http.routers.https-0-dw80ws0c0k4gscs0ssgowsc8-nextcloud.service=https-0-dw80ws0c0k4gscs0ssgowsc8-nextcloud
      - traefik.http.routers.https-0-dw80ws0c0k4gscs0ssgowsc8-nextcloud.tls.certresolver=letsencrypt
      - traefik.http.routers.https-0-dw80ws0c0k4gscs0ssgowsc8-nextcloud.tls=true
      - traefik.http.services.http-0-dw80ws0c0k4gscs0ssgowsc8-nextcloud.loadbalancer.server.port=80
      - traefik.http.services.https-0-dw80ws0c0k4gscs0ssgowsc8-nextcloud.loadbalancer.server.port=80
      - 'caddy_0.encode=zstd gzip'
      - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 80}}'
      - 'caddy_0.handle_path=/*'
      - caddy_0.header=-Server
      - 'caddy_0.try_files={path} /index.html /index.php'
      - 'caddy_0=https://drive.domain.com'
      - caddy_ingress_network=dw80ws0c0k4gscs0ssgowsc8
    healthcheck:
      test:
        - CMD
        - curl
        - '-f'
        - 'http://127.0.0.1:80'
      interval: 2s
      timeout: 10s
      retries: 15
    container_name: nextcloud-dw80ws0c0k4gscs0ssgowsc8
    restart: unless-stopped
    networks:
      dw80ws0c0k4gscs0ssgowsc8: null
    env_file:
      - .env
  nextcloud-db:
    image: 'postgres:16-alpine'
    volumes:
      - 'dw80ws0c0k4gscs0ssgowsc8_nextcloud-postgresql-data:/var/lib/postgresql/data'
    environment:
      POSTGRES_USER: '${SERVICE_USER_POSTGRES}'
      POSTGRES_PASSWORD: '${SERVICE_PASSWORD_POSTGRES}'
      POSTGRES_DB: '${POSTGRES_DB:-nextcloud}'
      COOLIFY_RESOURCE_UUID: dw80ws0c0k4gscs0ssgowsc8
      COOLIFY_CONTAINER_NAME: nextcloud-db-dw80ws0c0k4gscs0ssgowsc8
      SERVICE_NAME_NEXTCLOUD: nextcloud
      SERVICE_NAME_NEXTCLOUD_DB: nextcloud-db
      SERVICE_NAME_REDIS: redis
      SERVICE_NAME_COLLABORA: collabora
    healthcheck:
      test:
        - CMD-SHELL
        - 'pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}'
      interval: 5s
      timeout: 20s
      retries: 10
    container_name: nextcloud-db-dw80ws0c0k4gscs0ssgowsc8
    restart: unless-stopped
    labels:
      - coolify.managed=true
      - coolify.version=4.0.0-beta.452
      - coolify.serviceId=45
      - coolify.type=service
      - coolify.name=nextcloud-db-dw80ws0c0k4gscs0ssgowsc8
      - coolify.resourceName=nextcloud-with-postgres-dw80ws0c0k4gscs0ssgowsc8
      - coolify.projectName=nextcloud
      - coolify.serviceName=nextcloud-db
      - coolify.environmentName=production
      - coolify.pullRequestId=0
      - coolify.service.subId=37
      - coolify.service.subType=database
      - coolify.service.subName=nextcloud-db
    networks:
      dw80ws0c0k4gscs0ssgowsc8: null
    env_file:
      - .env
  redis:
    image: 'redis:7.4-alpine'
    volumes:
      - 'dw80ws0c0k4gscs0ssgowsc8_nextcloud-redis-data:/data'
    healthcheck:
      test:
        - CMD
        - redis-cli
        - PING
      interval: 5s
      timeout: 10s
      retries: 20
    container_name: redis-dw80ws0c0k4gscs0ssgowsc8
    restart: unless-stopped
    labels:
      - coolify.managed=true
      - coolify.version=4.0.0-beta.452
      - coolify.serviceId=45
      - coolify.type=service
      - coolify.name=redis-dw80ws0c0k4gscs0ssgowsc8
      - coolify.resourceName=nextcloud-with-postgres-dw80ws0c0k4gscs0ssgowsc8
      - coolify.projectName=nextcloud
      - coolify.serviceName=redis
      - coolify.environmentName=production
      - coolify.pullRequestId=0
      - coolify.service.subId=38
      - coolify.service.subType=database
      - coolify.service.subName=redis
    networks:
      dw80ws0c0k4gscs0ssgowsc8: null
    environment:
      COOLIFY_RESOURCE_UUID: dw80ws0c0k4gscs0ssgowsc8
      COOLIFY_CONTAINER_NAME: redis-dw80ws0c0k4gscs0ssgowsc8
      SERVICE_NAME_NEXTCLOUD: nextcloud
      SERVICE_NAME_NEXTCLOUD_DB: nextcloud-db
      SERVICE_NAME_REDIS: redis
      SERVICE_NAME_COLLABORA: collabora
    env_file:
      - .env
  collabora:
    image: 'collabora/code:latest'
    container_name: collabora-dw80ws0c0k4gscs0ssgowsc8
    restart: always
    expose:
      - '9980'
    environment:
      SERVICE_URL_COLLABORA_9980: 'https://office.domain.com:9980'
      domain: drive.domain.com
      DONT_GEN_SSL_CERT: 'true'
      extra_params: '--o:ssl.enable=false --o:ssl.termination=true --o:welcome.enable=false'
      username: admin
      password: '12345678'
      aliasgroup1: 'https://drive.domain.com:443'
      server_name: office.domain.com
      COOLIFY_RESOURCE_UUID: dw80ws0c0k4gscs0ssgowsc8
      COOLIFY_CONTAINER_NAME: collabora-dw80ws0c0k4gscs0ssgowsc8
      COOLIFY_FQDN: office.domain.com
      COOLIFY_URL: 'https://office.domain.com'
      SERVICE_NAME_NEXTCLOUD: nextcloud
      SERVICE_NAME_NEXTCLOUD_DB: nextcloud-db
      SERVICE_NAME_REDIS: redis
      SERVICE_NAME_COLLABORA: collabora
    cap_add:
      - MKNOD
    volumes:
      - 'dw80ws0c0k4gscs0ssgowsc8_collabora-tmp:/tmp'
      - '/home/burak/loolwsd:/etc/loolwsd'
    labels:
      - traefik.http.routers.https-0-dw80ws0c0k4gscs0ssgowsc8-collabora.rule=Host(`office.domain.com`)
      - traefik.http.routers.https-0-dw80ws0c0k4gscs0ssgowsc8-collabora.entrypoints=https
      - traefik.http.routers.https-0-dw80ws0c0k4gscs0ssgowsc8-collabora.tls=true
      - traefik.http.services.https-0-dw80ws0c0k4gscs0ssgowsc8-collabora.loadbalancer.server.port=9980
      - coolify.managed=true
      - coolify.version=4.0.0-beta.452
      - coolify.serviceId=45
      - coolify.type=service
      - coolify.name=collabora-dw80ws0c0k4gscs0ssgowsc8
      - coolify.resourceName=nextcloud-with-postgres-dw80ws0c0k4gscs0ssgowsc8
      - coolify.projectName=nextcloud
      - coolify.serviceName=collabora
      - coolify.environmentName=production
      - coolify.pullRequestId=0
      - coolify.service.subId=170
      - coolify.service.subType=application
      - coolify.service.subName=collabora
      - traefik.enable=true
      - traefik.http.middlewares.gzip.compress=true
      - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https
      - traefik.http.routers.http-0-dw80ws0c0k4gscs0ssgowsc8-collabora.entryPoints=http
      - traefik.http.routers.http-0-dw80ws0c0k4gscs0ssgowsc8-collabora.middlewares=redirect-to-https
      - 'traefik.http.routers.http-0-dw80ws0c0k4gscs0ssgowsc8-collabora.rule=Host(`office.domain.com`) && PathPrefix(`/`)'
      - traefik.http.routers.http-0-dw80ws0c0k4gscs0ssgowsc8-collabora.service=http-0-dw80ws0c0k4gscs0ssgowsc8-collabora
      - traefik.http.routers.https-0-dw80ws0c0k4gscs0ssgowsc8-collabora.entryPoints=https
      - traefik.http.routers.https-0-dw80ws0c0k4gscs0ssgowsc8-collabora.middlewares=gzip
      - 'traefik.http.routers.https-0-dw80ws0c0k4gscs0ssgowsc8-collabora.rule=Host(`office.domain.com`) && PathPrefix(`/`)'
      - traefik.http.routers.https-0-dw80ws0c0k4gscs0ssgowsc8-collabora.service=https-0-dw80ws0c0k4gscs0ssgowsc8-collabora
      - traefik.http.routers.https-0-dw80ws0c0k4gscs0ssgowsc8-collabora.tls.certresolver=letsencrypt
      - traefik.http.routers.https-0-dw80ws0c0k4gscs0ssgowsc8-collabora.tls=true
      - traefik.http.services.http-0-dw80ws0c0k4gscs0ssgowsc8-collabora.loadbalancer.server.port=9980
      - traefik.http.services.https-0-dw80ws0c0k4gscs0ssgowsc8-collabora.loadbalancer.server.port=9980
      - 'caddy_0.encode=zstd gzip'
      - 'caddy_0.handle_path.0_reverse_proxy={{upstreams 9980}}'
      - 'caddy_0.handle_path=/*'
      - caddy_0.header=-Server
      - 'caddy_0.try_files={path} /index.html /index.php'
      - 'caddy_0=https://office.domain.com'
      - caddy_ingress_network=dw80ws0c0k4gscs0ssgowsc8
    networks:
      dw80ws0c0k4gscs0ssgowsc8: null
    env_file:
      - .env
volumes:
  dw80ws0c0k4gscs0ssgowsc8_nextcloud-config:
    name: dw80ws0c0k4gscs0ssgowsc8_nextcloud-config
  dw80ws0c0k4gscs0ssgowsc8_nextcloud-data:
    name: dw80ws0c0k4gscs0ssgowsc8_nextcloud-data
  dw80ws0c0k4gscs0ssgowsc8_nextcloud-postgresql-data:
    name: dw80ws0c0k4gscs0ssgowsc8_nextcloud-postgresql-data
  dw80ws0c0k4gscs0ssgowsc8_nextcloud-redis-data:
    name: dw80ws0c0k4gscs0ssgowsc8_nextcloud-redis-data
  dw80ws0c0k4gscs0ssgowsc8_collabora-tmp:
    name: dw80ws0c0k4gscs0ssgowsc8_collabora-tmp
networks:
  dw80ws0c0k4gscs0ssgowsc8:
    name: dw80ws0c0k4gscs0ssgowsc8
    external: true

coolify-proxy (traefik) yaml

name: coolify-proxy
networks:
  coolify:
    external: true
services:
  traefik:
    container_name: coolify-proxy
    image: 'traefik:v3.6'
    restart: unless-stopped
    extra_hosts:
      - 'host.docker.internal:host-gateway'
    networks:
      - coolify
    ports:
      # - '80:80'
      - '443:443'
      - '443:443/udp'
      - '8080:8080'
    healthcheck:
      test: 'wget -qO- http://localhost:80/ping || exit 1'
      interval: 4s
      timeout: 2s
      retries: 5
    volumes:
      - '/var/run/docker.sock:/var/run/docker.sock:ro'
      - '/data/coolify/proxy/:/traefik'
    environment:
      - CF_API_EMAIL=kes.ici0619@gmail.com
      - CF_API_KEY=token
    command:
      - '--ping=true'
      - '--ping.entrypoint=http'
      - '--api.dashboard=true'
      - '--entrypoints.http.address=:80'
      - '--entrypoints.https.address=:443'
      - '--entrypoints.http.http.encodequerysemicolons=true'
      - '--entryPoints.http.http2.maxConcurrentStreams=250'
      - '--entrypoints.https.http.encodequerysemicolons=true'
      - '--entryPoints.https.http2.maxConcurrentStreams=250'
      - '--entrypoints.https.http3'
      - '--providers.file.directory=/traefik/dynamic/'
      - '--providers.file.watch=true'
      - '--certificatesresolvers.letsencrypt.acme.dnschallenge=true'
      - '--certificatesresolvers.letsencrypt.acme.dnschallenge.provider=cloudflare'
      - '--certificatesresolvers.letsencrypt.acme.email=kes.ici0619@gmail.com'
      - '--certificatesresolvers.letsencrypt.acme.storage=/traefik/acme.json'
      - '--api.insecure=false'
      - '--providers.docker=true'
      - '--providers.docker.exposedbydefault=false'
      - '--entrypoints.https.transport.respondingtimeouts.readtimeout=0'   # 30 dakika
      - '--entrypoints.https.transport.respondingtimeouts.idletimeout=0'   # 30 dakika
      - '--entrypoints.https.transport.respondingtimeouts.writetimeout=0'  # 30 dakika
      - '--entrypoints.http.transport.respondingtimeouts.readtimeout=0'   # 30 dakika
      - '--entrypoints.http.transport.respondingtimeouts.idletimeout=0'   # 30 dakika
      - '--entrypoints.http.transport.respondingtimeouts.writetimeout=0'  # 30 dakika
    labels:
      - traefik.enable=true
      - traefik.http.routers.traefik.entrypoints=http
      - traefik.http.routers.traefik.service=api@internal
      - traefik.http.services.traefik.loadbalancer.server.port=8080
      - coolify.managed=true
      - coolify.proxy=truename: coolify-proxy
networks:
  coolify:
    external: true
services:
  traefik:
    container_name: coolify-proxy
    image: 'traefik:v3.6'
    restart: unless-stopped
    extra_hosts:
      - 'host.docker.internal:host-gateway'
    networks:
      - coolify
    ports:
      # - '80:80'
      - '443:443'
      - '443:443/udp'
      - '8080:8080'
    healthcheck:
      test: 'wget -qO- http://localhost:80/ping || exit 1'
      interval: 4s
      timeout: 2s
      retries: 5
    volumes:
      - '/var/run/docker.sock:/var/run/docker.sock:ro'
      - '/data/coolify/proxy/:/traefik'
    environment:
      - CF_API_EMAIL=kes.ici0619@gmail.com
      - CF_API_KEY=bc198c808cb121cc1f3fd4cf3f0fbe25eca91
    command:
      - '--ping=true'
      - '--ping.entrypoint=http'
      - '--api.dashboard=true'
      - '--entrypoints.http.address=:80'
      - '--entrypoints.https.address=:443'
      - '--entrypoints.http.http.encodequerysemicolons=true'
      - '--entryPoints.http.http2.maxConcurrentStreams=250'
      - '--entrypoints.https.http.encodequerysemicolons=true'
      - '--entryPoints.https.http2.maxConcurrentStreams=250'
      - '--entrypoints.https.http3'
      - '--providers.file.directory=/traefik/dynamic/'
      - '--providers.file.watch=true'
      - '--certificatesresolvers.letsencrypt.acme.dnschallenge=true'
      - '--certificatesresolvers.letsencrypt.acme.dnschallenge.provider=cloudflare'
      - '--certificatesresolvers.letsencrypt.acme.email=kes.ici0619@gmail.com'
      - '--certificatesresolvers.letsencrypt.acme.storage=/traefik/acme.json'
      - '--api.insecure=false'
      - '--providers.docker=true'
      - '--providers.docker.exposedbydefault=false'
      - '--entrypoints.https.transport.respondingtimeouts.readtimeout=0'   # 30 dakika
      - '--entrypoints.https.transport.respondingtimeouts.idletimeout=0'   # 30 dakika
      - '--entrypoints.https.transport.respondingtimeouts.writetimeout=0'  # 30 dakika
      - '--entrypoints.http.transport.respondingtimeouts.readtimeout=0'   # 30 dakika
      - '--entrypoints.http.transport.respondingtimeouts.idletimeout=0'   # 30 dakika
      - '--entrypoints.http.transport.respondingtimeouts.writetimeout=0'  # 30 dakika
    labels:
      - traefik.enable=true
      - traefik.http.routers.traefik.entrypoints=http
      - traefik.http.routers.traefik.service=api@internal
      - traefik.http.services.traefik.loadbalancer.server.port=8080
      - coolify.managed=true
      - coolify.proxy=true

Hi @burak-ayd, welcome to the Collabora Online forum.

I remember a very similar question in the past for the same setup you’re using. Could you please check the solution shared here?
https://forum.collaboraonline.com/t/collabora-with-nextcloud-and-traefik-on-docker/3720/5

It should definitely help resolve your issue.

Thanks,
Darshan

I’ve exacly the same problem! But I didn’t change anything and I still connect.

I’ve Collabora + nextcloud (linuxserver docker) + traefik

I looked into the issue and fixed the differences, but I’m still having the same problem. Deleting and reinstalling only Nextcloud and Collabora without changing anything on the Traefik side caused this problem.

I found the solution here.

Is about the the following issue that appears in the traefik logs:
Rejecting request because it contains encoded character %2F in the URL path:

Thanks, I solved the problem thanks to you. But I don’t understand how it broke without changing the traffic settings or version.

Because what changed was the traefik itself:

Traefik introduced a more restrictive way of handling encoded characters in paths.
Link: https://doc.traefik.io/traefik/migrate/v3/#v364

I must assume that you have the docher with tag :latest

@GabrielRR You rock :purple_heart:

Thank you so much guys for the solution.