Compare commits

..

4 Commits

Author SHA1 Message Date
Anja Barz
f74c434267 Merge pull request #316 from opencloud-eu/backport/313
Backport/313
2026-06-24 10:26:48 +02:00
Anja Barz
e2c680ea6b change the scopes for the clients 2026-06-24 10:23:27 +02:00
Anja Barz
b0fdcec0a3 add the default ids and scopes for the clients 2026-06-24 10:23:27 +02:00
Viktor Scharf
a0f9ffbc6f Merge pull request #315 from opencloud-eu/sync-main-to-stable
Sync main to stable
2026-06-23 13:04:46 +02:00
23 changed files with 64 additions and 189 deletions

View File

@@ -25,9 +25,9 @@ INSECURE=true
# External IDP # External IDP
#COMPOSE_FILE=docker-compose.yml:weboffice/collabora.yml:traefik/opencloud.yml:traefik/collabora.yml:idm/external-idp.yml #COMPOSE_FILE=docker-compose.yml:weboffice/collabora.yml:traefik/opencloud.yml:traefik/collabora.yml:idm/external-idp.yml
# Euro Office with traefik and letsencrypt # Euro Office with traefik and letsencrypt
#COMPOSE_FILE=docker-compose.yml:weboffice/euro-office.yml:traefik/opencloud.yml:traefik/euro-office.yml #COMPOSE_FILE=docker-compose.yml:weboffice/euroffice.yml:traefik/opencloud.yml:traefik/euroffice.yml
# Euro Office with external proxy (Nginx, Caddy, etc.) # Euro Office with external proxy (Nginx, Caddy, etc.)
#COMPOSE_FILE=docker-compose.yml:weboffice/euro-office.yml:external-proxy/opencloud.yml:external-proxy/euro-office.yml #COMPOSE_FILE=docker-compose.yml:weboffice/euroffice.yml:external-proxy/opencloud.yml:external-proxy/euroffice.yml
## Traefik Settings ## ## Traefik Settings ##
# Note: Traefik is always enabled and can't be disabled. # Note: Traefik is always enabled and can't be disabled.

View File

