It is possible to use the nexcloud docker image via traefik-proxy and "PathPrefix"
It took me several hours to figure it out. But now it works.
The trick is to create a middleware and use the "replacepathregex" function
Nextcloud config.php
<?php
$CONFIG = array (
'htaccess.RewriteBase' => '/',
'memcache.local' => '\\OC\\Memcache\\APCu',
'apps_paths' =>
array (
0 =>
array (
'path' => '/var/www/html/apps',
'url' => '/apps',
'writable' => false,
),
1 =>
array (
'path' => '/var/www/html/custom_apps',
'url' => '/custom_apps',
'writable' => true,
),
),
'instanceid' => '24352345edgsdg',
'passwordsalt' => 'dfggdfg3456345235',
'secret' => '+owakmASIneeia1dc624vtCu/n7z3',
'trusted_domains' =>
array (
0 => 'IP Proxy:8081',
1 => 'test.dyndns.com',
),
'datadirectory' => '/var/www/html/data',
'dbtype' => 'mysql',
'version' => '27.1.1.0',
'dbname' => 'nextcloud',
'dbhost' => 'db',
'dbport' => '',
'dbtableprefix' => 'oc_',
'mysql.utf8mb4' => true,
'dbuser' => 'nextcloud',
'dbpassword' => 'Password',
'installed' => true,
'overwrite.cli.url' => '#todo https://test.dyndns.com/next',
'overwriteprotocol' => 'https',
'overwritewebroot' => '/next',
'overwritehost' => '#todo test.dyndns.com',
'trusted_proxies' =>
array (
0 => '#todo IP/24',
),
'loglevel' => 2,
'maintenance' => false,
);
Nextcloud: docker-compose.yaml
version: '2'
volumes:
nextcloud:
db:
services:
db:
image: mariadb:10.6
restart: unless-stopped
command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW
volumes:
- ./db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=Password01
- MYSQL_PASSWORD=Password01
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
networks:
- docker-proxy-network
app:
image: nextcloud:latest
restart: unless-stopped
# ports: #wird nur fuer die Erstinstallation benoetigt
# - 8081:80
links:
- db
volumes:
- ./nextcloud:/var/www/html
environment:
- MYSQL_PASSWORD=Password01
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_HOST=db
- TRUSTED_PROXIES=#todo IP Proxy/24
labels:
traefik.enable: true
traefik.http.routers.nextcloud.entrypoints: websecure
traefik.http.routers.nextcloud.rule: Host(`test.dyndns.com`) && (PathPrefix(`/next`))
traefik.http.routers.nextcloud.tls: true
traefik.http.routers.nextcloud.tls.certresolver: http_resolver
traefik.http.routers.nextcloud.middlewares: nextcloud-secure-headers, nextcloud_redirectregex, nextcloud_replace_path
traefik.docker.network: docker-proxy-network
#Middleware #1
traefik.http.middlewares.nextcloud_redirectregex.redirectregex.permanent: true
traefik.http.middlewares.nextcloud_redirectregex.redirectregex.regex: 'https://(.*)/.well-known/(?:card|cal)dav'
traefik.http.middlewares.nextcloud_redirectregex.redirectregex.replacement: 'https://$${1}/remote.php/dav'
#Middleware #2
traefik.http.middlewares.nextcloud_replace_path.replacepathregex.regex: "^/next/(.*)"
traefik.http.middlewares.nextcloud_replace_path.replacepathregex.replacement: "/$$1"
#Middleware #3
traefik.http.middlewares.nextcloud-secure-headers.headers.hostsProxyHeaders: "X-Forwarded-Host"
traefik.http.middlewares.nextcloud-secure-headers.headers.referrerPolicy: "same-origin"
traefik.http.middlewares.nextcloud-secure-headers.headers.customResponseHeaders.X-Robots-Tag: "none"
networks:
- docker-proxy-network
networks:
docker-proxy-network:
external: true