From c01b38343dab66773ca4687130a46b4865636b9c Mon Sep 17 00:00:00 2001 From: BinkyTwin Date: Wed, 20 May 2026 22:16:56 +0200 Subject: [PATCH 1/3] feat: add ownCloud Infinite Scale template --- .../docker-compose.yml | 31 ++++++++++++++ .../owncloud-infinite-scale.svg | 11 +++++ .../owncloud-infinite-scale/template.toml | 41 +++++++++++++++++++ meta.json | 19 +++++++++ 4 files changed, 102 insertions(+) create mode 100644 blueprints/owncloud-infinite-scale/docker-compose.yml create mode 100644 blueprints/owncloud-infinite-scale/owncloud-infinite-scale.svg create mode 100644 blueprints/owncloud-infinite-scale/template.toml diff --git a/blueprints/owncloud-infinite-scale/docker-compose.yml b/blueprints/owncloud-infinite-scale/docker-compose.yml new file mode 100644 index 00000000..5dadf076 --- /dev/null +++ b/blueprints/owncloud-infinite-scale/docker-compose.yml @@ -0,0 +1,31 @@ +version: "3.8" + +services: + owncloud-infinite-scale: + image: owncloud/ocis:8.0.3 + restart: unless-stopped + entrypoint: + - /bin/sh + command: ["-c", "ocis init --insecure yes || true; ocis server"] + expose: + - "9200" + environment: + OCIS_URL: ${OCIS_URL} + OCIS_LOG_LEVEL: ${OCIS_LOG_LEVEL} + OCIS_INSECURE: "true" + PROXY_TLS: "false" + PROXY_HTTP_ADDR: 0.0.0.0:9200 + IDM_ADMIN_PASSWORD: ${IDM_ADMIN_PASSWORD} + SETTINGS_GRPC_ADDR: 0.0.0.0:9191 + GATEWAY_GRPC_ADDR: 0.0.0.0:9142 + STORAGE_USERS_DATA_GATEWAY_URL: http://owncloud-infinite-scale:9200/data + THUMBNAILS_FILESYSTEMSTORAGE_ROOT: /var/lib/ocis-thumbnails + volumes: + - owncloud-infinite-scale-config:/etc/ocis + - owncloud-infinite-scale-data:/var/lib/ocis + - owncloud-infinite-scale-thumbnails:/var/lib/ocis-thumbnails + +volumes: + owncloud-infinite-scale-config: + owncloud-infinite-scale-data: + owncloud-infinite-scale-thumbnails: diff --git a/blueprints/owncloud-infinite-scale/owncloud-infinite-scale.svg b/blueprints/owncloud-infinite-scale/owncloud-infinite-scale.svg new file mode 100644 index 00000000..8d4359d4 --- /dev/null +++ b/blueprints/owncloud-infinite-scale/owncloud-infinite-scale.svg @@ -0,0 +1,11 @@ + + + + + diff --git a/blueprints/owncloud-infinite-scale/template.toml b/blueprints/owncloud-infinite-scale/template.toml new file mode 100644 index 00000000..2297111c --- /dev/null +++ b/blueprints/owncloud-infinite-scale/template.toml @@ -0,0 +1,41 @@ +[variables] +main_domain = "${domain}" +owncloud_url = "https://${main_domain}" +admin_password = "${password:32}" +log_level = "info" + +[[config.domains]] +serviceName = "owncloud-infinite-scale" +port = 9200 +host = "${main_domain}" +path = "/" + +[[config.mounts]] +filePath = "README.md" +content = """# ownCloud Infinite Scale + +This template deploys ownCloud Infinite Scale (oCIS), a modern file sync and share platform with WebDAV and ownCloud client support. + +## Access + +- URL: `https://${main_domain}` +- Admin user: `admin` +- Admin password: the generated `admin_password` value + +The `owncloud_url` value is written into the initial oCIS configuration. Change it before the first deployment if your public URL is different, because `ocis init` does not rewrite an existing `ocis.yaml` file. + +## Storage + +The template creates persistent volumes for: + +- `/etc/ocis` configuration +- `/var/lib/ocis` application data and user storage +- `/var/lib/ocis-thumbnails` generated thumbnails + +Back up these volumes together before upgrades or migrations. +""" + +[config.env] +OCIS_URL = "${owncloud_url}" +IDM_ADMIN_PASSWORD = "${admin_password}" +OCIS_LOG_LEVEL = "${log_level}" diff --git a/meta.json b/meta.json index 8be7825d..c6a70d29 100644 --- a/meta.json +++ b/meta.json @@ -4835,6 +4835,25 @@ "rtmp" ] }, + { + "id": "owncloud-infinite-scale", + "name": "ownCloud Infinite Scale", + "version": "8.0.3", + "description": "ownCloud Infinite Scale is a modern file sync and share platform with WebDAV and ownCloud client support.", + "logo": "owncloud-infinite-scale.svg", + "links": { + "github": "https://github.com/owncloud/ocis", + "website": "https://owncloud.com/infinite-scale/", + "docs": "https://doc.owncloud.com/ocis/latest/" + }, + "tags": [ + "storage", + "files", + "sync", + "webdav", + "collaboration" + ] + }, { "id": "palmr", "name": "Palmr", From b846612d0eb037c781cea385e822c099a17e7771 Mon Sep 17 00:00:00 2001 From: BinkyTwin Date: Wed, 20 May 2026 22:30:05 +0200 Subject: [PATCH 2/3] fix: default ownCloud public URL to HTTP --- blueprints/owncloud-infinite-scale/template.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/blueprints/owncloud-infinite-scale/template.toml b/blueprints/owncloud-infinite-scale/template.toml index 2297111c..2096950c 100644 --- a/blueprints/owncloud-infinite-scale/template.toml +++ b/blueprints/owncloud-infinite-scale/template.toml @@ -1,6 +1,6 @@ [variables] main_domain = "${domain}" -owncloud_url = "https://${main_domain}" +owncloud_url = "http://${main_domain}" admin_password = "${password:32}" log_level = "info" @@ -18,11 +18,11 @@ This template deploys ownCloud Infinite Scale (oCIS), a modern file sync and sha ## Access -- URL: `https://${main_domain}` +- URL: `http://${main_domain}` - Admin user: `admin` - Admin password: the generated `admin_password` value -The `owncloud_url` value is written into the initial oCIS configuration. Change it before the first deployment if your public URL is different, because `ocis init` does not rewrite an existing `ocis.yaml` file. +The `owncloud_url` value is written into the initial oCIS configuration. Set it to `https://${main_domain}` before the first deployment if your Dokploy domain enforces TLS. Change it before the first deployment if your public URL is different, because `ocis init` does not rewrite an existing `ocis.yaml` file. ## Storage From 448d4ba76d6d0b86b8708a560bc8e0941a22941f Mon Sep 17 00:00:00 2001 From: Mauricio Siu Date: Wed, 8 Jul 2026 01:54:04 -0600 Subject: [PATCH 3/3] fix: oCIS crash-loop and https-only redirect behind Dokploy proxy The container was restart-looping because the built-in IdP fatals with "invalid iss value, URL must start with https://" when OCIS_URL uses plain http, which caused the sustained 502. - Set owncloud_url to https://${main_domain} so the IdP issuer is valid and ocis server stays up. - oCIS 8.x unconditionally answers 308 -> https:// whenever it receives X-Forwarded-Proto: http (services/proxy https_redirect middleware), so the domain check then died on a redirect loop into a non-existent 443 router. Add a small nginx gateway in front of oCIS that forwards requests with X-Forwarded-Proto: https (what a TLS-terminating proxy sends) and point the Dokploy domain at gateway:8080. - Update the README notes accordingly. Verified on a live Dokploy instance: deploy done, GET / returns HTTP 200 with title "ownCloud". Co-Authored-By: Claude Fable 5 --- .../docker-compose.yml | 10 +++++ .../owncloud-infinite-scale/template.toml | 39 ++++++++++++++++--- 2 files changed, 44 insertions(+), 5 deletions(-) diff --git a/blueprints/owncloud-infinite-scale/docker-compose.yml b/blueprints/owncloud-infinite-scale/docker-compose.yml index 5dadf076..30a1a4ee 100644 --- a/blueprints/owncloud-infinite-scale/docker-compose.yml +++ b/blueprints/owncloud-infinite-scale/docker-compose.yml @@ -1,6 +1,16 @@ version: "3.8" services: + gateway: + image: nginx:1.27-alpine + restart: unless-stopped + depends_on: + - owncloud-infinite-scale + expose: + - "8080" + volumes: + - ../files/etc/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf:ro + owncloud-infinite-scale: image: owncloud/ocis:8.0.3 restart: unless-stopped diff --git a/blueprints/owncloud-infinite-scale/template.toml b/blueprints/owncloud-infinite-scale/template.toml index 2096950c..12c77e37 100644 --- a/blueprints/owncloud-infinite-scale/template.toml +++ b/blueprints/owncloud-infinite-scale/template.toml @@ -1,15 +1,44 @@ [variables] main_domain = "${domain}" -owncloud_url = "http://${main_domain}" +owncloud_url = "https://${main_domain}" admin_password = "${password:32}" log_level = "info" [[config.domains]] -serviceName = "owncloud-infinite-scale" -port = 9200 +serviceName = "gateway" +port = 8080 host = "${main_domain}" path = "/" +[[config.mounts]] +filePath = "/etc/nginx/conf.d/default.conf" +content = """ +map $http_upgrade $connection_upgrade { + default upgrade; + "" close; +} + +server { + listen 8080; + client_max_body_size 0; + proxy_request_buffering off; + + location / { + proxy_pass http://owncloud-infinite-scale:9200; + proxy_http_version 1.1; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; + proxy_set_header X-Forwarded-Proto https; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; + proxy_read_timeout 3600s; + proxy_send_timeout 3600s; + } +} +""" + [[config.mounts]] filePath = "README.md" content = """# ownCloud Infinite Scale @@ -18,11 +47,11 @@ This template deploys ownCloud Infinite Scale (oCIS), a modern file sync and sha ## Access -- URL: `http://${main_domain}` +- URL: `https://${main_domain}` - Admin user: `admin` - Admin password: the generated `admin_password` value -The `owncloud_url` value is written into the initial oCIS configuration. Set it to `https://${main_domain}` before the first deployment if your Dokploy domain enforces TLS. Change it before the first deployment if your public URL is different, because `ocis init` does not rewrite an existing `ocis.yaml` file. +The `owncloud_url` value must use `https://` because oCIS only supports HTTPS public URLs (its built-in identity provider rejects plain HTTP issuers). A bundled nginx gateway sits in front of oCIS and forwards requests with `X-Forwarded-Proto: https`, which keeps oCIS from redirecting every request when it runs behind the Dokploy proxy. Enable HTTPS on the Dokploy domain so the public URL matches `OCIS_URL`. ## Storage