@@ -147,12 +147,12 @@ Include Euro Office for document editing using either method:
Using `-f` flags: Using `-f` flags:
```bash ```bash
docker compose -f docker-compose.yml -f weboffice/euro-office.yml -f traefik/opencloud.yml -f traefik/euro-office.yml up -d docker compose -f docker-compose.yml -f weboffice/euroffice.yml -f traefik/opencloud.yml -f traefik/euroffice.yml up -d
``` ```
Or by setting in `.env`: Or by setting in `.env`:
``` ```
COMPOSE_FILE=docker-compose.yml:weboffice/euro-office.yml:traefik/opencloud.yml:traefik/euro-office.yml COMPOSE_FILE=docker-compose.yml:weboffice/euroffice.yml:traefik/opencloud.yml:traefik/euroffice.yml
``` ```
> **For local development only**: Add to `/etc/hosts`: > **For local development only**: Add to `/etc/hosts`:
@@ -271,12 +271,12 @@ The WOPI server runs inside the OpenCloud process and is served on the OpenCloud
To use Euro Office instead of Collabora behind an external proxy, swap the web office compose files: To use Euro Office instead of Collabora behind an external proxy, swap the web office compose files:
```bash ```bash
docker compose -f docker-compose.yml -f weboffice/euro-office.yml -f external-proxy/opencloud.yml -f external-proxy/euro-office.yml up -d docker compose -f docker-compose.yml -f weboffice/euroffice.yml -f external-proxy/opencloud.yml -f external-proxy/euroffice.yml up -d
``` ```
Or by setting in `.env`: Or by setting in `.env`:
``` ```
COMPOSE_FILE=docker-compose.yml:weboffice/euro-office.yml:external-proxy/opencloud.yml:external-proxy/euro-office.yml COMPOSE_FILE=docker-compose.yml:weboffice/euroffice.yml:external-proxy/opencloud.yml:external-proxy/euroffice.yml
``` ```
This exposes the necessary ports: This exposes the necessary ports:
@@ -286,7 +286,7 @@ This exposes the necessary ports:
As with Collabora, the WOPI server is served on the OpenCloud port (9200) under the `/wopi` and `/collaboration` paths and needs no separate port. As with Collabora, the WOPI server is served on the OpenCloud port (9200) under the `/wopi` and `/collaboration` paths and needs no separate port.
> [!WARNING] > [!WARNING]
> `external-proxy/euro-office.yml` binds the exposed ports to `127.0.0.1` only. If your external proxy runs on a different host, use `external-proxy/euro-office-exposed.yml`, which binds to all interfaces (`0.0.0.0`). Only expose these ports when you know what you are doing. > `external-proxy/euroffice.yml` binds the exposed ports to `127.0.0.1` only. If your external proxy runs on a different host, use `external-proxy/euroffice-exposed.yml`, which binds to all interfaces (`0.0.0.0`). Only expose these ports when you know what you are doing.
**Please note:** **Please note:**
If you're using **Nginx Proxy Manager (NPM)**, you **should NOT** activate **"Block Common Exploits"** for the Proxy Host. If you're using **Nginx Proxy Manager (NPM)**, you **should NOT** activate **"Block Common Exploits"** for the Proxy Host.
@@ -319,12 +319,12 @@ OpenCloud Compose supports adding SSL certificates for public domains and develo
### Use Let's Encrypt with ACME Challenge ### Use Let's Encrypt with ACME Challenge
1. **Enable Let's Encrypt**: 1. **Enable Let's Encrypt**:
- Set `TRAEFIK_ACME_MAIL` to your email address for the ACME challenge - Set `TRAEFIK_LETSENCRYPT_EMAIL` to your email address for the ACME challenge
- Set `TRAEFIK_SERVICES_TLS_CONFIG="tls.certresolver=letsencrypt"` to use Let's Encrypt (default value) - Set `TRAEFIK_SERVICES_TLS_CONFIG="tls.certresolver=letsencrypt"` to use Let's Encrypt (default value)
```bash ```bash
# In your .env file # In your .env file
TRAEFIK_ACME_MAIL=devops@your-domain.tld TRAEFIK_LETSENCRYPT_EMAIL=devops@your-domain.tld
TRAEFIK_SERVICES_TLS_CONFIG="tls.certresolver=letsencrypt" TRAEFIK_SERVICES_TLS_CONFIG="tls.certresolver=letsencrypt"
``` ```
@@ -412,7 +412,7 @@ Key variables:
| `LDAP_BIND_PASSWORD` | LDAP password for the bind user | admin | | `LDAP_BIND_PASSWORD` | LDAP password for the bind user | admin |
| `KC_DB_USERNAME` | Database user for keycloak | keycloak | | `KC_DB_USERNAME` | Database user for keycloak | keycloak |
| `KC_DB_PASSWORD` | Database password for keycloak | keycloak | | `KC_DB_PASSWORD` | Database password for keycloak | keycloak |
| `TRAEFIK_ACME_MAIL` | Email Address for the Let's Encrypt ACME challenge | example@example.org | | `TRAEFIK_LETSENCRYPT_EMAIL` | Email Address for the Let's Encrypt ACME challenge | example@example.org |
| `TRAEFIK_SERVICES_TLS_CONFIG` | Tell traefik and the services which TLS config to use | tls.certresolver=letsencrypt | | `TRAEFIK_SERVICES_TLS_CONFIG` | Tell traefik and the services which TLS config to use | tls.certresolver=letsencrypt |
| `TRAEFIK_CERTS_DIR` | Directory for custom certificates. | ./certs | | `TRAEFIK_CERTS_DIR` | Directory for custom certificates. | ./certs |

View File

