From f6cf4c37c14bab200e9d54af2ee5016b814a767c Mon Sep 17 00:00:00 2001 From: Vladimir Ischenko Date: Wed, 27 Aug 2025 16:13:19 +0300 Subject: [PATCH 01/13] Update to modern LABEL maintainer syntax --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 6e9a8d3..8ea0cb3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ ARG BASE_VERSION=24.04 ARG BASE_IMAGE=ubuntu:$BASE_VERSION FROM ${BASE_IMAGE} AS documentserver -LABEL maintainer Ascensio System SIA +LABEL maintainer="Ascensio System SIA " ARG BASE_VERSION ARG PG_VERSION=16 From fc99345e114158635972ce90bac920238ad59b49 Mon Sep 17 00:00:00 2001 From: Vladimir Ischenko Date: Wed, 27 Aug 2025 16:17:33 +0300 Subject: [PATCH 02/13] Fix typos in comments --- run-document-server.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/run-document-server.sh b/run-document-server.sh index 2d43099..5026ee3 100644 --- a/run-document-server.sh +++ b/run-document-server.sh @@ -110,7 +110,7 @@ RABBIT_CONNECTIONS=${RABBIT_CONNECTIONS:-$LIMIT} JWT_ENABLED=${JWT_ENABLED:-true} -# validate user's vars before usinig in json +# validate user's vars before using in json if [ "${JWT_ENABLED}" == "true" ]; then JWT_ENABLED="true" else @@ -726,7 +726,7 @@ else waiting_for_datacontainer # read settings after the data container in ready state - # to prevent get unconfigureted data + # to prevent get unconfigured data read_setting update_welcome_page From 0362706b26e899eb684bdbfcd64bf74559892a6f Mon Sep 17 00:00:00 2001 From: Sergey Konovalov Date: Tue, 30 Dec 2025 17:12:58 +0300 Subject: [PATCH 03/13] Add env var PKG_NATIVE_CACHE_PATH to control pkg native cache location; For Bug 76727 --- config/supervisor/ds/ds-docservice.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/supervisor/ds/ds-docservice.conf b/config/supervisor/ds/ds-docservice.conf index 7cb28f7..51c81ce 100644 --- a/config/supervisor/ds/ds-docservice.conf +++ b/config/supervisor/ds/ds-docservice.conf @@ -2,7 +2,7 @@ command=/var/www/COMPANY_NAME/documentserver/server/DocService/docservice directory=/var/www/COMPANY_NAME/documentserver/server/DocService user=ds -environment=NODE_ENV=production-linux,NODE_CONFIG_DIR=/etc/COMPANY_NAME/documentserver,NODE_DISABLE_COLORS=1,APPLICATION_NAME=COMPANY_NAME +environment=NODE_ENV=production-linux,NODE_CONFIG_DIR=/etc/COMPANY_NAME/documentserver,NODE_DISABLE_COLORS=1,PKG_NATIVE_CACHE_PATH=/tmp/.cache,APPLICATION_NAME=COMPANY_NAME stdout_logfile=/var/log/COMPANY_NAME/documentserver/docservice/out.log stdout_logfile_backups=0 stdout_logfile_maxbytes=0 From 9ee11e40c0c421fbff3de447c2ad4c2bc406c344 Mon Sep 17 00:00:00 2001 From: Evgeniy Antonyuk Date: Thu, 22 Jan 2026 06:09:20 +0200 Subject: [PATCH 04/13] fix Bug 78949 - Fix RabbitMQ startup failure due to ulimit nofile changes --- run-document-server.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/run-document-server.sh b/run-document-server.sh index 29bf22a..7b284a4 100644 --- a/run-document-server.sh +++ b/run-document-server.sh @@ -105,7 +105,7 @@ NGINX_CONFIG_PATH="/etc/nginx/nginx.conf" NGINX_WORKER_PROCESSES=${NGINX_WORKER_PROCESSES:-1} NGINX_ACCESS_LOG=${NGINX_ACCESS_LOG:-false} # Limiting the maximum number of simultaneous connections due to possible memory shortage -LIMIT=$(ulimit -n); [ $LIMIT -gt 1048576 ] && LIMIT=1048576 +LIMIT=$(ulimit -n); [ "$LIMIT" = "unlimited" ] || [ "$LIMIT" -gt 524288 ] && LIMIT=524288 NGINX_WORKER_CONNECTIONS=${NGINX_WORKER_CONNECTIONS:-$LIMIT} RABBIT_CONNECTIONS=${RABBIT_CONNECTIONS:-$LIMIT} @@ -736,7 +736,8 @@ if [ ${ONLYOFFICE_DATA_CONTAINER_HOST} = "localhost" ]; then chmod 400 ${RABBITMQ_DATA}/.erlang.cookie fi - echo "ulimit -n $RABBIT_CONNECTIONS" >> /etc/default/rabbitmq-server + sed -i '/^[[:space:]]*ulimit[[:space:]]\+-n[[:space:]]\+/d' /etc/default/rabbitmq-server + printf 'ulimit -n %s\n' "${RABBIT_CONNECTIONS}" >> /etc/default/rabbitmq-server LOCAL_SERVICES+=("rabbitmq-server") # allow Rabbitmq startup after container kill From 058d512af2d3020829b100aa68d714a2368d4bf5 Mon Sep 17 00:00:00 2001 From: Evgeniy Antonyuk Date: Fri, 23 Jan 2026 05:25:55 +0200 Subject: [PATCH 05/13] fix Bug 78997 - Run plugin manager in background during startup --- run-document-server.sh | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/run-document-server.sh b/run-document-server.sh index 7b284a4..a83dba7 100644 --- a/run-document-server.sh +++ b/run-document-server.sh @@ -794,9 +794,7 @@ if [ ${ONLYOFFICE_DATA_CONTAINER} != "true" ]; then update_nginx_settings if [ "${PLUGINS_ENABLED}" = "true" ]; then - echo -n Installing plugins, please wait... - start_process documentserver-pluginsmanager.sh -r false --update=\"${APP_DIR}/sdkjs-plugins/plugin-list-default.json\" >/dev/null - echo Done + ( documentserver-pluginsmanager.sh -r false --update="${APP_DIR}/sdkjs-plugins/plugin-list-default.json" >/dev/null; echo "[pluginsmanager] Plugins initialization finished" >/proc/1/fd/1 ) & fi service supervisor start From 849cb4ee7008cbd20b4183bce18ea5c1bd410379 Mon Sep 17 00:00:00 2001 From: Evgeniy Antonyuk Date: Fri, 23 Jan 2026 06:38:30 +0200 Subject: [PATCH 06/13] fix Bug 78722 - Add admin panel and example service autostart options --- README.md | 2 ++ run-document-server.sh | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 689d26c..2a70b46 100644 --- a/README.md +++ b/README.md @@ -214,6 +214,8 @@ Below is the complete list of parameters that can be set using environment varia - **ALLOW_PRIVATE_IP_ADDRESS**: Defines if it is allowed to connect private IP address or not. Defaults to `false`. - **USE_UNAUTHORIZED_STORAGE**: Set to `true` if using self-signed certificates for your storage server e.g. Nextcloud. Defaults to `false` - **GENERATE_FONTS**: When 'true' regenerates fonts list and the fonts thumbnails etc. at each start. Defaults to `true` +- **ADMINPANEL_ENABLED**: Enables admin panel service autostart. Defaults to `false`. +- **EXAMPLE_ENABLED**: Enables example service autostart. Defaults to `false`. - **METRICS_ENABLED**: Specifies the enabling StatsD for ONLYOFFICE Document Server. Defaults to `false`. - **METRICS_HOST**: Defines StatsD listening host. Defaults to `localhost`. - **METRICS_PORT**: Defines StatsD listening port. Defaults to `8125`. diff --git a/run-document-server.sh b/run-document-server.sh index a83dba7..1efddb2 100644 --- a/run-document-server.sh +++ b/run-document-server.sh @@ -84,7 +84,7 @@ elif [[ -f ${SSL_CERTIFICATE_PATH} ]]; then fi if [[ -n $NODE_EXTRA_ENVIRONMENT ]]; then - sed -i "s|^environment=.*$|&,NODE_EXTRA_CA_CERTS=${NODE_EXTRA_ENVIRONMENT}|" /etc/supervisor/conf.d/*.conf + sed -i "s|^environment=.*$|&,NODE_EXTRA_CA_CERTS=${NODE_EXTRA_ENVIRONMENT}|" ${SUPERVISOR_CONF_DIR}/*.conf fi CA_CERTIFICATES_PATH=${CA_CERTIFICATES_PATH:-${SSL_CERTIFICATES_DIR}/ca-certificates.pem} @@ -797,6 +797,8 @@ if [ ${ONLYOFFICE_DATA_CONTAINER} != "true" ]; then ( documentserver-pluginsmanager.sh -r false --update="${APP_DIR}/sdkjs-plugins/plugin-list-default.json" >/dev/null; echo "[pluginsmanager] Plugins initialization finished" >/proc/1/fd/1 ) & fi + [ "${ADMINPANEL_ENABLED:-false}" = "true" ] && sed -i 's,autostart=false,autostart=true,' ${SUPERVISOR_CONF_DIR}/ds-adminpanel.conf + [ "${EXAMPLE_ENABLED:-false}" = "true" ] && sed -i 's,autostart=false,autostart=true,' ${SUPERVISOR_CONF_DIR}/ds-example.conf service supervisor start # start cron to enable log rotating From 578deab49adae7e3c10a0048ac8586eb0e314ef5 Mon Sep 17 00:00:00 2001 From: Vladimir Ischenko Date: Mon, 2 Feb 2026 17:00:10 +0300 Subject: [PATCH 07/13] Replace help commands in disabled pages --- run-document-server.sh | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/run-document-server.sh b/run-document-server.sh index 1efddb2..316569d 100644 --- a/run-document-server.sh +++ b/run-document-server.sh @@ -585,16 +585,20 @@ create_oracle_tbl() { update_welcome_page() { WELCOME_PAGE="${APP_DIR}-example/welcome/docker.html" + ADMIN_DISABLED_PAGE="${APP_DIR}-example/welcome/admin-disabled.html" + EXAMPLE_DISABLED_PAGE="${APP_DIR}-example/welcome/example-disabled.html" + sed -Ei 's#sudo systemctl start ds-(adminpanel|example)#sudo docker exec $(sudo docker ps -q) supervisorctl start ds:\1#g' "$ADMIN_DISABLED_PAGE" "$EXAMPLE_DISABLED_PAGE" + if [[ -e $WELCOME_PAGE ]]; then DOCKER_CONTAINER_ID=$(basename $(cat /proc/1/cpuset)) (( ${#DOCKER_CONTAINER_ID} < 12 )) && DOCKER_CONTAINER_ID=$(hostname) if (( ${#DOCKER_CONTAINER_ID} >= 12 )); then if [[ -x $(command -v docker) ]]; then DOCKER_CONTAINER_NAME=$(docker inspect --format="{{.Name}}" $DOCKER_CONTAINER_ID) - sed 's/$(sudo docker ps -q)/'"${DOCKER_CONTAINER_NAME#/}"'/' -i $WELCOME_PAGE + sed 's/$(sudo docker ps -q)/'"${DOCKER_CONTAINER_NAME#/}"'/' -i $WELCOME_PAGE "$ADMIN_DISABLED_PAGE" "$EXAMPLE_DISABLED_PAGE" JWT_MESSAGE=$(echo $JWT_MESSAGE | sed 's/$(sudo docker ps -q)/'"${DOCKER_CONTAINER_NAME#/}"'/') else - sed 's/$(sudo docker ps -q)/'"${DOCKER_CONTAINER_ID::12}"'/' -i $WELCOME_PAGE + sed 's/$(sudo docker ps -q)/'"${DOCKER_CONTAINER_ID::12}"'/' -i $WELCOME_PAGE "$ADMIN_DISABLED_PAGE" "$EXAMPLE_DISABLED_PAGE" JWT_MESSAGE=$(echo $JWT_MESSAGE | sed 's/$(sudo docker ps -q)/'"${DOCKER_CONTAINER_ID::12}"'/') fi fi From 425241b1a5304f7e03d13902154c32858149130a Mon Sep 17 00:00:00 2001 From: danilapog Date: Tue, 10 Feb 2026 16:20:23 +0300 Subject: [PATCH 08/13] Build: build images on navite runners Also make multiarch image with simple tag after build --- .github/workflows/4testing-build.yml | 143 ++++++++++++++++++++++++--- docker-bake.hcl | 3 +- 2 files changed, 129 insertions(+), 17 deletions(-) diff --git a/.github/workflows/4testing-build.yml b/.github/workflows/4testing-build.yml index ab6a01c..6f39d03 100644 --- a/.github/workflows/4testing-build.yml +++ b/.github/workflows/4testing-build.yml @@ -77,31 +77,31 @@ jobs: exit 1 fi echo "editions=$(jq -n -c --arg s "${EDITIONS[*]}" '($s|split(" "))')" >> $GITHUB_OUTPUT + echo "platforms=$(jq -c -n '$ARGS.positional' --args "${PLATFORMS[@]}")" >> $GITHUB_OUTPUT outputs: editions: ${{ steps.matrix.outputs.editions }} + platforms: ${{ steps.matrix.outputs.platforms }} build: - name: "Build ${{ matrix.image }}-${{ matrix.edition }}" - runs-on: ubuntu-latest + name: "Build ${{ matrix.image }}-${{ matrix.edition }}:${{ matrix.platform }}" + runs-on: ${{ (matrix.platform == 'arm64') && 'ubuntu-24.04-arm' || 'ubuntu-latest' }} needs: prepare strategy: fail-fast: false matrix: image: ["documentserver"] edition: ${{ fromJSON(needs.prepare.outputs.editions) }} + platform: ${{ fromJSON(needs.prepare.outputs.platforms) }} steps: - name: Checkout code - uses: actions/checkout@v3 - - - name: Set up QEMU - uses: docker/setup-qemu-action@v2 + uses: actions/checkout@v4 - name: Set up Docker Buildx id: buildx - uses: docker/setup-buildx-action@v2 + uses: docker/setup-buildx-action@v3 - name: Login to Docker Hub - uses: docker/login-action@v2 + uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_HUB_USERNAME }} password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} @@ -126,8 +126,7 @@ jobs: id: build-ds env: BRANCH_NAME: ${{ github.ref_name }} - AMD64: ${{ github.event.inputs.amd64 }} - ARM64: ${{ github.event.inputs.arm64 }} + PLATFORM: linux/${{ matrix.platform }} BUILD_NUMBER: ${{ github.event.inputs.build }} EDITION: ${{ matrix.edition }} IMAGE: ${{ matrix.image }} @@ -149,10 +148,6 @@ jobs: ;; esac - [ "${AMD64}" = true ] && PLATFORMS+=("amd64") - [ "${ARM64}" = true ] && PLATFORMS+=("arm64") - PLATFORM=$(echo ${PLATFORMS[*]/#/linux/} | tr ' ' ',') - if [ "$BRANCH_NAME" = develop ]; then BUILD_CHANNEL=nightly PRODUCT_VERSION=99.99.99 @@ -167,7 +162,7 @@ jobs: export PLATFORM export DOCKERFILE=Dockerfile export PREFIX_NAME=4testing- - export TAG=${PRODUCT_VERSION}.${BUILD_NUMBER} + export TAG=${PRODUCT_VERSION}.${BUILD_NUMBER}-${{ matrix.platform }} ### ==>> Build and push images at this step ### @@ -186,6 +181,7 @@ jobs: - name: Trigger zap manualy if: >- matrix.edition == 'community' && + matrix.platform == 'amd64' && (startsWith(steps.build-ds.outputs.branch, 'release/') || startsWith(steps.build-ds.outputs.branch, 'hotfix/')) env: @@ -200,3 +196,120 @@ jobs: -f version="${VERSION}" shell: bash + - name: Save build result to file + if: always() + run: | + mkdir -p build-result + + cat > build-result/info.json < /dev/null 2>&1; then + echo "Found image: $img" + FROM_TAGS+=( "$img" ) + return 0 + fi + + echo "Image not found yet, retrying in ${interval}s..." + sleep $interval + elapsed=$(( elapsed + interval )) + done + + echo "ERROR: Image not found after ${timeout}s: $img" + return 1 + } + + if [[ "${AMD64_STATUS}" == "success" ]]; then + check_image "${COMPANY_NAME}/4testing-${PRODUCT_NAME}${PRODUCT_EDITION}:${TAG}-amd64" + fi + + if [[ "${ARM64_STATUS}" == "success" ]]; then + check_image "${COMPANY_NAME}/4testing-${PRODUCT_NAME}${PRODUCT_EDITION}:${TAG}-arm64" + fi + + PUSH_TAGS=( + -t "${COMPANY_NAME}/4testing-${PRODUCT_NAME}${PRODUCT_EDITION}:${TAG}" + ) + + if [[ "${BUILD_CHANNEL}" == "nightly" ]]; then + PUSH_TAGS+=( -t "${COMPANY_NAME}/4testing-${PRODUCT_NAME}${PRODUCT_EDITION}:latest" ) + fi + + docker buildx imagetools create "${PUSH_TAGS[@]}" "${FROM_TAGS[@]}" diff --git a/docker-bake.hcl b/docker-bake.hcl index 7fe3843..30c8b70 100644 --- a/docker-bake.hcl +++ b/docker-bake.hcl @@ -90,8 +90,7 @@ target "documentserver" { target = "documentserver" dockerfile = "${DOCKERFILE}" tags = [ - "docker.io/${COMPANY_NAME}/${PREFIX_NAME}${PRODUCT_NAME}${PRODUCT_EDITION}:${TAG}", - equal("nightly",BUILD_CHANNEL) ? "docker.io/${COMPANY_NAME}/${PREFIX_NAME}${PRODUCT_NAME}${PRODUCT_EDITION}:latest": "", + "docker.io/${COMPANY_NAME}/${PREFIX_NAME}${PRODUCT_NAME}${PRODUCT_EDITION}:${TAG}" ] platforms = ["${PLATFORM}"] args = { From 0bf51cae5e564923a388d4486e2e2ae630d03add Mon Sep 17 00:00:00 2001 From: danilapog Date: Tue, 10 Feb 2026 16:27:28 +0300 Subject: [PATCH 09/13] Cosmetic: just cosmetic fix --- .github/workflows/4testing-build.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/4testing-build.yml b/.github/workflows/4testing-build.yml index 6f39d03..9ab13f1 100644 --- a/.github/workflows/4testing-build.yml +++ b/.github/workflows/4testing-build.yml @@ -159,7 +159,6 @@ jobs: export PRODUCT_EDITION export PACKAGE_VERSION=${PRODUCT_VERSION}-${BUILD_NUMBER} export BUILD_CHANNEL - export PLATFORM export DOCKERFILE=Dockerfile export PREFIX_NAME=4testing- export TAG=${PRODUCT_VERSION}.${BUILD_NUMBER}-${{ matrix.platform }} From f63607aeccde66fe6bafb7a51e346c2bbf87fd91 Mon Sep 17 00:00:00 2001 From: danilapog Date: Wed, 11 Feb 2026 14:11:58 +0300 Subject: [PATCH 10/13] Build: get runner specification from the matrix --- .github/workflows/4testing-build.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/4testing-build.yml b/.github/workflows/4testing-build.yml index 9ab13f1..dc88712 100644 --- a/.github/workflows/4testing-build.yml +++ b/.github/workflows/4testing-build.yml @@ -84,7 +84,7 @@ jobs: build: name: "Build ${{ matrix.image }}-${{ matrix.edition }}:${{ matrix.platform }}" - runs-on: ${{ (matrix.platform == 'arm64') && 'ubuntu-24.04-arm' || 'ubuntu-latest' }} + runs-on: ${{ matrix.runner }} needs: prepare strategy: fail-fast: false @@ -92,6 +92,11 @@ jobs: image: ["documentserver"] edition: ${{ fromJSON(needs.prepare.outputs.editions) }} platform: ${{ fromJSON(needs.prepare.outputs.platforms) }} + include: + - platform: amd64 + runner: ubuntu-latest + - platform: arm64 + runner: ubuntu-24.04-arm steps: - name: Checkout code uses: actions/checkout@v4 From b531e96c104b6c9b780cef3d89bc71875b8fdbd9 Mon Sep 17 00:00:00 2001 From: Evgeniy Antonyuk Date: Fri, 13 Feb 2026 12:51:47 +0300 Subject: [PATCH 11/13] Increase file descriptor cap to 1,048,576 --- run-document-server.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/run-document-server.sh b/run-document-server.sh index 316569d..02b3f9e 100644 --- a/run-document-server.sh +++ b/run-document-server.sh @@ -105,7 +105,7 @@ NGINX_CONFIG_PATH="/etc/nginx/nginx.conf" NGINX_WORKER_PROCESSES=${NGINX_WORKER_PROCESSES:-1} NGINX_ACCESS_LOG=${NGINX_ACCESS_LOG:-false} # Limiting the maximum number of simultaneous connections due to possible memory shortage -LIMIT=$(ulimit -n); [ "$LIMIT" = "unlimited" ] || [ "$LIMIT" -gt 524288 ] && LIMIT=524288 +LIMIT=$(ulimit -n); [ "$LIMIT" = "unlimited" ] || [ "$LIMIT" -gt 1048576 ] && LIMIT=1048576 NGINX_WORKER_CONNECTIONS=${NGINX_WORKER_CONNECTIONS:-$LIMIT} RABBIT_CONNECTIONS=${RABBIT_CONNECTIONS:-$LIMIT} From c344bc46c8fcb8e4eae17e2afe8abc99f53877ec Mon Sep 17 00:00:00 2001 From: Evgeniy Antonyuk Date: Fri, 13 Feb 2026 13:11:11 +0300 Subject: [PATCH 12/13] Add RABBIT_CONNECTIONS and note ulimit defaults --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 2a70b46..d9c57c0 100644 --- a/README.md +++ b/README.md @@ -196,13 +196,14 @@ Below is the complete list of parameters that can be set using environment varia - **MSSQL** — schema to set as [DEFAULT_SCHEMA](https://learn.microsoft.com/en-us/sql/t-sql/statements/alter-user-transact-sql?view=sql-server-ver17#default_schema---schema_name--null-), default `dbo`. - **AMQP_URI**: The [AMQP URI](https://www.rabbitmq.com/uri-spec.html "RabbitMQ URI Specification") to connect to message broker server. - **AMQP_TYPE**: The message broker type. Supported values are `rabbitmq` or `activemq`. Defaults to `rabbitmq`. +- **RABBIT_CONNECTIONS**: Sets the maximum number of simultaneous connections that can be opened to the RabbitMQ message broker. Defaults to the soft limit from `ulimit -n`. - **REDIS_SERVER_HOST**: The IP address or the name of the host where the Redis server is running. - **REDIS_SERVER_PORT**: The Redis server port number. - **REDIS_SERVER_USER**: The Redis server username. The username is not set by default. - **REDIS_SERVER_PASS**: The Redis server password. The password is not set by default. - **REDIS_SERVER_DB**: The Redis database index number to select. Defaults to `0`. - **NGINX_WORKER_PROCESSES**: Defines the number of nginx worker processes. -- **NGINX_WORKER_CONNECTIONS**: Sets the maximum number of simultaneous connections that can be opened by a nginx worker process. +- **NGINX_WORKER_CONNECTIONS**: Sets the maximum number of simultaneous connections that can be opened by a nginx worker process. Defaults to the soft limit from `ulimit -n`. - **NGINX_ACCESS_LOG**: Defines whether access logging is enabled. Defaults to `false`. - **SECURE_LINK_SECRET**: Defines secret for the nginx config directive [secure_link_md5](https://nginx.org/en/docs/http/ngx_http_secure_link_module.html#secure_link_md5). Defaults to `random string`. - **JWT_ENABLED**: Specifies the enabling the JSON Web Token validation by the ONLYOFFICE Document Server. Defaults to `true`. From 475a957b34eba03d6567cdd1ea6661cb9f80d5c1 Mon Sep 17 00:00:00 2001 From: Evgeniy Antonyuk Date: Fri, 20 Feb 2026 16:10:08 +0300 Subject: [PATCH 13/13] Make adminpanel conditional by edition --- Dockerfile | 1 + run-document-server.sh | 23 +++++++++++++++-------- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/Dockerfile b/Dockerfile index 1ed7758..6c59736 100644 --- a/Dockerfile +++ b/Dockerfile @@ -122,6 +122,7 @@ RUN PACKAGE_FILE="${COMPANY_NAME}-${PRODUCT_NAME}${PRODUCT_EDITION}${PACKAGE_VER apt-get -y update && \ service postgresql start && \ apt-get -yq install /tmp/$PACKAGE_FILE && \ + if [ "${PRODUCT_EDITION}" != "-ee" ] && [ "${PRODUCT_EDITION}" != "-de" ]; then rm -f /etc/supervisor/conf.d/ds-adminpanel.conf && sed -i 's/,adminpanel//' /etc/supervisor/conf.d/ds.conf; fi && \ PGPASSWORD=$ONLYOFFICE_VALUE dropdb -h localhost -p 5432 -U $ONLYOFFICE_VALUE $ONLYOFFICE_VALUE && \ sudo -u postgres psql -c "DROP ROLE onlyoffice;" && \ service postgresql stop && \ diff --git a/run-document-server.sh b/run-document-server.sh index 02b3f9e..0169318 100644 --- a/run-document-server.sh +++ b/run-document-server.sh @@ -136,6 +136,8 @@ else REDIS_ENABLED=true fi +[[ "${PRODUCT_EDITION}" =~ ^-(ee|de)$ ]] && ADMINPANEL_AVAILABLE=true || ADMINPANEL_AVAILABLE=false + ONLYOFFICE_DEFAULT_CONFIG=${CONF_DIR}/local.json ONLYOFFICE_LOG4JS_CONFIG=${CONF_DIR}/log4js/production.json ONLYOFFICE_EXAMPLE_CONFIG=${CONF_DIR}-example/local.json @@ -585,20 +587,25 @@ create_oracle_tbl() { update_welcome_page() { WELCOME_PAGE="${APP_DIR}-example/welcome/docker.html" - ADMIN_DISABLED_PAGE="${APP_DIR}-example/welcome/admin-disabled.html" EXAMPLE_DISABLED_PAGE="${APP_DIR}-example/welcome/example-disabled.html" - sed -Ei 's#sudo systemctl start ds-(adminpanel|example)#sudo docker exec $(sudo docker ps -q) supervisorctl start ds:\1#g' "$ADMIN_DISABLED_PAGE" "$EXAMPLE_DISABLED_PAGE" + if ${ADMINPANEL_AVAILABLE}; then + ADMIN_DISABLED_PAGE="${APP_DIR}-example/welcome/admin-disabled.html" + sed -Ei 's#sudo systemctl start ds-(adminpanel|example)#sudo docker exec $(sudo docker ps -q) supervisorctl start ds:\1#g' "$ADMIN_DISABLED_PAGE" "$EXAMPLE_DISABLED_PAGE" + else + sed -Ei 's#sudo systemctl start ds-example#sudo docker exec $(sudo docker ps -q) supervisorctl start ds:example#g' "$EXAMPLE_DISABLED_PAGE" + fi + TARGET_PAGES="$WELCOME_PAGE $EXAMPLE_DISABLED_PAGE${ADMIN_DISABLED_PAGE:+ $ADMIN_DISABLED_PAGE}" if [[ -e $WELCOME_PAGE ]]; then DOCKER_CONTAINER_ID=$(basename $(cat /proc/1/cpuset)) (( ${#DOCKER_CONTAINER_ID} < 12 )) && DOCKER_CONTAINER_ID=$(hostname) if (( ${#DOCKER_CONTAINER_ID} >= 12 )); then if [[ -x $(command -v docker) ]]; then DOCKER_CONTAINER_NAME=$(docker inspect --format="{{.Name}}" $DOCKER_CONTAINER_ID) - sed 's/$(sudo docker ps -q)/'"${DOCKER_CONTAINER_NAME#/}"'/' -i $WELCOME_PAGE "$ADMIN_DISABLED_PAGE" "$EXAMPLE_DISABLED_PAGE" + sed 's/$(sudo docker ps -q)/'"${DOCKER_CONTAINER_NAME#/}"'/' -i ${TARGET_PAGES} JWT_MESSAGE=$(echo $JWT_MESSAGE | sed 's/$(sudo docker ps -q)/'"${DOCKER_CONTAINER_NAME#/}"'/') else - sed 's/$(sudo docker ps -q)/'"${DOCKER_CONTAINER_ID::12}"'/' -i $WELCOME_PAGE "$ADMIN_DISABLED_PAGE" "$EXAMPLE_DISABLED_PAGE" + sed 's/$(sudo docker ps -q)/'"${DOCKER_CONTAINER_ID::12}"'/' -i ${TARGET_PAGES} JWT_MESSAGE=$(echo $JWT_MESSAGE | sed 's/$(sudo docker ps -q)/'"${DOCKER_CONTAINER_ID::12}"'/') fi fi @@ -676,10 +683,10 @@ update_release_date(){ } # create base folders -for i in converter docservice metrics adminpanel; do - mkdir -p "$DS_LOG_DIR/$i" && touch "$DS_LOG_DIR/$i"/{out,err}.log +for SUPERVISOR_CONF in "${SUPERVISOR_CONF_DIR}"/ds-*.conf; do + SERVICE_NAME=$(sed "s|^${SUPERVISOR_CONF_DIR}/ds-||; s|\.conf$||" <<<"$SUPERVISOR_CONF") + mkdir -p "$DS_LOG_DIR/$SERVICE_NAME" && touch "$DS_LOG_DIR/$SERVICE_NAME"/{out,err}.log done - mkdir -p "${DS_LOG_DIR}-example" && touch "${DS_LOG_DIR}-example"/{out,err}.log # create app folders @@ -801,7 +808,7 @@ if [ ${ONLYOFFICE_DATA_CONTAINER} != "true" ]; then ( documentserver-pluginsmanager.sh -r false --update="${APP_DIR}/sdkjs-plugins/plugin-list-default.json" >/dev/null; echo "[pluginsmanager] Plugins initialization finished" >/proc/1/fd/1 ) & fi - [ "${ADMINPANEL_ENABLED:-false}" = "true" ] && sed -i 's,autostart=false,autostart=true,' ${SUPERVISOR_CONF_DIR}/ds-adminpanel.conf + ${ADMINPANEL_AVAILABLE} && [ "${ADMINPANEL_ENABLED:-false}" = "true" ] && sed -i 's,autostart=false,autostart=true,' ${SUPERVISOR_CONF_DIR}/ds-adminpanel.conf [ "${EXAMPLE_ENABLED:-false}" = "true" ] && sed -i 's,autostart=false,autostart=true,' ${SUPERVISOR_CONF_DIR}/ds-example.conf service supervisor start