@@ -1,51 +1,38 @@
:root { :root {
--pf-v5-global--primary-color--100: #e2baff; --pf-global--primary-color--100: #e2baff;
--pf-v5-global--primary-color--200: #e2baff; --pf-global--primary-color--200: #e2baff;
--pf-v5-global--primary-color--dark-100: #e2baff; --pf-global--primary-color--dark-100: #e2baff;
--pf-v5-c-button--m-secondary--Color: #e2baff; --pf-global--Color--light-100: #20434f;
--pf-v5-global--Color--light-100: #20434f;
--pf-v5-global--FontFamily--text: "Inter", "RedHatText", helvetica, arial, sans-serif;
--pf-v5-global--FontFamily--heading: "Inter", "RedHatDisplay", helvetica, arial, sans-serif;
} }
@font-face { @font-face {
font-family: Inter; font-family: OpenCloud;
src: url('../fonts/Inter-Variable.woff2') format('woff2'); src: url('../fonts/OpenCloud500-Regular.woff2') format('woff2');
font-weight: 100 900; font-weight: normal;
font-style: normal;
}
@font-face {
font-family: OpenCloud;
src: url('../fonts/OpenCloud750-Bold.woff2') format('woff2');
font-weight: bold;
font-style: normal; font-style: normal;
} }
body { body {
background: url(../img/background.png) no-repeat center fixed !important; font-family: "OpenCloud", "Open Sans", Helvetica, Arial, sans-serif;
background: url(../img/background.png) no-repeat center !important;
background-size: cover !important; background-size: cover !important;
} }
.kc-logo-text { .kc-logo-text {
display: block; background-image: url(../img/logo.svg) !important;
width: 300px;
height: 63px;
background: url('../img/logo.svg') no-repeat center;
background-size: contain; background-size: contain;
width: 400px;
margin: 0 !important;
} }
.kc-logo-text span { #kc-header-wrapper{
display: none;
}
#kc-header-wrapper {
display: flex; display: flex;
justify-content: center; justify-content: center;
} }
.pf-v5-c-login__main-header {
border-top: 4px solid var(--pf-v5-global--primary-color--100);
}
@media (min-width: 1200px) {
.pf-v5-c-login__container {
grid-template-columns: 34rem;
grid-template-areas:
"header"
"main";
}
}

View File

@@ -16,4 +16,4 @@ document.addEventListener("DOMContentLoaded", function () {
} }
setLogoUrl('https://opencloud.eu') setLogoUrl('https://opencloud.eu')
}); });

View File

@@ -1,5 +1,5 @@
parent=keycloak.v2 parent=keycloak
import=common/keycloak import=common/keycloak
styles=css/login.css css/theme.css styles=css/login.css css/theme.css
scripts=js/script.js scripts=js/script.js

View File

@@ -1,3 +0,0 @@
maps:
config:
folderViewEnabled: false

View File

@@ -25,7 +25,6 @@ directives:
- 'https://${EURO_OFFICE_DOMAIN|euro-office.opencloud.test}${TRAEFIK_PORT_HTTPS}/' - 'https://${EURO_OFFICE_DOMAIN|euro-office.opencloud.test}${TRAEFIK_PORT_HTTPS}/'
# This is needed for the external-sites web extension when embedding sites # This is needed for the external-sites web extension when embedding sites
- 'https://docs.opencloud.eu' - 'https://docs.opencloud.eu'
- 'https://${IDP_DOMAIN|keycloak.opencloud.test}${TRAEFIK_PORT_HTTPS}/'
img-src: img-src:
- '''self''' - '''self'''
- 'data:' - 'data:'

View File

@@ -2,7 +2,7 @@
services: services:
opencloud: opencloud:
# renovate: depName=opencloudeu/opencloud-rolling # renovate: depName=opencloudeu/opencloud-rolling
image: ${OC_DOCKER_IMAGE:-opencloudeu/opencloud-rolling}:${OC_DOCKER_TAG:-7.4.0} image: ${OC_DOCKER_IMAGE:-opencloudeu/opencloud-rolling}:${OC_DOCKER_TAG:-6.2.0}
# changelog: https://github.com/opencloud-eu/opencloud/tree/main/changelog # changelog: https://github.com/opencloud-eu/opencloud/tree/main/changelog
# release notes: https://docs.opencloud.eu/opencloud_release_notes.html # release notes: https://docs.opencloud.eu/opencloud_release_notes.html
user: ${OC_CONTAINER_UID_GID:-1000:1000} user: ${OC_CONTAINER_UID_GID:-1000:1000}
@@ -58,7 +58,6 @@ services:
OC_DEFAULT_LANGUAGE: ${DEFAULT_LANGUAGE} OC_DEFAULT_LANGUAGE: ${DEFAULT_LANGUAGE}
volumes: volumes:
- ./config/opencloud/csp.yaml:/etc/opencloud/csp.yaml - ./config/opencloud/csp.yaml:/etc/opencloud/csp.yaml
- ./config/opencloud/apps.yaml:/etc/opencloud/apps.yaml
- ./config/opencloud/banned-password-list.txt:/etc/opencloud/banned-password-list.txt - ./config/opencloud/banned-password-list.txt:/etc/opencloud/banned-password-list.txt
# configure the .env file to use own paths instead of docker internal volumes # configure the .env file to use own paths instead of docker internal volumes
- ${OC_CONFIG_DIR:-opencloud-config}:/etc/opencloud - ${OC_CONFIG_DIR:-opencloud-config}:/etc/opencloud

View File

@@ -1,9 +1,9 @@
--- ---
services: services:
opencloud: opencloud:
environment: environment:
# bind to all interfaces # bind to all interfaces
PROXY_HTTP_ADDR: "0.0.0.0:9200" PROXY_HTTP_ADDR: "0.0.0.0:9200"
ports: ports:
# expose the opencloud server on localhost # expose the opencloud server on localhost
- "127.0.0.1:9200:9200" - "127.0.0.1:9200:9200"

View File

@@ -78,7 +78,7 @@ services:
restart: always restart: always
keycloak: keycloak:
image: quay.io/keycloak/keycloak:26.7.1 image: quay.io/keycloak/keycloak:26.6.3
networks: networks:
opencloud-net: opencloud-net:
command: [ "start", "--spi-connections-http-client-default-disable-trust-manager=${INSECURE:-false}", "--import-realm" ] command: [ "start", "--spi-connections-http-client-default-disable-trust-manager=${INSECURE:-false}", "--import-realm" ]

View File

@@ -2,7 +2,7 @@
"$schema": "https://docs.renovatebot.com/renovate-schema.json", "$schema": "https://docs.renovatebot.com/renovate-schema.json",
"platformAutomerge": true, "platformAutomerge": true,
"enabledManagers": ["docker-compose", "custom.regex"], "enabledManagers": ["docker-compose", "custom.regex"],
"baseBranchPatterns": ["main", "stable-4.0", "stable-7.2"], "baseBranchPatterns": ["main", "stable-4.0"],
"packageRules": [ "packageRules": [
{ {
"matchManagers": ["docker-compose", "custom.regex"], "matchManagers": ["docker-compose", "custom.regex"],
@@ -14,7 +14,7 @@
"automerge": true "automerge": true
}, },
{ {
"matchBaseBranches": ["stable-4.0", "stable-7.2"], "matchBaseBranches": ["stable-4.0"],
"matchUpdateTypes": ["major", "minor"], "matchUpdateTypes": ["major", "minor"],
"enabled": false "enabled": false
}, },

View File

@@ -1,59 +0,0 @@
---
services:
opencloud:
environment:
# Point the search service at OpenSearch instead of the embedded bleve index.
SEARCH_ENGINE_TYPE: open-search
SEARCH_ENGINE_OPEN_SEARCH_CLIENT_ADDRESSES: http://opensearch:9200
SEARCH_ENGINE_OPEN_SEARCH_CLIENT_INSECURE: "true"
SEARCH_ENGINE_OPEN_SEARCH_RESOURCE_INDEX_NAME: ${OPENSEARCH_RESOURCE_INDEX:-opencloud-resources}
depends_on:
opensearch:
condition: service_healthy
opensearch:
image: ${OPENSEARCH_DOCKER_IMAGE:-opensearchproject/opensearch}:${OPENSEARCH_DOCKER_TAG:-2.19.5}
environment:
discovery.type: single-node
bootstrap.memory_lock: "true"
OPENSEARCH_JAVA_OPTS: ${OPENSEARCH_JAVA_OPTS:--Xms512m -Xmx512m}
# Security plugin is disabled: OpenSearch is only reachable on the
# internal opencloud-net bridge and no port is published to the host.
# Do NOT enable a published port or expose this via the reverse proxy
# without first enabling and configuring the security plugin.
DISABLE_SECURITY_PLUGIN: "true"
DISABLE_INSTALL_DEMO_CONFIG: "true"
# Disable the disk-based shard allocation watermarks. By default OpenSearch
# marks indices read-only when the host disk is <5% free, which silently
# turns bulk upserts into no-ops. Fine to disable on a single-node dev box.
cluster.routing.allocation.disk.threshold_enabled: "false"
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 65536
hard: 65536
networks:
opencloud-net:
volumes:
- ${OPENSEARCH_DATA_DIR:-opensearch-data}:/usr/share/opensearch/data
healthcheck:
# Single-node clusters can't go green (replicas have nowhere to land), so
# yellow is the healthy state. Still gates opencloud until opensearch accepts
# requests.
test:
[
"CMD-SHELL",
"curl -sf 'http://localhost:9200/_cluster/health?wait_for_status=yellow&timeout=5s' > /dev/null || exit 1"
]
interval: 5s
timeout: 10s
retries: 24
start_period: 60s
logging:
driver: ${LOG_DRIVER:-local}
restart: always
volumes:
opensearch-data:

View File

@@ -11,18 +11,6 @@ services:
restart: always restart: always
logging: logging:
driver: ${LOG_DRIVER:-local} driver: ${LOG_DRIVER:-local}
healthcheck:
test:
[
"CMD",
"bash",
"-c",
"exec 3<>/dev/tcp/127.0.0.1/9998 && printf 'GET /tika HTTP/1.1\r\nHost: localhost\r\nConnection: close\r\n\r\n' >&3 && grep '200 OK' <&3",
]
interval: 5s
timeout: 5s
retries: 10
start_period: 5s
opencloud: opencloud:
environment: environment:
@@ -30,6 +18,3 @@ services:
SEARCH_EXTRACTOR_TYPE: tika SEARCH_EXTRACTOR_TYPE: tika
SEARCH_EXTRACTOR_TIKA_TIKA_URL: http://tika:9998 SEARCH_EXTRACTOR_TIKA_TIKA_URL: http://tika:9998
FRONTEND_FULL_TEXT_SEARCH_ENABLED: "true" FRONTEND_FULL_TEXT_SEARCH_ENABLED: "true"
depends_on:
tika:
condition: service_healthy

View File

@@ -15,7 +15,7 @@ services:
restart: always restart: always
keycloak: keycloak:
image: quay.io/keycloak/keycloak:26.7.1 image: quay.io/keycloak/keycloak:26.6.3
networks: networks:
opencloud-net: opencloud-net:
command: [ "start", "--spi-connections-http-client-default-disable-trust-manager=${INSECURE:-false}", "--import-realm" ] command: [ "start", "--spi-connections-http-client-default-disable-trust-manager=${INSECURE:-false}", "--import-realm" ]

View File

@@ -16,7 +16,7 @@ services:
- "traefik.http.services.opencloud.loadbalancer.server.port=9200" - "traefik.http.services.opencloud.loadbalancer.server.port=9200"
- "traefik.http.routers.opencloud.${TRAEFIK_SERVICES_TLS_CONFIG}" - "traefik.http.routers.opencloud.${TRAEFIK_SERVICES_TLS_CONFIG}"
traefik: traefik:
image: traefik:v3.7.10 image: traefik:v3.6.14
# release notes: https://github.com/traefik/traefik/releases # release notes: https://github.com/traefik/traefik/releases
user: ${TRAEFIK_CONTAINER_UID_GID:-0:0} user: ${TRAEFIK_CONTAINER_UID_GID:-0:0}
networks: networks:

View File

@@ -23,50 +23,22 @@ services:
COLLABORATION_APP_INSECURE: "${INSECURE:-true}" COLLABORATION_APP_INSECURE: "${INSECURE:-true}"
COLLABORATION_CS3API_DATAGATEWAY_INSECURE: "${INSECURE:-true}" COLLABORATION_CS3API_DATAGATEWAY_INSECURE: "${INSECURE:-true}"
# One-shot service that generates the WOPI proof key on first start and
# keeps it in a named volume, like the proofKeyGeneration feature of the
# collabora-online helm chart.
# To rotate the key, remove the volume and start again:
# docker compose down collabora && docker volume rm <project>_collabora-proof-key
collabora-proof-key:
image: alpine/openssl:3.5.7
entrypoint: ["/bin/sh"]
command:
- -ec
- |
if [ ! -s /proof/proof_key ]; then
openssl genrsa -traditional -out /proof/proof_key.tmp 4096
chown 1001:1001 /proof/proof_key.tmp
chmod 400 /proof/proof_key.tmp
mv /proof/proof_key.tmp /proof/proof_key
echo "WOPI proof key generated"
else
echo "WOPI proof key already exists"
fi
volumes:
- collabora-proof-key:/proof
logging:
driver: ${LOG_DRIVER:-local}
restart: "no"
collabora: collabora:
image: collabora/code:26.04.2.4.1 image: collabora/code:26.04.1.4.1
# release notes: https://www.collaboraonline.com/release-notes/ # release notes: https://www.collaboraonline.com/release-notes/
networks: networks:
opencloud-net: opencloud-net:
depends_on:
collabora-proof-key:
condition: service_completed_successfully
environment: environment:
# WOPI host allowlist; the WOPI endpoint is served by the opencloud proxy on the opencloud domain # WOPI host allowlist; the WOPI endpoint is served by the opencloud proxy on the opencloud domain
aliasgroup1: https://${OC_DOMAIN:-cloud.opencloud.test}${TRAEFIK_PORT_HTTPS:+:}${TRAEFIK_PORT_HTTPS:-} aliasgroup1: https://${OC_DOMAIN:-cloud.opencloud.test}${TRAEFIK_PORT_HTTPS:+:}${TRAEFIK_PORT_HTTPS:-}
extra_params: > DONT_GEN_SSL_CERT: "YES"
--o:ssl.enable=${COLLABORA_SSL_ENABLE:-true} extra_params: |
--o:ssl.ssl_verification=${COLLABORA_SSL_VERIFICATION:-true} --o:ssl.enable=${COLLABORA_SSL_ENABLE:-true} \
--o:ssl.termination=true --o:ssl.ssl_verification=${COLLABORA_SSL_VERIFICATION:-true} \
--o:welcome.enable=false --o:ssl.termination=true \
--o:net.frame_ancestors=${OC_DOMAIN:-cloud.opencloud.test}${TRAEFIK_PORT_HTTPS:+:}${TRAEFIK_PORT_HTTPS:-} --o:welcome.enable=false \
--o:net.lok_allow.host[14]=${OC_DOMAIN:-cloud.opencloud.test}${TRAEFIK_PORT_HTTPS:+:}${TRAEFIK_PORT_HTTPS:-} --o:net.frame_ancestors=${OC_DOMAIN:-cloud.opencloud.test}${TRAEFIK_PORT_HTTPS:+:}${TRAEFIK_PORT_HTTPS:-} \
--o:net.lok_allow.host[14]=${OC_DOMAIN:-cloud.opencloud.test}${TRAEFIK_PORT_HTTPS:+:}${TRAEFIK_PORT_HTTPS:-} \
--o:home_mode.enable=${COLLABORA_HOME_MODE:-false} --o:home_mode.enable=${COLLABORA_HOME_MODE:-false}
username: ${COLLABORA_ADMIN_USER:-admin} username: ${COLLABORA_ADMIN_USER:-admin}
password: ${COLLABORA_ADMIN_PASSWORD:-admin} password: ${COLLABORA_ADMIN_PASSWORD:-admin}
@@ -80,24 +52,19 @@ services:
# (e.g. Microsoft fonts like Arial, Calibri, Cambria by installing the `ttf-mscorefonts-installer` package). # (e.g. Microsoft fonts like Arial, Calibri, Cambria by installing the `ttf-mscorefonts-installer` package).
- /usr/share/fonts/truetype:/usr/share/fonts/truetype/more:ro - /usr/share/fonts/truetype:/usr/share/fonts/truetype/more:ro
- /usr/share/fonts/truetype:/opt/cool/systemplate/usr/share/fonts/truetype/more:ro - /usr/share/fonts/truetype:/opt/cool/systemplate/usr/share/fonts/truetype/more:ro
# WOPI proof key generated by the collabora-proof-key service.
- type: volume
source: collabora-proof-key
target: /etc/coolwsd/proof_key
read_only: true
volume:
subpath: proof_key
logging: logging:
driver: ${LOG_DRIVER:-local} driver: ${LOG_DRIVER:-local}
restart: always restart: always
entrypoint: [ '/bin/bash', '-c' ]
command: [ 'coolconfig generate-proof-key && /start-collabora-online.sh' ]
healthcheck: healthcheck:
# --use-env-vars makes the probe read extra_params, so it probes with test:
# the same http/https scheme the server actually runs with; without it [
# the probe falls back to coolwsd.xml where ssl.enable defaults to true "CMD",
test: ["CMD", "/usr/bin/coolwsd", "--probe", "--use-env-vars"] "bash",
"-c",
"exec 3<>/dev/tcp/127.0.0.1/9980 && printf 'GET /hosting/discovery HTTP/1.1\r\nHost: localhost\r\nConnection: close\r\n\r\n' >&3 && cat <&3 | head -1 | grep -q '200 OK'"
]
interval: 15s interval: 15s
timeout: 10s timeout: 10s
retries: 5 retries: 5
volumes:
collabora-proof-key: