diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 9d5d7a0d41..b704485d5b 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -53,27 +53,21 @@ jobs:
run: |
set -euo pipefail
- # Helper that checks out a branch inside a submodule
checkout_submodule() {
local path=$1
local branch=$2
echo "🔧 Updating $path → $branch"
pushd "$path" > /dev/null
- git fetch origin "${branch}:${branch}" # ensure the branch exists locally
+ git fetch origin "${branch}:${branch}"
git checkout "$branch"
popd > /dev/null
}
- # Only override if explicitly requested via workflow_dispatch.
- # On a normal PR push, use whatever commit the parent repo has pinned —
- # this is the correct behaviour: the submodule SHA in fork IS the source
- # of truth for which core commit to build.
[ -n "$CORE_BRANCH" ] && checkout_submodule core "$CORE_BRANCH"
[ -n "$SDKJS_BRANCH" ] && checkout_submodule sdkjs "$SDKJS_BRANCH"
[ -n "$WEBAPPS_BRANCH" ] && checkout_submodule web-apps "$WEBAPPS_BRANCH"
[ -n "$SERVER_BRANCH" ] && checkout_submodule server "$SERVER_BRANCH"
- # These always track main, no pin needed
checkout_submodule dictionaries "main"
checkout_submodule document-templates "main"
@@ -89,25 +83,21 @@ jobs:
# ─────────────────────────────────────────────────────────────
# BUILD
#
- # Bake builds documentserver and resolves all named-context
- # dependencies (core, core-wasm, sdkjs, web-apps, server, example)
- # in a single invocation, in parallel where the graph allows.
+ # Single job that builds the full target graph in one bake
+ # invocation per arch: packages → docker → develop.
+ # Because develop depends on docker which depends on packages,
+ # bake resolves the shared graph and never rebuilds a layer twice.
#
- # Cache is switched from type=local to
- # type=registry so it survives across ephemeral CI jobs.
- #
- # Intermediate target tags are cleared via `set` so that only the
- # final documentserver image is pushed to GHCR when push=true.
- #
- # Each architecture is built on a native runner (amd64 → ubuntu-latest,
- # arm64 → ubuntu-24.04-arm) and tagged with an arch suffix.
- # The manifest job below merges them into a single multi-arch image.
+ # Pushing per target:
+ # docker → pushed on default branch (:nightly) and git tags (:latest)
+ # develop → pushed on default branch only (:latest-dev)
+ # packages → never pushed; exported to local filesystem for release upload
# ─────────────────────────────────────────────────────────────
build:
runs-on: ${{ matrix.arch == 'arm64' && 'ubuntu-24.04-arm' || 'ubuntu-latest' }}
needs: clone
permissions:
- contents: read
+ contents: write
packages: write
strategy:
fail-fast: false
@@ -115,6 +105,7 @@ jobs:
arch:
- amd64
- arm64
+
steps:
- name: Restore cache
uses: actions/cache/restore@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0
@@ -132,30 +123,46 @@ jobs:
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- - name: Compute ref name, image tag and push flag
+ - name: Compute tags and push flags
id: meta
run: |
REF_NAME=$(echo '${{ github.ref_name }}' | tr '/' '-')
echo "ref_name=${REF_NAME}" >> $GITHUB_OUTPUT
- if [[ "${{ github.ref }}" == "refs/heads/${{ github.event.repository.default_branch }}" ]]; then
- echo "tag=nightly" >> $GITHUB_OUTPUT
- echo "push=true" >> $GITHUB_OUTPUT
- elif [[ "${{ github.ref }}" == refs/tags/* ]]; then
- echo "tag=latest" >> $GITHUB_OUTPUT
- echo "push=true" >> $GITHUB_OUTPUT
+ IS_DEFAULT=${{ github.ref == format('refs/heads/{0}', github.event.repository.default_branch) }}
+ IS_TAG=${{ startsWith(github.ref, 'refs/tags/') }}
+
+ # docker target: push on default branch and git tags
+ if [[ "$IS_DEFAULT" == "true" ]]; then
+ echo "docker_tag=nightly-${{ matrix.arch }}" >> $GITHUB_OUTPUT
+ echo "docker_push=true" >> $GITHUB_OUTPUT
+ elif [[ "$IS_TAG" == "true" ]]; then
+ echo "docker_tag=latest-${{ matrix.arch }}" >> $GITHUB_OUTPUT
+ echo "docker_push=true" >> $GITHUB_OUTPUT
else
- echo "tag=${REF_NAME}" >> $GITHUB_OUTPUT
- echo "push=false" >> $GITHUB_OUTPUT
+ echo "docker_tag=${REF_NAME}-${{ matrix.arch }}" >> $GITHUB_OUTPUT
+ echo "docker_push=false" >> $GITHUB_OUTPUT
fi
- - name: Build (and conditionally push) documentserver
+ # develop target: push on default branch only
+ if [[ "$IS_DEFAULT" == "true" ]]; then
+ echo "develop_push=true" >> $GITHUB_OUTPUT
+ else
+ echo "develop_push=false" >> $GITHUB_OUTPUT
+ fi
+
+ - name: Build all targets (packages → docker → develop)
uses: docker/bake-action@4a9a8d494466d37134e2bfca2d3a8de8fb2681ad # v5.13.0
with:
workdir: ./build
files: ./docker-bake.hcl
- targets: documentserver
- push: ${{ steps.meta.outputs.push == 'true' }}
+ # Build the full graph; bake deduplicates shared layers automatically.
+ # packages is included so its local filesystem export always runs,
+ # enabling the release upload step below.
+ targets: develop,packages
+ # push=false here; per-target pushing is controlled via tags below.
+ # Targets with empty tags= are not pushed regardless of this flag.
+ push: false
set: |
core.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-core-buildcache-${{ matrix.arch }}
core.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-core-buildcache-${{ matrix.arch }},mode=max
@@ -175,23 +182,41 @@ jobs:
example.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-example-buildcache-${{ matrix.arch }}
example.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-example-buildcache-${{ matrix.arch }},mode=max
example.tags=
- documentserver.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-documentserver-buildcache-${{ matrix.arch }}
- documentserver.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-documentserver-buildcache-${{ matrix.arch }},mode=max
- documentserver.tags=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.meta.outputs.tag }}-${{ matrix.arch }}
+ bundle.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-bundle-buildcache-${{ matrix.arch }}
+ bundle.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-bundle-buildcache-${{ matrix.arch }},mode=max
+ bundle.tags=
+ packages.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-packages-buildcache-${{ matrix.arch }}
+ packages.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-packages-buildcache-${{ matrix.arch }},mode=max
+ packages.tags=
+ docker.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-docker-buildcache-${{ matrix.arch }}
+ docker.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-docker-buildcache-${{ matrix.arch }},mode=max
+ docker.tags=${{ steps.meta.outputs.docker_push == 'true' && format('{0}/{1}:{2}', env.REGISTRY, env.IMAGE_NAME, steps.meta.outputs.docker_tag) || '' }}
+ docker.output=${{ steps.meta.outputs.docker_push == 'true' && format('type=registry') || 'type=cacheonly' }}
+ develop.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-develop-buildcache-${{ matrix.arch }}
+ develop.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-develop-buildcache-${{ matrix.arch }},mode=max
+ develop.tags=${{ steps.meta.outputs.develop_push == 'true' && format('{0}/{1}:latest-dev-{2}', env.REGISTRY, env.IMAGE_NAME, matrix.arch) || '' }}
+ develop.output=${{ steps.meta.outputs.develop_push == 'true' && 'type=registry' || 'type=cacheonly' }}
env:
REGISTRY: ${{ env.REGISTRY }}
- TAG: ${{ steps.meta.outputs.tag }}-${{ matrix.arch }}
+ TAG: ${{ steps.meta.outputs.docker_tag }}
PRODUCT_VERSION: ${{ env.PRODUCT_VERSION }}
BUILD_ROOT: ${{ env.BUILD_ROOT }}
NUGET_CACHE: local
+ - name: Upload packages to GitHub Release
+ uses: softprops/action-gh-release@v2
+ if: startsWith(github.ref, 'refs/tags/')
+ with:
+ files: |
+ build/deploy/packages/*.deb
+ build/deploy/packages/*.rpm
+
# ─────────────────────────────────────────────────────────────
# MANIFEST
#
- # Combines the arch-specific documentserver images built above
- # into a single multi-arch manifest. Only runs when images were
- # actually pushed (default branch → :nightly, git tags → :latest
- # and the sanitised ref tag).
+ # Merges the arch-specific documentserver images into a single
+ # multi-arch manifest. Runs on default branch (:nightly) and
+ # git tags (:latest + sanitised ref tag).
# ─────────────────────────────────────────────────────────────
manifest:
runs-on: ubuntu-latest
@@ -216,7 +241,7 @@ jobs:
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- - name: Create and push multi-arch manifest
+ - name: Create and push multi-arch manifests
run: |
REF="${{ steps.ref.outputs.name }}"
REPO="${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}"
@@ -229,216 +254,12 @@ jobs:
"${REPO}:${tag}-arm64"
}
- # Push :nightly on the default branch
if [[ "${{ github.ref_name }}" == "${{ github.event.repository.default_branch }}" ]]; then
create_manifest "nightly"
+ create_manifest "latest-dev"
fi
- # Push :latest and the sanitised ref tag on git tags
if [[ "${{ github.ref }}" == refs/tags/* ]]; then
create_manifest "latest"
create_manifest "${REF}"
fi
-
- # ─────────────────────────────────────────────────────────────
- # BUILD-DEVELOP
- #
- # The develop target pulls in documentserver + all dep targets
- # via named contexts; every dep is a registry-cache hit here,
- # so only the thin develop layer actually builds.
- #
- # Published only on the default branch (no "latest-dev" for tags
- # or feature branches).
- # ─────────────────────────────────────────────────────────────
- build-develop:
- runs-on: ${{ matrix.arch == 'arm64' && 'ubuntu-24.04-arm' || 'ubuntu-latest' }}
- needs: build
- permissions:
- contents: read
- packages: write
- strategy:
- fail-fast: false
- matrix:
- arch:
- - amd64
- - arm64
- steps:
- - name: Restore cache
- uses: actions/cache/restore@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0
- with:
- path: "${{ github.workspace }}"
- key: ${{ runner.os }}-build-${{ github.sha }}
-
- - name: Set up Docker Buildx
- uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3.12.0
-
- - name: Log in to GitHub Container Registry
- uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3.7.0
- with:
- registry: ${{ env.REGISTRY }}
- username: ${{ github.actor }}
- password: ${{ secrets.GITHUB_TOKEN }}
-
- - name: Compute ref name and push flag
- id: meta
- run: |
- echo "ref_name=$(echo '${{ github.ref_name }}' | tr '/' '-')" >> $GITHUB_OUTPUT
- # Develop image is only published on the default branch
- if [[ "${{ github.ref }}" == "refs/heads/${{ github.event.repository.default_branch }}" ]]; then
- echo "push=true" >> $GITHUB_OUTPUT
- else
- echo "push=false" >> $GITHUB_OUTPUT
- fi
-
- - name: Build (and conditionally push) develop
- uses: docker/bake-action@4a9a8d494466d37134e2bfca2d3a8de8fb2681ad # v5.13.0
- with:
- workdir: ./build
- files: ./docker-bake.hcl
- targets: develop
- push: ${{ steps.meta.outputs.push == 'true' }}
- set: |
- core.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-core-buildcache-${{ matrix.arch }}
- core.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-core-buildcache-${{ matrix.arch }},mode=max
- core.tags=
- core-wasm.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-core-wasm-buildcache-${{ matrix.arch }}
- core-wasm.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-core-wasm-buildcache-${{ matrix.arch }},mode=max
- core-wasm.tags=
- sdkjs.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-sdkjs-buildcache-${{ matrix.arch }}
- sdkjs.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-sdkjs-buildcache-${{ matrix.arch }},mode=max
- sdkjs.tags=
- web-apps.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-web-apps-buildcache-${{ matrix.arch }}
- web-apps.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-web-apps-buildcache-${{ matrix.arch }},mode=max
- web-apps.tags=
- server.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-server-buildcache-${{ matrix.arch }}
- server.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-server-buildcache-${{ matrix.arch }},mode=max
- server.tags=
- example.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-example-buildcache-${{ matrix.arch }}
- example.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-example-buildcache-${{ matrix.arch }},mode=max
- example.tags=
- documentserver.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-documentserver-buildcache-${{ matrix.arch }}
- documentserver.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-documentserver-buildcache-${{ matrix.arch }},mode=max
- documentserver.tags=
- develop.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-develop-buildcache-${{ matrix.arch }}
- develop.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-develop-buildcache-${{ matrix.arch }},mode=max
- develop.tags=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest-dev-${{ matrix.arch }}
- env:
- REGISTRY: ${{ env.REGISTRY }}
- TAG: latest-dev-${{ matrix.arch }}
- PRODUCT_VERSION: ${{ env.PRODUCT_VERSION }}
- BUILD_ROOT: ${{ env.BUILD_ROOT }}
- NUGET_CACHE: local
-
- # ─────────────────────────────────────────────────────────────
- # MANIFEST-DEVELOP
- #
- # Combines the arch-specific develop images into a single
- # multi-arch manifest. Only runs on the default branch.
- # ─────────────────────────────────────────────────────────────
- manifest-develop:
- runs-on: ubuntu-latest
- needs: build-develop
- if: github.ref_name == github.event.repository.default_branch
- permissions:
- contents: read
- packages: write
-
- steps:
- - name: Set up Docker Buildx
- uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3.12.0
-
- - name: Log in to GitHub Container Registry
- uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3.7.0
- with:
- registry: ${{ env.REGISTRY }}
- username: ${{ github.actor }}
- password: ${{ secrets.GITHUB_TOKEN }}
-
- - name: Create and push multi-arch dev manifest
- run: |
- REPO="${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}"
- docker buildx imagetools create \
- -t "${REPO}:latest-dev" \
- "${REPO}:latest-dev-amd64" \
- "${REPO}:latest-dev-arm64"
-
- # ─────────────────────────────────────────────────────────────
- # BUILD-PACKAGES
- #
- # All transitive deps are registry-cache hits at this point;
- # only the packages export stage executes fresh.
- #
- # Packages are AMD64-only (no ARM package builds).
- # ─────────────────────────────────────────────────────────────
- build-packages:
- runs-on: ubuntu-latest
- needs: build
- permissions:
- contents: read
- packages: write
- steps:
- - name: Restore cache
- uses: actions/cache/restore@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0
- with:
- path: "${{ github.workspace }}"
- key: ${{ runner.os }}-build-${{ github.sha }}
-
- - name: Set up Docker Buildx
- uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3.12.0
-
- - name: Log in to GitHub Container Registry
- uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3.7.0
- with:
- registry: ${{ env.REGISTRY }}
- username: ${{ github.actor }}
- password: ${{ secrets.GITHUB_TOKEN }}
-
- - name: Compute ref name
- id: meta
- run: echo "ref_name=$(echo '${{ github.ref_name }}' | tr '/' '-')" >> $GITHUB_OUTPUT
-
- - name: Build packages (.deb and .rpm)
- uses: docker/bake-action@4a9a8d494466d37134e2bfca2d3a8de8fb2681ad # v5.13.0
- with:
- workdir: ./build
- files: ./docker-bake.hcl
- targets: packages
- push: false
- set: |
- core.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-core-buildcache-amd64
- core.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-core-buildcache-amd64,mode=max
- core.tags=
- core-wasm.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-core-wasm-buildcache-amd64
- core-wasm.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-core-wasm-buildcache-amd64,mode=max
- core-wasm.tags=
- sdkjs.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-sdkjs-buildcache-amd64
- sdkjs.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-sdkjs-buildcache-amd64,mode=max
- sdkjs.tags=
- web-apps.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-web-apps-buildcache-amd64
- web-apps.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-web-apps-buildcache-amd64,mode=max
- web-apps.tags=
- server.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-server-buildcache-amd64
- server.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-server-buildcache-amd64,mode=max
- server.tags=
- example.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-example-buildcache-amd64
- example.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-example-buildcache-amd64,mode=max
- example.tags=
- documentserver.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-documentserver-buildcache-amd64
- documentserver.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-documentserver-buildcache-amd64,mode=max
- documentserver.tags=
- packages.cache-from=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-packages-buildcache-amd64
- packages.cache-to=type=registry,ref=${{ env.REGISTRY }}/${{ env.CACHE_IMAGE_NAME }}:${{ steps.meta.outputs.ref_name }}-packages-buildcache-amd64,mode=max
- packages.tags=
- env:
- REGISTRY: ${{ env.REGISTRY }}
- TAG: latest
- PRODUCT_VERSION: ${{ env.PRODUCT_VERSION }}
- BUILD_ROOT: ${{ env.BUILD_ROOT }}
- NUGET_CACHE: local
-
- #- name: Upload packages as artifact
- # uses: actions/upload-artifact@v4
- # with:
- # name: packages-${{ github.sha }}
- # path: dist/packages/
- # retention-days: 30
diff --git a/build/.docker/bundle.bake.Dockerfile b/build/.docker/bundle.bake.Dockerfile
new file mode 100644
index 0000000000..52d23f883b
--- /dev/null
+++ b/build/.docker/bundle.bake.Dockerfile
@@ -0,0 +1,75 @@
+# ==============================================================================
+# MODULE DOCKERFILE
+# This file is not meant to be built standalone. It is consumed by the
+# docker-bake.hcl files in the parent monorepos.
+#
+# REQUIRED CONTEXTS:
+# - server: builds from server repo
+# - core: builds from core repo
+# - web-apps: builds from web-apps repo
+# - sdkjs: builds from sdkjs repo
+# - example: builds from example repo
+# ==============================================================================
+
+
+FROM alpine AS bundle
+ ARG BUILD_ROOT=/package
+ # --- Copy build files
+ RUN mkdir -p /build/documentserver/sdkjs-plugins /build/documentserver/fonts \
+ /build/documentserver/server/FileConverter/lib /build/documentserver/server/tools
+
+ # --- Static content from build context (rarely changes) ---
+ COPY dictionaries /build/documentserver/dictionaries
+ COPY document-templates /build/documentserver/document-templates
+ COPY core-fonts /build/documentserver/core-fonts
+
+ # --- Config files
+ COPY build/configs/core/DoctRenderer.config /build/documentserver/server/FileConverter/bin/DoctRenderer.config
+ COPY server/Metrics/config/config.js /build/documentserver/server/Metrics/config/config.js
+
+
+ # --- Build stage outputs (change with code) ---
+ COPY --from=sdkjs ${BUILD_ROOT} /build/documentserver/
+ COPY --from=web-apps ${BUILD_ROOT} /build/documentserver/
+
+ COPY --from=core ${BUILD_ROOT}/bin/ /build/documentserver/server/FileConverter/bin/
+ COPY --from=core ${BUILD_ROOT}/tools/ /build/documentserver/server/tools/
+ COPY --from=core ${BUILD_ROOT}/*.so* /build/documentserver/server/FileConverter/lib/
+ COPY --from=core ${BUILD_ROOT}/tools/*.so* /build/documentserver/server/tools/
+
+ COPY --from=server ${BUILD_ROOT}/docservice /build/documentserver/server/DocService/docservice
+ COPY --from=server ${BUILD_ROOT}/fileconverter /build/documentserver/server/FileConverter/converter
+ COPY --from=server ${BUILD_ROOT}/metrics /build/documentserver/server/Metrics/metrics
+ COPY --from=server ${BUILD_ROOT}/adminpanel /build/documentserver/server/AdminPanel/server/adminpanel
+ COPY --from=server ${BUILD_ROOT}/build /build/documentserver/server/AdminPanel/client/build
+
+
+ COPY --from=example /example/example /build/documentserver-example/example
+ RUN mkdir -p /build/documentserver-example/files
+ COPY --from=example /example/config /build/documentserver-example/config
+
+ #COPY document-server-package/common/documentserver-example/welcome /build/documentserver-example/welcome
+ #RUN YEAR=$(date +"%Y") && \
+ # sed -i "s|{{OFFICIAL_PRODUCT_NAME}}|Community Edition|g" /build/documentserver-example/welcome/*.html && \
+ # find /build/documentserver-example/welcome -depth -type f \
+ # -exec sed -i "s_{{year}}_${YEAR}_g" {} \; && \
+ # sed -i "s|{{EXAMPLE_DISABLED_COMMANDS}}|sudo systemctl start ds-example|g" \
+ # /build/documentserver-example/welcome/example-disabled.html && \
+ # rm -f /build/documentserver-example/welcome/admin-disabled.html && \
+ # sed -i '//,//d' \
+ # /build/documentserver-example/welcome/docker.html \
+ # /build/documentserver-example/welcome/linux.html \
+ # /build/documentserver-example/welcome/linux-rpm.html \
+ # /build/documentserver-example/welcome/win.html
+
+
+ RUN mkdir -p /build/documentserver/server/Common/config/log4js
+
+ COPY server/Common/config/. /build/documentserver/server/Common/config/
+
+ RUN rm -f /build/documentserver/server/Common/config/runtime.json
+
+ COPY server/schema/. /build/documentserver/server/schema/
+ COPY server/license/. /build/documentserver/server/license/
+ COPY server/LICENSE.txt /build/documentserver/server/
+ COPY server/3rd-Party.txt /build/documentserver/server/
\ No newline at end of file
diff --git a/build/.docker/develop.bake.Dockerfile b/build/.docker/develop.bake.Dockerfile
index c864f8c17d..55d1d8d2c0 100644
--- a/build/.docker/develop.bake.Dockerfile
+++ b/build/.docker/develop.bake.Dockerfile
@@ -4,11 +4,7 @@
# docker-bake.hcl files in the parent monorepos.
#
# REQUIRED CONTEXTS:
-# - server: builds from server repo
-# - core: builds from core repo
-# - web-apps: builds from web-apps repo
-# - sdkjs: builds from sdkjs repo
-# - example: builds from example repo
+# - docker: the final docker image of documentserver
# ==============================================================================
FROM finalubuntu AS develop
@@ -17,7 +13,7 @@ FROM finalubuntu AS develop
RUN apt-get update && \
curl -fsSL https://deb.nodesource.com/setup_20.x | bash - && \
- apt-get install -y nodejs npm openjdk-21-jdk wget zip brotli && \
+ apt-get install -y nodejs openjdk-21-jdk wget zip brotli && \
npm install -g @yao-pkg/pkg grunt-cli && \
rm -rf /var/lib/apt/lists/*
diff --git a/build/.docker/docker.bake.Dockerfile b/build/.docker/docker.bake.Dockerfile
new file mode 100644
index 0000000000..b54c14291b
--- /dev/null
+++ b/build/.docker/docker.bake.Dockerfile
@@ -0,0 +1,67 @@
+# ==============================================================================
+# MODULE DOCKERFILE
+# This file is not meant to be built standalone. It is consumed by the
+# docker-bake.hcl files in the parent monorepos.
+#
+# REQUIRED CONTEXTS:
+# - packages: final packages of documentserver
+# ==============================================================================
+
+#### FINAL UBUNTU ####
+FROM ubuntu:24.04 AS finalubuntu
+ARG PRODUCT_VERSION
+ARG BUILD_ROOT=/package
+
+ARG EO_ROOT=/var/www/euro-office/documentserver
+ARG EO_LOG=/var/log/euro-office/documentserver
+ARG EO_CONF=/etc/euro-office/documentserver
+
+ENV EO_ROOT=${EO_ROOT}
+ENV EO_LOG=${EO_LOG}
+ENV EO_CONF=${EO_CONF}
+
+RUN apt-get -y update && \
+ ACCEPT_EULA=Y apt-get -yq install \
+ postgresql postgresql-client redis-server rabbitmq-server \
+ nginx sudo gdb nginx-extras supervisor jq util-linux && \
+ rm -rf /var/lib/apt/lists/*
+
+# Create the 'ds' user that is required by OnlyOffice scripts
+#RUN useradd -r -s /bin/false ds || true
+
+# --- install euro-office .deb package
+ARG TARGETARCH
+COPY --from=packages / /tmp/
+RUN apt-get -y update && \
+ service postgresql start && \
+ service rabbitmq-server start && \
+ sudo -u postgres psql -c "CREATE USER eurooffice WITH password 'eurooffice';" && \
+ sudo -u postgres psql -c "CREATE DATABASE eurooffice OWNER eurooffice;" && \
+ echo "euro-office-documentserver ds/db-type string postgres" | debconf-set-selections && \
+ echo "euro-office-documentserver ds/db-host string localhost" | debconf-set-selections && \
+ echo "euro-office-documentserver ds/db-port string 5432" | debconf-set-selections && \
+ echo "euro-office-documentserver ds/db-user string eurooffice" | debconf-set-selections && \
+ echo "euro-office-documentserver ds/db-pwd password eurooffice" | debconf-set-selections && \
+ echo "euro-office-documentserver ds/db-name string eurooffice" | debconf-set-selections && \
+ DS_DOCKER_INSTALLATION=true DEBIAN_FRONTEND=noninteractive apt-get -yq install /tmp/euro-office-documentserver_${PRODUCT_VERSION}-0_${TARGETARCH}.deb
+ #sudo -u postgres bash -c "PGPASSWORD=eurooffice psql -h localhost -U eurooffice -d eurooffice -f ${EO_ROOT}/server/schema/postgresql/createdb.sql"
+
+
+# --- Final setup ---
+COPY build/configs/supervisor/ /etc/supervisor/conf.d/
+COPY --chmod=755 build/scripts/entrypoint.sh /entrypoint.sh
+
+#RUN mkdir -p ${EO_LOG}/docservice ${EO_LOG}/converter \
+# ${EO_LOG}/adminpanel ${EO_LOG}/metrics
+
+#RUN mkdir -p ${EO_ROOT}/documentserver-example/files
+
+#RUN mkdir -p ${EO_ROOT}/server/Common/config && \
+# echo '{}' > ${EO_ROOT}/server/Common/config/runtime.json
+
+#RUN mkdir -p /var/lib/euro-office #&& \
+# chown -R ds:ds /var/www/euro-office /var/lib/euro-office /var/log/euro-office
+
+RUN /usr/bin/documentserver-flush-cache.sh -r false
+
+ENTRYPOINT ["/entrypoint.sh"]
\ No newline at end of file
diff --git a/build/.docker/docserver.bake.Dockerfile b/build/.docker/docserver.bake.Dockerfile
deleted file mode 100644
index 94489e0d60..0000000000
--- a/build/.docker/docserver.bake.Dockerfile
+++ /dev/null
@@ -1,117 +0,0 @@
-# ==============================================================================
-# MODULE DOCKERFILE
-# This file is not meant to be built standalone. It is consumed by the
-# docker-bake.hcl files in the parent monorepos.
-#
-# REQUIRED CONTEXTS:
-# - server: builds from server repo
-# - core: builds from core repo
-# - web-apps: builds from web-apps repo
-# - sdkjs: builds from sdkjs repo
-# - example: builds from example repo
-# ==============================================================================
-
-#### FINAL UBUNTU ####
-FROM ubuntu:24.04 AS finalubuntu
-ARG PRODUCT_VERSION
-ARG BUILD_ROOT=/package
-
-ARG EO_ROOT=/var/www/onlyoffice/documentserver
-ARG EO_LOG=/var/log/onlyoffice/documentserver
-ARG EO_CONF=/etc/onlyoffice/documentserver
-
-ENV EO_ROOT=${EO_ROOT}
-ENV EO_LOG=${EO_LOG}
-ENV EO_CONF=${EO_CONF}
-
-RUN apt-get -y update && \
- ACCEPT_EULA=Y apt-get -yq install \
- postgresql postgresql-client redis-server rabbitmq-server \
- nginx sudo gdb nginx-extras supervisor jq util-linux && \
- rm -rf /var/lib/apt/lists/*
-
-# Create the 'ds' user that is required by OnlyOffice scripts
-RUN useradd -r -s /bin/false ds || true
-
-COPY build/configs/postgres ${EO_ROOT}/server/schema/postgresql
-
-RUN service postgresql start && \
- sudo -u postgres psql -c "CREATE USER onlyoffice WITH password 'onlyoffice';" && \
- sudo -u postgres psql -c "CREATE DATABASE onlyoffice OWNER onlyoffice;" && \
- sudo -u postgres bash -c "PGPASSWORD=onlyoffice psql -h localhost -U onlyoffice -d onlyoffice -f ${EO_ROOT}/server/schema/postgresql/createdb.sql"
-
-RUN rm -f /etc/nginx/sites-enabled/default && \
- mkdir -p ${EO_LOG}/docservice ${EO_LOG}/converter \
- ${EO_LOG}/adminpanel ${EO_LOG}/metrics \
- ${EO_ROOT}/sdkjs-plugins ${EO_ROOT}/fonts \
- ${EO_ROOT}/server/FileConverter/lib ${EO_ROOT}/server/tools && \
- touch ${EO_LOG}/nginx.error.log
-
-# --- Static content from build context (rarely changes) ---
-COPY dictionaries ${EO_ROOT}/dictionaries
-COPY document-templates ${EO_ROOT}/document-templates
-COPY core-fonts ${EO_ROOT}/core-fonts
-
-# --- Config files and scripts (rarely change) ---
-COPY build/configs/onlyoffice/default.json ${EO_CONF}/default.json
-COPY build/configs/onlyoffice/development-linux.json ${EO_CONF}/development-linux.json
-COPY build/configs/onlyoffice/local.json ${EO_CONF}/local.json
-COPY build/configs/onlyoffice/log4js/development.json ${EO_CONF}/log4js/development.json
-
-RUN mkdir -p /var/www/onlyoffice/documentserver && \
- cp ${EO_CONF}/log4js/development.json /var/www/onlyoffice/documentserver/log4js.json
-
-COPY build/configs/metrics/config/config.js ${EO_ROOT}/server/Metrics/config/config.js
-COPY build/configs/nginx/conf.d /etc/nginx/conf.d/
-COPY build/configs/nginx/includes /etc/nginx/includes/
-RUN sed -i "s/__PRODUCT_VERSION__/${PRODUCT_VERSION}/g" /etc/nginx/includes/ds-docservice.conf
-
-COPY build/configs/core/DoctRenderer.config ${EO_ROOT}/server/FileConverter/bin/DoctRenderer.config
-COPY build/configs/supervisor/ /etc/supervisor/conf.d/
-COPY --chmod=755 build/scripts/documentserver-flush-cache.sh /usr/bin/documentserver-flush-cache.sh
-COPY --chmod=755 build/scripts/documentserver-generate-allfonts.sh /usr/bin/documentserver-generate-allfonts.sh
-COPY --chmod=755 build/scripts/entrypoint.sh /entrypoint.sh
-
-# --- Build stage outputs (change with code) ---
-COPY --from=sdkjs ${BUILD_ROOT} ${EO_ROOT}/
-COPY --from=web-apps ${BUILD_ROOT} ${EO_ROOT}/
-
-COPY --from=core ${BUILD_ROOT}/bin/ ${EO_ROOT}/server/FileConverter/bin/
-COPY --from=core ${BUILD_ROOT}/tools/ ${EO_ROOT}/server/tools/
-COPY --from=core ${BUILD_ROOT}/*.so* ${EO_ROOT}/server/FileConverter/lib/
-COPY --from=core ${BUILD_ROOT}/tools/*.so* ${EO_ROOT}/server/tools/
-
-COPY --from=server ${BUILD_ROOT}/docservice ${EO_ROOT}/server/DocService/docservice
-COPY --from=server ${BUILD_ROOT}/fileconverter ${EO_ROOT}/server/FileConverter/converter
-COPY --from=server ${BUILD_ROOT}/metrics ${EO_ROOT}/server/Metrics/metrics
-COPY --from=server ${BUILD_ROOT}/adminpanel ${EO_ROOT}/server/AdminPanel/server/adminpanel
-COPY --from=server ${BUILD_ROOT}/build ${EO_ROOT}/server/AdminPanel/client/build
-
-COPY --from=example /example/example /var/www/onlyoffice/documentserver-example/example
-RUN mkdir -p /var/www/onlyoffice/documentserver-example/files
-COPY --from=example /example/config/* /etc/onlyoffice/documentserver-example/
-
-COPY document-server-package/common/documentserver-example/welcome /var/www/onlyoffice/documentserver-example/welcome
-RUN YEAR=$(date +"%Y") && \
- sed -i "s|{{OFFICIAL_PRODUCT_NAME}}|Community Edition|g" /var/www/onlyoffice/documentserver-example/welcome/*.html && \
- find /var/www/onlyoffice/documentserver-example/welcome -depth -type f \
- -exec sed -i "s_{{year}}_${YEAR}_g" {} \; && \
- sed -i "s|{{EXAMPLE_DISABLED_COMMANDS}}|sudo systemctl start ds-example|g" \
- /var/www/onlyoffice/documentserver-example/welcome/example-disabled.html && \
- rm -f /var/www/onlyoffice/documentserver-example/welcome/admin-disabled.html && \
- sed -i '//,//d' \
- /var/www/onlyoffice/documentserver-example/welcome/docker.html \
- /var/www/onlyoffice/documentserver-example/welcome/linux.html \
- /var/www/onlyoffice/documentserver-example/welcome/linux-rpm.html \
- /var/www/onlyoffice/documentserver-example/welcome/win.html
-
-# --- Final setup ---
-RUN mkdir -p ${EO_ROOT}/server/Common/config && \
- echo '{}' > ${EO_ROOT}/server/Common/config/runtime.json
-
-RUN mkdir -p /var/lib/onlyoffice && \
- chown -R ds:ds /var/www/onlyoffice /var/lib/onlyoffice /var/log/onlyoffice
-
-RUN /usr/bin/documentserver-flush-cache.sh -r false
-
-ENTRYPOINT ["/entrypoint.sh"]
\ No newline at end of file
diff --git a/build/.docker/packages.bake.Dockerfile b/build/.docker/packages.bake.Dockerfile
index e72eff56ae..63dd5ec30f 100644
--- a/build/.docker/packages.bake.Dockerfile
+++ b/build/.docker/packages.bake.Dockerfile
@@ -4,52 +4,58 @@
# docker-bake.hcl files in the parent monorepos.
#
# REQUIRED CONTEXTS:
-# - server: builds from server repo
-# - core: builds from core repo
-# - web-apps: builds from web-apps repo
-# - sdkjs: builds from sdkjs repo
-# - example: builds from example repo
+# - bundle: bundled builds
# ==============================================================================
#### PACKAGE ####
-# Extends finalubuntu (or a pre-built image via PACKAGE_BASE); installs packaging tools, then runs build-packages.sh
-# to populate /build/package/out/ and invoke the upstream Makefile.
-
-ARG PACKAGE_BASE
-
-FROM ${PACKAGE_BASE} AS package
-ARG PRODUCT_VERSION
-ARG BUILD_NUMBER=0
-
-RUN apt-get update && \
- DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
- devscripts dpkg-dev build-essential fakeroot debhelper \
- rpm m4 curl ca-certificates gnupg symlinks && \
- curl -fsSL https://deb.nodesource.com/setup_20.x | bash - && \
- apt-get install -y nodejs && \
- npm install -g @yao-pkg/pkg && \
- rm -rf /var/lib/apt/lists/*
-
-# Upstream packaging repo
-COPY document-server-package/ /document-server-package/
-
-# Original server source files required by the upstream Makefile's sed transforms
-COPY server/Common/config/ /server-src/Common/config/
-COPY server/schema/ /server-src/schema/
-COPY server/license/ /server-src/license/
-COPY server/LICENSE.txt /server-src/
-COPY server/3rd-Party.txt /server-src/
-
-COPY --chmod=755 build/scripts/build-packages.sh /build-packages.sh
-
-ENV PRODUCT_VERSION=${PRODUCT_VERSION}
-ENV BUILD_NUMBER=${BUILD_NUMBER}
-
-RUN /build-packages.sh
+FROM ubuntu:24.04 AS package
+
+ ARG PRODUCT_VERSION
+ ARG BUILD_NUMBER=0
+ ARG OUT_BASE="/build/package/out"
+ ARG BUNDLE_BASE="/build/bundle"
+ ARG OUT_DIR="${BUNDLE_BASE}/euro-office/documentserver"
+ ARG EXAMPLE_OUT="${BUNDLE_BASE}/euro-office/documentserver-example"
+
+ ENV PRODUCT_VERSION=${PRODUCT_VERSION}
+ ENV BUILD_NUMBER=${BUILD_NUMBER}
+ ENV OUT_BASE=${OUT_BASE}
+ ENV BUNDLE_BASE=${BUNDLE_BASE}
+ ENV OUT_DIR=${OUT_DIR}
+ ENV EXAMPLE_OUT=${EXAMPLE_OUT}
+
+ RUN apt-get update && \
+ DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
+ devscripts dpkg-dev build-essential fakeroot debhelper \
+ rpm m4 curl ca-certificates gnupg symlinks && \
+ curl -fsSL https://deb.nodesource.com/setup_20.x | bash - && \
+ apt-get install -y nodejs && \
+ npm install -g @yao-pkg/pkg && \
+ rm -rf /var/lib/apt/lists/*
+
+ #Build files
+ COPY --from=bundle /build/documentserver ${OUT_DIR}/
+ COPY --from=bundle /build/documentserver-example ${EXAMPLE_OUT}/
+
+ # Upstream packaging repo
+ COPY document-server-package/ /document-server-package/
+
+ RUN cd document-server-package && \
+ mkdir -p ${OUT_BASE} && \
+ ln -s ${BUNDLE_BASE} ${OUT_BASE}/linux_64 && \
+ ln -s ${BUNDLE_BASE} ${OUT_BASE}/linux_arm64 && \
+ make deb rpm \
+ BUILD_OUTPUT_DIR="${OUT_BASE}" \
+ PRODUCT_VERSION="${PRODUCT_VERSION}" \
+ BUILD_NUMBER="${BUILD_NUMBER}"
+
+ RUN mkdir -p /packages && \
+ find /document-server-package/deb -name "*.deb" -exec cp -v {} /packages/ \; && \
+ find /document-server-package/rpm/builddir -name "*.rpm" -exec cp -v {} /packages/ \;
#### PACKAGES OUTPUT ####
# Scratch stage so `docker build --target packages -o
` extracts only
# the finished .deb and .rpm files.
FROM scratch AS packages
-COPY --from=package /packages/ /
\ No newline at end of file
+ COPY --from=package /packages/ /
\ No newline at end of file
diff --git a/build/build_deb.sh b/build/build_deb.sh
index 68bb4c3433..98b025cdae 100755
--- a/build/build_deb.sh
+++ b/build/build_deb.sh
@@ -67,21 +67,21 @@ directory_setup() {
mkdir -p ${_PKG_DIR}/DEBIAN
mkdir -p ${_PKG_DIR}/usr/bin ${_PKG_DIR}/usr/lib/systemd/system
- mkdir -p ${_PKG_DIR}/etc/onlyoffice/documentserver
- mkdir -p ${_PKG_DIR}/var/www/onlyoffice/documentserver
+ mkdir -p ${_PKG_DIR}/etc/euro-office/documentserver
+ mkdir -p ${_PKG_DIR}/var/www/euro-office/documentserver
}
prep_base() {
_PKG_DIR=$1
- cp -r /var/www/onlyoffice/documentserver/license ${_PKG_DIR}/var/www/onlyoffice/documentserver
- cp -r /var/www/onlyoffice/documentserver/npm ${_PKG_DIR}/var/www/onlyoffice/documentserver
- cp -r /var/www/onlyoffice/documentserver/dictionaries ${_PKG_DIR}/var/www/onlyoffice/documentserver
- cp -r /var/www/onlyoffice/documentserver/document-templates ${_PKG_DIR}/var/www/onlyoffice/documentserver
+ cp -r /var/www/euro-office/documentserver/license ${_PKG_DIR}/var/www/euro-office/documentserver
+ cp -r /var/www/euro-office/documentserver/npm ${_PKG_DIR}/var/www/euro-office/documentserver
+ cp -r /var/www/euro-office/documentserver/dictionaries ${_PKG_DIR}/var/www/euro-office/documentserver
+ cp -r /var/www/euro-office/documentserver/document-templates ${_PKG_DIR}/var/www/euro-office/documentserver
- cp /var/www/onlyoffice/documentserver/LICENSE.txt ${_PKG_DIR}/var/www/onlyoffice/documentserver
- cp /var/www/onlyoffice/documentserver/3rd-Party.txt ${_PKG_DIR}/var/www/onlyoffice/documentserver
+ cp /var/www/euro-office/documentserver/LICENSE.txt ${_PKG_DIR}/var/www/euro-office/documentserver
+ cp /var/www/euro-office/documentserver/3rd-Party.txt ${_PKG_DIR}/var/www/euro-office/documentserver
}
prep_server() {
@@ -89,33 +89,33 @@ prep_server() {
cp /usr/bin/documentserver-* ${_PKG_DIR}/usr/bin/
cp /usr/lib/systemd/system/ds-* ${_PKG_DIR}/usr/lib/systemd/system/
- cp -r /var/www/onlyoffice/documentserver/server ${_PKG_DIR}/var/www/onlyoffice/documentserver
- rm -r ${_PKG_DIR}/var/www/onlyoffice/documentserver/server/FileConverter
+ cp -r /var/www/euro-office/documentserver/server ${_PKG_DIR}/var/www/euro-office/documentserver
+ rm -r ${_PKG_DIR}/var/www/euro-office/documentserver/server/FileConverter
}
prep_web_apps() {
_PKG_DIR=$1
- cp -r /var/www/onlyoffice/documentserver/web-apps ${_PKG_DIR}/var/www/onlyoffice/documentserver
+ cp -r /var/www/euro-office/documentserver/web-apps ${_PKG_DIR}/var/www/euro-office/documentserver
}
prep_core_fonts() {
_PKG_DIR=$1
- cp -r /var/www/onlyoffice/documentserver/core-fonts ${_PKG_DIR}/var/www/onlyoffice/documentserver
+ cp -r /var/www/euro-office/documentserver/core-fonts ${_PKG_DIR}/var/www/euro-office/documentserver
}
prep_sdkjs() {
_PKG_DIR=$1
- cp -r /var/www/onlyoffice/documentserver/sdkjs ${_PKG_DIR}/var/www/onlyoffice/documentserver
- cp -r /var/www/onlyoffice/documentserver/sdkjs-plugins ${_PKG_DIR}/var/www/onlyoffice/documentserver
+ cp -r /var/www/euro-office/documentserver/sdkjs ${_PKG_DIR}/var/www/euro-office/documentserver
+ cp -r /var/www/euro-office/documentserver/sdkjs-plugins ${_PKG_DIR}/var/www/euro-office/documentserver
}
prep_core() {
_PKG_DIR=$1
- cp -r /var/www/onlyoffice/documentserver/server/FileConverter ${_PKG_DIR}/var/www/onlyoffice/documentserver/server
+ cp -r /var/www/euro-office/documentserver/server/FileConverter ${_PKG_DIR}/var/www/euro-office/documentserver/server
}
prep_all() {
diff --git a/build/configs/metrics/config/config.js b/build/configs/metrics/config/config.js
deleted file mode 100644
index 0398becf4f..0000000000
--- a/build/configs/metrics/config/config.js
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * (c) Copyright Ascensio System SIA 2010-2024
- *
- * This program is a free software product. You can redistribute it and/or
- * modify it under the terms of the GNU Affero General Public License (AGPL)
- * version 3 as published by the Free Software Foundation. In accordance with
- * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
- * that Ascensio System SIA expressly excludes the warranty of non-infringement
- * of any third-party rights.
- *
- * This program is distributed WITHOUT ANY WARRANTY; without even the implied
- * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
- * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
- *
- * The interactive user interfaces in modified source and object code versions
- * of the Program must display Appropriate Legal Notices, as required under
- * Section 5 of the GNU AGPL version 3.
- *
- * All the Product's GUI elements, including illustrations and icon sets, as
- * well as technical writing content are licensed under the terms of the
- * Creative Commons Attribution-ShareAlike 4.0 International. See the License
- * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
- *
- */
-
-/*
-
-Required Variables:
-
- port: StatsD listening port [default: 8125]
-
-Graphite Required Variables:
-
-(Leave these unset to avoid sending stats to Graphite.
- Set debug flag and leave these unset to run in 'dry' debug mode -
- useful for testing statsd clients without a Graphite server.)
-
- graphiteHost: hostname or IP of Graphite server
- graphitePort: port of Graphite server
-
-Optional Variables:
-
- backends: an array of backends to load. Each backend must exist
- by name in the directory backends/. If not specified,
- the default graphite backend will be loaded.
- debug: debug flag [default: false]
- address: address to listen on over UDP [default: 0.0.0.0]
- address_ipv6: defines if the address is an IPv4 or IPv6 address [true or false, default: false]
- port: port to listen for messages on over UDP [default: 8125]
- mgmt_address: address to run the management TCP interface on
- [default: 0.0.0.0]
- mgmt_port: port to run the management TCP interface on [default: 8126]
- title : Allows for overriding the process title. [default: statsd]
- if set to false, will not override the process title and let the OS set it.
- The length of the title has to be less than or equal to the binary name + cli arguments
- NOTE: This does not work on Mac's with node versions prior to v0.10
-
- healthStatus: default health status to be returned and statsd process starts ['up' or 'down', default: 'up']
- dumpMessages: log all incoming messages
- flushInterval: interval (in ms) to flush to Graphite
- percentThreshold: for time information, calculate the Nth percentile(s)
- (can be a single value or list of floating-point values)
- negative values mean to use "top" Nth percentile(s) values
- [%, default: 90]
- flush_counts: send stats_counts metrics [default: true]
-
- keyFlush: log the most frequently sent keys [object, default: undefined]
- interval: how often to log frequent keys [ms, default: 0]
- percent: percentage of frequent keys to log [%, default: 100]
- log: location of log file for frequent keys [default: STDOUT]
- deleteIdleStats: don't send values to graphite for inactive counters, sets, gauges, or timeers
- as opposed to sending 0. For gauges, this unsets the gauge (instead of sending
- the previous value). Can be individually overriden. [default: false]
- deleteGauges : don't send values to graphite for inactive gauges, as opposed to sending the previous value [default: false]
- deleteTimers: don't send values to graphite for inactive timers, as opposed to sending 0 [default: false]
- deleteSets: don't send values to graphite for inactive sets, as opposed to sending 0 [default: false]
- deleteCounters: don't send values to graphite for inactive counters, as opposed to sending 0 [default: false]
- prefixStats: prefix to use for the statsd statistics data for this running instance of statsd [default: statsd]
- applies to both legacy and new namespacing
-
- console:
- prettyprint: whether to prettyprint the console backend
- output [true or false, default: true]
-
- log: log settings [object, default: undefined]
- backend: where to log: stdout or syslog [string, default: stdout]
- application: name of the application for syslog [string, default: statsd]
- level: log level for [node-]syslog [string, default: LOG_INFO]
-
- graphite:
- legacyNamespace: use the legacy namespace [default: true]
- globalPrefix: global prefix to use for sending stats to graphite [default: "stats"]
- prefixCounter: graphite prefix for counter metrics [default: "counters"]
- prefixTimer: graphite prefix for timer metrics [default: "timers"]
- prefixGauge: graphite prefix for gauge metrics [default: "gauges"]
- prefixSet: graphite prefix for set metrics [default: "sets"]
- globalSuffix: global suffix to use for sending stats to graphite [default: ""]
- This is particularly useful for sending per host stats by
- settings this value to: require('os').hostname().split('.')[0]
-
- repeater: an array of hashes of the for host: and port:
- that details other statsd servers to which the received
- packets should be "repeated" (duplicated to).
- e.g. [ { host: '10.10.10.10', port: 8125 },
- { host: 'observer', port: 88125 } ]
-
- repeaterProtocol: whether to use udp4 or udp6 for repeaters.
- ["udp4" or "udp6", default: "udp4"]
-
- histogram: for timers, an array of mappings of strings (to match metrics) and
- corresponding ordered non-inclusive upper limits of bins.
- For all matching metrics, histograms are maintained over
- time by writing the frequencies for all bins.
- 'inf' means infinity. A lower limit of 0 is assumed.
- default: [], meaning no histograms for any timer.
- First match wins. examples:
- * histogram to only track render durations, with unequal
- class intervals and catchall for outliers:
- [ { metric: 'render', bins: [ 0.01, 0.1, 1, 10, 'inf'] } ]
- * histogram for all timers except 'foo' related,
- equal class interval and catchall for outliers:
- [ { metric: 'foo', bins: [] },
- { metric: '', bins: [ 50, 100, 150, 200, 'inf'] } ]
-
-*/
-{
- port: 8125
-, flushInterval: 600000
-, backends: [ "./backends/console" ]
-}
diff --git a/build/configs/nginx/conf.d/ds.conf b/build/configs/nginx/conf.d/ds.conf
deleted file mode 100644
index 5fadf52dd1..0000000000
--- a/build/configs/nginx/conf.d/ds.conf
+++ /dev/null
@@ -1,9 +0,0 @@
-include /etc/nginx/includes/http-common.conf;
-server {
- listen 0.0.0.0:80;
- listen [::]:80 default_server;
- server_tokens off;
-
- set $secure_link_secret verysecretstring;
- include /etc/nginx/includes/ds-*.conf;
-}
\ No newline at end of file
diff --git a/build/configs/nginx/includes/ds-adminpanel.conf b/build/configs/nginx/includes/ds-adminpanel.conf
deleted file mode 100644
index 3a0040664f..0000000000
--- a/build/configs/nginx/includes/ds-adminpanel.conf
+++ /dev/null
@@ -1,4 +0,0 @@
-# AdminPanel: proxy all requests to the service
-location ^~ /admin {
- proxy_pass http://adminpanel;
-}
diff --git a/build/configs/nginx/includes/ds-common.conf b/build/configs/nginx/includes/ds-common.conf
deleted file mode 100644
index 724a7b46e0..0000000000
--- a/build/configs/nginx/includes/ds-common.conf
+++ /dev/null
@@ -1,26 +0,0 @@
-## Increase this if you want to upload large attachments
-client_max_body_size 100m;
-
-underscores_in_headers on;
-
-gzip on;
-gzip_vary on;
-gzip_min_length 1024;
-gzip_comp_level 5;
-gzip_disable "msie6";
-gzip_types text/plain
- text/xml
- text/css
- text/csv
- font/ttf
- application/xml
- application/javascript
- application/x-javascript
- application/json
- application/octet-stream
- application/x-font-ttf
- application/rtf
- application/wasm;
-
-access_log off;
-error_log /var/log/onlyoffice/documentserver/nginx.error.log;
diff --git a/build/configs/nginx/includes/ds-docservice.conf b/build/configs/nginx/includes/ds-docservice.conf
deleted file mode 100644
index d2348d930f..0000000000
--- a/build/configs/nginx/includes/ds-docservice.conf
+++ /dev/null
@@ -1,105 +0,0 @@
-#welcome page
-location = / { return 302 $the_scheme://$the_host$the_prefix/welcome/; }
-
-#script caching protection
-location ~ ^(?\/web-apps\/apps\/(?!api\/documents\/api\.js$).*)$ {
- return 302 $the_scheme://$the_host$the_prefix/__PRODUCT_VERSION__-$cache_tag$cache$is_args$args;
-}
-
-#disable caching for api.js
-location ~ ^(\/[\d]+\.[\d]+\.[\d]+[\.|-][\w]+)?\/(web-apps\/apps\/api\/documents\/api\.js)$ {
- expires off;
- add_header Cache-Control "no-store, no-cache, must-revalidate";
- gzip_static on;
- alias /var/www/onlyoffice/documentserver/$2;
-}
-
-location ~ ^(\/[\d]+\.[\d]+\.[\d]+[\.|-][\w]+)?\/(document_editor_service_worker.js)$ {
- add_header Cache-Control "public, max-age=31536000, immutable" always;
- gzip_static on;
- alias /var/www/onlyoffice/documentserver/sdkjs/common/serviceworker/$2;
-}
-
-#suppress logging the unsupported locale error in web-apps
-location ~ ^(\/[\d]+\.[\d]+\.[\d]+[\.|-][\w]+)?\/(web-apps)(\/.*\.json)$ {
- add_header Cache-Control "public, max-age=31536000, immutable" always;
- error_log /dev/null crit;
- gzip_static on;
- alias /var/www/onlyoffice/documentserver/$2$3;
-}
-
-#suppress logging the unsupported locale error in plugins
-location ~ ^(\/[\d]+\.[\d]+\.[\d]+[\.|-][\w]+)?\/(sdkjs-plugins)(\/.*\.json)$ {
- add_header Cache-Control "public, max-age=31536000, immutable" always;
- error_log /dev/null crit;
- gzip_static on;
- alias /var/www/onlyoffice/documentserver/$2$3;
-}
-
-location ~ ^(\/[\d]+\.[\d]+\.[\d]+[\.|-][\w]+)?\/(web-apps|sdkjs|sdkjs-plugins|fonts|dictionaries)(\/.*)$ {
- add_header Cache-Control "public, max-age=31536000, immutable" always;
- gzip_static on;
- alias /var/www/onlyoffice/documentserver/$2$3;
-}
-
-location ~* ^(\/cache\/files.*)(\/.*) {
- alias /var/lib/onlyoffice/documentserver/App_Data$1;
- add_header Content-Disposition "attachment; filename*=UTF-8''$arg_filename";
-
- secure_link $arg_md5,$arg_expires;
- secure_link_md5 "$secure_link_expires$uri$secure_link_secret";
-
- if ($secure_link = "") {
- return 403;
- }
-
- if ($secure_link = "0") {
- return 410;
- }
-}
-
-# Allow "/internal" interface only from 127.0.0.1
-# Don't comment out the section below for the security reason!
- location ~* ^(\/[\d]+\.[\d]+\.[\d]+[\.|-][\w]+)?\/(internal)(\/.*)$ {
- allow 127.0.0.1;
- deny all;
- proxy_pass http://docservice/$2$3;
-}
-
-# Allow "/info" interface only from 127.0.0.1 by default
-# Comment out lines allow 127.0.0.1; and deny all;
-# of below section to turn on the info page
-location ~* ^(\/[\d]+\.[\d]+\.[\d]+[\.|-][\w]+)?\/(info)(\/.*)$ {
- allow 127.0.0.1;
- deny all;
- proxy_pass http://docservice/$2$3;
-}
-
-location / {
- proxy_pass http://docservice;
- proxy_http_version 1.1;
- proxy_read_timeout 300s;
- proxy_send_timeout 300s;
- proxy_connect_timeout 300s;
- proxy_buffering on;
- proxy_buffers 64 32k;
- proxy_busy_buffers_size 64k;
- proxy_max_temp_file_size 0;
- proxy_redirect off;
-}
-
-location ~* ^(\/[\d]+\.[\d]+\.[\d]+[\.|-][\w]+)?\/(ai-proxy)(\/.*)?$ {
- proxy_pass http://docservice/$2$3;
-
- proxy_connect_timeout 300s;
- proxy_send_timeout 300s;
- proxy_read_timeout 300s;
- send_timeout 300s;
-}
-
-location ~ ^/([\d]+\.[\d]+\.[\d]+[\.|-][\w]+)/(?.*)$ {
- proxy_pass http://docservice/$path$is_args$args;
- proxy_http_version 1.1;
-}
-
-
diff --git a/build/configs/nginx/includes/ds-example.conf b/build/configs/nginx/includes/ds-example.conf
deleted file mode 100644
index 8e4c9acbdc..0000000000
--- a/build/configs/nginx/includes/ds-example.conf
+++ /dev/null
@@ -1,14 +0,0 @@
-location ~ ^(\/welcome\/.*)$ {
- expires 365d;
- alias /var/www/onlyoffice/documentserver-example$1;
- index docker.html;
-}
-
-location /example/ {
- proxy_pass http://example/;
-
- proxy_set_header X-Forwarded-Host $the_host;
- proxy_set_header X-Forwarded-Proto $the_scheme;
- proxy_set_header X-Forwarded-Path /example;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
-}
diff --git a/build/configs/nginx/includes/ds-letsencrypt.conf b/build/configs/nginx/includes/ds-letsencrypt.conf
deleted file mode 100644
index a20a26af32..0000000000
--- a/build/configs/nginx/includes/ds-letsencrypt.conf
+++ /dev/null
@@ -1,4 +0,0 @@
-location ~ /.well-known/acme-challenge {
- root /var/www/onlyoffice/documentserver/letsencrypt/;
- allow all;
-}
diff --git a/build/configs/nginx/includes/ds-mime.types.conf b/build/configs/nginx/includes/ds-mime.types.conf
deleted file mode 100644
index 1c00d701ae..0000000000
--- a/build/configs/nginx/includes/ds-mime.types.conf
+++ /dev/null
@@ -1,99 +0,0 @@
-
-types {
- text/html html htm shtml;
- text/css css;
- text/xml xml;
- image/gif gif;
- image/jpeg jpeg jpg;
- application/javascript js;
- application/atom+xml atom;
- application/rss+xml rss;
-
- text/mathml mml;
- text/plain txt;
- text/vnd.sun.j2me.app-descriptor jad;
- text/vnd.wap.wml wml;
- text/x-component htc;
-
- image/avif avif;
- image/png png;
- image/svg+xml svg svgz;
- image/tiff tif tiff;
- image/vnd.wap.wbmp wbmp;
- image/webp webp;
- image/x-icon ico;
- image/x-jng jng;
- image/x-ms-bmp bmp;
-
- font/woff woff;
- font/woff2 woff2;
-
- application/java-archive jar war ear;
- application/json json;
- application/mac-binhex40 hqx;
- application/msword doc;
- application/pdf pdf;
- application/postscript ps eps ai;
- application/rtf rtf;
- application/vnd.apple.mpegurl m3u8;
- application/vnd.google-earth.kml+xml kml;
- application/vnd.google-earth.kmz kmz;
- application/vnd.ms-excel xls;
- application/vnd.ms-fontobject eot;
- application/vnd.ms-powerpoint ppt;
- application/vnd.oasis.opendocument.graphics odg;
- application/vnd.oasis.opendocument.presentation odp;
- application/vnd.oasis.opendocument.spreadsheet ods;
- application/vnd.oasis.opendocument.text odt;
- application/vnd.openxmlformats-officedocument.presentationml.presentation
- pptx;
- application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
- xlsx;
- application/vnd.openxmlformats-officedocument.wordprocessingml.document
- docx;
- application/vnd.wap.wmlc wmlc;
- application/wasm wasm;
- application/x-7z-compressed 7z;
- application/x-cocoa cco;
- application/x-java-archive-diff jardiff;
- application/x-java-jnlp-file jnlp;
- application/x-makeself run;
- application/x-perl pl pm;
- application/x-pilot prc pdb;
- application/x-rar-compressed rar;
- application/x-redhat-package-manager rpm;
- application/x-sea sea;
- application/x-shockwave-flash swf;
- application/x-stuffit sit;
- application/x-tcl tcl tk;
- application/x-x509-ca-cert der pem crt;
- application/x-xpinstall xpi;
- application/xhtml+xml xhtml;
- application/xspf+xml xspf;
- application/zip zip;
-
- application/octet-stream bin exe dll;
- application/octet-stream deb;
- application/octet-stream dmg;
- application/octet-stream iso img;
- application/octet-stream msi msp msm;
-
- audio/midi mid midi kar;
- audio/mpeg mp3;
- audio/ogg ogg;
- audio/x-m4a m4a;
- audio/x-realaudio ra;
-
- video/3gpp 3gpp 3gp;
- video/mp2t ts;
- video/mp4 mp4;
- video/mpeg mpeg mpg;
- video/quicktime mov;
- video/webm webm;
- video/x-flv flv;
- video/x-m4v m4v;
- video/x-mng mng;
- video/x-ms-asf asx asf;
- video/x-ms-wmv wmv;
- video/x-msvideo avi;
-}
diff --git a/build/configs/nginx/includes/http-common.conf b/build/configs/nginx/includes/http-common.conf
deleted file mode 100644
index 3b285288cc..0000000000
--- a/build/configs/nginx/includes/http-common.conf
+++ /dev/null
@@ -1,44 +0,0 @@
-upstream docservice {
- server localhost:8000 max_fails=0 fail_timeout=0s;
-}
-
-upstream adminpanel {
- server localhost:9000 max_fails=0 fail_timeout=0s;
-}
-
-upstream example {
- server localhost:3000;
-}
-
-map $http_host $this_host {
- "" $host;
- default $http_host;
-}
-
-map $http_cloudfront_forwarded_proto:$http_x_forwarded_proto $the_scheme {
- default $scheme;
- "~^https?:.*" $http_cloudfront_forwarded_proto;
- "~^:https?$" $http_x_forwarded_proto;
-}
-
-map $http_x_forwarded_host $the_host {
- ~^([^,]+) $1;
- default $http_x_forwarded_host;
- "" $this_host;
-}
-
-map $http_upgrade $proxy_connection {
- websocket upgrade;
- default close;
-}
-
-map $http_x_forwarded_prefix $the_prefix {
- default $http_x_forwarded_prefix;
-}
-
-proxy_set_header Host $http_host;
-proxy_set_header Upgrade $http_upgrade;
-proxy_set_header Connection $proxy_connection;
-proxy_set_header X-Forwarded-Host $the_host;
-proxy_set_header X-Forwarded-Proto $the_scheme;
-proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
diff --git a/build/configs/onlyoffice/default.json b/build/configs/onlyoffice/default.json
deleted file mode 100644
index 7c503f69e8..0000000000
--- a/build/configs/onlyoffice/default.json
+++ /dev/null
@@ -1,635 +0,0 @@
-{
- "adminPanel": {
- "port": 9000
- },
- "statsd": {
- "useMetrics": false,
- "host": "localhost",
- "port": "8125",
- "prefix": "ds."
- },
- "aiSettings": {
- "actions": {},
- "models": [],
- "providers": {},
- "version": 3,
- "timeout": "5m",
- "allowedCorsOrigins": ["https://onlyoffice.github.io", "https://onlyoffice-plugins.github.io"],
- "proxy": ""
- },
- "log": {
- "filePath": "",
- "options": {
- "replaceConsole": true
- }
- },
- "runtimeConfig": {
- "filePath": "",
- "cache": {
- "stdTTL": 300,
- "checkperiod": 60,
- "useClones": false
- }
- },
- "queue": {
- "type": "rabbitmq",
- "visibilityTimeout": 300,
- "retentionPeriod": 900
- },
- "email": {
- "smtpServerConfiguration": {
- "host": "localhost",
- "port": 587,
- "auth": {
- "user": "",
- "pass": ""
- }
- },
- "connectionConfiguration": {
- "disableFileAccess": false,
- "disableUrlAccess": false
- },
- "contactDefaults": {
- "from": "from@example.com",
- "to": "to@example.com"
- }
- },
- "notification": {
- "rules": {
- "licenseExpirationWarning": {
- "enable": false,
- "transportType": ["email"],
- "template": {
- "title": "%s Docs license expiration warning",
- "body": "Attention! Your license is about to expire on %s.\nUpon reaching this date, you will no longer be entitled to receive personal technical support and install new Docs versions released after this date."
- },
- "policies": {
- "repeatInterval": "1d"
- }
- },
- "licenseExpirationError": {
- "enable": false,
- "transportType": ["email"],
- "template": {
- "title": "%s Docs license expiration warning",
- "body": "Attention! Your license expired on %s.\nYou are no longer entitled to receive personal technical support and install new Docs versions released after this date.\nPlease contact sales@onlyoffice.com to discuss license renewal."
- },
- "policies": {
- "repeatInterval": "1d"
- }
- },
- "licenseLimitEdit": {
- "enable": false,
- "transportType": ["email"],
- "template": {
- "title": "%s Docs license %s limit warning",
- "body": "Attention! You have reached %s%% of the %s limit set by your license."
- },
- "policies": {
- "repeatInterval": "1h"
- }
- },
- "licenseLimitLiveViewer": {
- "enable": false,
- "transportType": ["email"],
- "template": {
- "title": "%s Docs license %s limit warning",
- "body": "Attention! You have reached %s%% of the live viewer %s limit set by your license."
- },
- "policies": {
- "repeatInterval": "1h"
- }
- }
- }
- },
- "storage": {
- "name": "storage-fs",
- "fs": {
- "folderPath": "",
- "urlExpires": 900,
- "secretString": "verysecretstring"
- },
- "region": "",
- "endpoint": "http://localhost/s3",
- "bucketName": "cache",
- "storageFolderName": "files",
- "cacheFolderName": "data",
- "commandOptions": {
- "s3": {
- "putObject": {},
- "getObject": {},
- "copyObject": {
- "MetadataDirective": "COPY"
- },
- "listObjects": {
- "MaxKeys": 1000
- },
- "deleteObject": {}
- },
- "az": {
- "uploadData": {},
- "uploadStream": {},
- "download": {},
- "syncCopyFromURL": {},
- "listBlobsFlat": {
- "maxPageSize": 1000
- },
- "deleteBlob": {}
- }
- },
- "urlExpires": 604800,
- "accessKeyId": "",
- "secretAccessKey": "",
- "sslEnabled": false,
- "s3ForcePathStyle": true,
- "externalHost": "",
- "useDirectStorageUrls": false
- },
- "persistentStorage": {},
- "rabbitmq": {
- "url": "amqp://localhost:5672",
- "socketOptions": {},
- "exchangepubsub": {
- "name": "ds.pubsub",
- "options": {
- "durable": true
- }
- },
- "queuepubsub": {
- "name": "",
- "options": {
- "autoDelete": true,
- "exclusive": true,
- "arguments": {
- "x-queue-type": "classic"
- }
- }
- },
- "queueconverttask": {
- "name": "ds.converttask6",
- "options": {
- "durable": true,
- "maxPriority": 6,
- "arguments": {
- "x-queue-type": "classic"
- }
- }
- },
- "queueconvertresponse": {
- "name": "ds.convertresponse",
- "options": {
- "durable": true,
- "arguments": {
- "x-queue-type": "classic"
- }
- }
- },
- "exchangeconvertdead": {
- "name": "ds.exchangeconvertdead",
- "options": {
- "durable": true
- }
- },
- "queueconvertdead": {
- "name": "ds.convertdead",
- "options": {
- "durable": true,
- "arguments": {
- "x-queue-type": "classic"
- }
- }
- },
- "queuedelayed": {
- "name": "ds.delayed",
- "options": {
- "durable": true,
- "arguments": {
- "x-queue-type": "classic"
- }
- }
- }
- },
- "activemq": {
- "connectOptions": {
- "port": 5672,
- "host": "localhost",
- "reconnect": false
- },
- "queueconverttask": "ds.converttask",
- "queueconvertresponse": "ds.convertresponse",
- "queueconvertdead": "ActiveMQ.DLQ",
- "queuedelayed": "ds.delayed",
- "topicpubsub": "ds.pubsub"
- },
- "dnscache": {
- "enable": true,
- "ttl": 300,
- "cachesize": 1000
- },
- "openpgpjs": {
- "config": {},
- "encrypt": {
- "passwords": ["verysecretstring"]
- },
- "decrypt": {
- "passwords": ["verysecretstring"]
- }
- },
- "aesEncrypt": {
- "config": {
- "keyByteLength": 32,
- "saltByteLength": 64,
- "initializationVectorByteLength": 16,
- "iterationsByteLength": 5
- },
- "secret": "verysecretstring"
- },
- "bottleneck": {
- "getChanges": {}
- },
- "win-ca": {
- "inject": "+"
- },
- "wopi": {
- "enable": false,
- "host": "",
- "htmlTemplate": "../../web-apps/apps/api/wopi",
- "wopiZone": "external-http",
- "favIconUrlWord": "/web-apps/apps/documenteditor/main/resources/img/favicon.ico",
- "favIconUrlCell": "/web-apps/apps/spreadsheeteditor/main/resources/img/favicon.ico",
- "favIconUrlSlide": "/web-apps/apps/presentationeditor/main/resources/img/favicon.ico",
- "favIconUrlPdf": "/web-apps/apps/pdfeditor/main/resources/img/favicon.ico",
- "favIconUrlDiagram": "/web-apps/apps/visioeditor/main/resources/img/favicon.ico",
- "fileInfoBlockList": ["FileUrl"],
- "pdfView": [],
- "pdfEdit": [],
- "forms": [],
- "wordView": [],
- "wordEdit": [],
- "cellView": [],
- "cellEdit": [],
- "slideView": [],
- "slideEdit": [],
- "diagramView": [],
- "diagramEdit": [],
- "publicKey": "",
- "modulus": "",
- "exponent": 65537,
- "privateKey": "",
- "publicKeyOld": "",
- "modulusOld": "",
- "exponentOld": 65537,
- "privateKeyOld": "",
- "refreshLockInterval": "10m",
- "dummy": {
- "enable": false,
- "sampleFilePath": ""
- }
- },
- "tenants": {
- "baseDir": "",
- "baseDomain": "",
- "filenameConfig": "config.json",
- "filenameSecret": "secret.key",
- "filenameLicense": "license.lic",
- "defaultTenant": "localhost",
- "cache": {
- "stdTTL": 300,
- "checkperiod": 60,
- "useClones": false
- }
- },
- "externalRequest": {
- "directIfIn": {
- "allowList": [],
- "jwtToken": true
- },
- "action": {
- "allow": true,
- "blockPrivateIP": true,
- "proxyUrl": "",
- "proxyUser": {
- "username": "",
- "password": ""
- },
- "proxyHeaders": {}
- }
- },
- "services": {
- "CoAuthoring": {
- "server": {
- "port": 8000,
- "workerpercpu": 1,
- "mode": "development",
- "limits_tempfile_upload": 104857600,
- "limits_image_size": 26214400,
- "limits_image_download_timeout": {
- "connectionAndInactivity": "2m",
- "wholeCycle": "2m"
- },
- "callbackRequestTimeout": {
- "connectionAndInactivity": "10m",
- "wholeCycle": "10m"
- },
- "healthcheckfilepath": "../public/healthcheck.docx",
- "savetimeoutdelay": 5000,
- "edit_singleton": false,
- "forgottenfiles": "forgotten",
- "forgottenfilesname": "output",
- "maxRequestChanges": 20000,
- "openProtectedFile": true,
- "isAnonymousSupport": true,
- "editorDataStorage": "editorDataMemory",
- "editorStatStorage": "",
- "assemblyFormatAsOrigin": true,
- "newFileTemplate": "../../document-templates/new",
- "documentFormatsFile": "../../document-formats/onlyoffice-docs-formats.json",
- "downloadFileAllowExt": ["pdf", "xlsx"],
- "tokenRequiredParams": true,
- "forceSaveUsingButtonWithoutChanges": false
- },
- "requestDefaults": {
- "headers": {
- "User-Agent": "Node.js/6.13",
- "Connection": "Keep-Alive"
- },
- "rejectUnauthorized": true
- },
- "autoAssembly": {
- "enable": false,
- "interval": "5m",
- "step": "1m"
- },
- "utils": {
- "utils_common_fontdir": "null",
- "utils_fonts_search_patterns": "*.ttf;*.ttc;*.otf",
- "limits_image_types_upload": "jpg;jpeg;jpe;png;gif;bmp;svg;tiff;tif;webp;heic;heif;avif",
- "limits_document_types_upload": "xlsx"
- },
- "sql": {
- "type": "postgres",
- "tableChanges": "doc_changes",
- "tableResult": "task_result",
- "dbHost": "localhost",
- "dbPort": 5432,
- "dbName": "onlyoffice",
- "dbUser": "onlyoffice",
- "dbPass": "onlyoffice",
- "charset": "utf8",
- "connectionlimit": 10,
- "max_allowed_packet": 1048575,
- "pgPoolExtraOptions": {
- "idleTimeoutMillis": 30000,
- "maxLifetimeSeconds ": 60000,
- "statement_timeout ": 60000,
- "query_timeout ": 60000,
- "connectionTimeoutMillis": 60000
- },
- "damengExtraOptions": {
- "columnNameUpperCase": false,
- "columnNameCase": "lower",
- "connectTimeout": 60000,
- "loginEncrypt": false,
- "localTimezone": 0,
- "poolTimeout": 60,
- "socketTimeout": 60000,
- "queueTimeout": 60000
- },
- "oracleExtraOptions": {
- "thin": true,
- "connectTimeout": 60
- },
- "msSqlExtraOptions": {
- "options": {
- "encrypt": false,
- "trustServerCertificate": true
- },
- "pool": {
- "idleTimeoutMillis": 30000
- }
- },
- "mysqlExtraOptions": {
- "connectTimeout": 60000,
- "queryTimeout": 60000
- }
- },
- "redis": {
- "name": "redis",
- "prefix": "ds:",
- "host": "127.0.0.1",
- "port": 6379,
- "options": {},
- "optionsCluster": {},
- "iooptions": {
- "lazyConnect": true
- },
- "iooptionsClusterNodes": [],
- "iooptionsClusterOptions": {
- "lazyConnect": true
- }
- },
- "pubsub": {
- "maxChanges": 1000
- },
- "expire": {
- "saveLock": 60,
- "presence": 300,
- "locks": 604800,
- "changeindex": 86400,
- "lockDoc": 30,
- "message": 86400,
- "lastsave": 604800,
- "forcesave": 604800,
- "forcesaveLock": 5000,
- "saved": 3600,
- "documentsCron": "0 */2 * * * *",
- "files": 86400,
- "filesCron": "00 00 */1 * * *",
- "filesremovedatonce": 100,
- "sessionidle": "1h",
- "sessionabsolute": "30d",
- "sessionclosecommand": "2m",
- "pemStdTTL": "1h",
- "pemCheckPeriod": "10m",
- "updateVersionStatus": "5m",
- "monthUniqueUsers": "1y"
- },
- "ipfilter": {
- "rules": [{"address": "*", "allowed": true}],
- "useforrequest": false,
- "errorcode": 403
- },
- "request-filtering-agent": {
- "allowPrivateIPAddress": false,
- "allowMetaIPAddress": false
- },
- "secret": {
- "browser": {"string": "secret", "file": ""},
- "inbox": {"string": "secret", "file": ""},
- "outbox": {"string": "secret", "file": ""},
- "session": {"string": "secret", "file": ""}
- },
- "token": {
- "enable": {
- "browser": false,
- "request": {
- "inbox": false,
- "outbox": false
- }
- },
- "browser": {
- "secretFromInbox": true
- },
- "inbox": {
- "header": "Authorization",
- "prefix": "Bearer ",
- "inBody": false
- },
- "outbox": {
- "header": "Authorization",
- "prefix": "Bearer ",
- "algorithm": "HS256",
- "expires": "5m",
- "inBody": false,
- "urlExclusionRegex": ""
- },
- "session": {
- "algorithm": "HS256",
- "expires": "30d"
- },
- "verifyOptions": {
- "clockTolerance": 60
- }
- },
- "plugins": {
- "uri": "/sdkjs-plugins",
- "autostart": []
- },
- "themes": {
- "uri": "/web-apps/apps/common/main/resources/themes"
- },
- "editor": {
- "spellcheckerUrl": "",
- "reconnection": {
- "attempts": 50,
- "delay": "2s"
- },
- "binaryChanges": false,
- "websocketMaxPayloadSize": "1.5MB",
- "maxChangesSize": "150MB"
- },
- "sockjs": {
- "sockjs_url": "",
- "disable_cors": true,
- "websocket": true
- },
- "socketio": {
- "connection": {
- "path": "/doc/",
- "serveClient": false,
- "pingTimeout": 20000,
- "pingInterval": 25000,
- "maxHttpBufferSize": 1e8
- }
- },
- "callbackBackoffOptions": {
- "retries": 3,
- "timeout": {
- "factor": 2,
- "minTimeout": 1000,
- "maxTimeout": 2147483647,
- "randomize": false
- },
- "httpStatus": "429,500-599"
- }
- }
- },
- "license": {
- "license_file": "",
- "warning_limit_percents": 70,
- "packageType": 0,
- "warning_license_expiration": "30d"
- },
- "FileConverter": {
- "converter": {
- "maxDownloadBytes": 104857600,
- "downloadTimeout": {
- "connectionAndInactivity": "2m",
- "wholeCycle": "2m"
- },
- "downloadAttemptMaxCount": 3,
- "downloadAttemptDelay": 1000,
- "maxprocesscount": 1,
- "fontDir": "null",
- "presentationThemesDir": "null",
- "x2tPath": "null",
- "docbuilderPath": "null",
- "signingKeyStorePath": "",
- "signing": {
- "keyStorePath": "",
- "meta": {
- "reason": "",
- "name": "",
- "location": "",
- "contactInfo": ""
- },
- "awsKms": {
- "endpoint": "",
- "keyId": "",
- "accessKeyId": "",
- "secretAccessKey": ""
- },
- "csc": {
- "baseUrl": "",
- "tokenUrl": "",
- "clientId": "",
- "clientSecret": "",
- "grantType": "",
- "clientAuth": "",
- "tokenBodyFormat": "",
- "username": "",
- "password": "",
- "credentialId": "",
- "clientData": "",
- "scope": "service",
- "audience": ""
- }
- },
- "args": "",
- "spawnOptions": {},
- "errorfiles": "",
- "streamWriterBufferSize": 8388608,
- "maxRedeliveredCount": 2,
- "inputLimits": [
- {
- "type": "docx;dotx;docm;dotm",
- "zip": {
- "uncompressed": "50MB",
- "template": "*.xml"
- }
- },
- {
- "type": "xlsx;xltx;xlsm;xltm",
- "zip": {
- "uncompressed": "300MB",
- "template": "*.xml"
- }
- },
- {
- "type": "pptx;ppsx;potx;pptm;ppsm;potm",
- "zip": {
- "uncompressed": "50MB",
- "template": "*.xml"
- }
- },
- {
- "type": "vsdx;vstx;vssx;vsdm;vstm;vssm",
- "zip": {
- "uncompressed": "50MB",
- "template": "*.xml"
- }
- }
- ]
- }
- }
-}
diff --git a/build/configs/onlyoffice/development-linux.json b/build/configs/onlyoffice/development-linux.json
deleted file mode 100644
index 66bc942819..0000000000
--- a/build/configs/onlyoffice/development-linux.json
+++ /dev/null
@@ -1,87 +0,0 @@
-{
- "log": {
- "filePath": "/etc/onlyoffice/documentserver/log4js/development.json"
- },
- "runtimeConfig": {
- "filePath": "/var/www/onlyoffice/documentserver/../Data/runtime.json"
- },
- "storage": {
- "fs": {
- "folderPath": "/var/lib/onlyoffice/documentserver/App_Data/cache/files"
- }
- },
- "wopi": {
- "enable": true
- },
- "services": {
- "CoAuthoring": {
- "server": {
- "newFileTemplate": "/var/www/onlyoffice/documentserver/document-templates/new",
- "static_content": {
- "/fonts": {
- "path": "/var/www/onlyoffice/documentserver/fonts",
- "options": {"maxAge": "7d"}
- },
- "/sdkjs": {
- "path": "/var/www/onlyoffice/documentserver/sdkjs",
- "options": {"maxAge": "7d"}
- },
- "/web-apps": {
- "path": "/var/www/onlyoffice/documentserver/web-apps",
- "options": {"maxAge": "7d"}
- },
- "/welcome": {
- "path": "/var/www/onlyoffice/documentserver/server/welcome",
- "options": {"maxAge": "7d"}
- },
- "/info": {
- "path": "/var/www/onlyoffice/documentserver/server/info",
- "options": {
- "maxAge": 0,
- "cacheControl": "public, no-cache, must-revalidate",
- "etag": true,
- "lastModified": true
- }
- },
- "/sdkjs-plugins": {
- "path": "/var/www/onlyoffice/documentserver/sdkjs-plugins",
- "options": {"maxAge": "7d"}
- },
- "/dictionaries": {
- "path": "/var/www/onlyoffice/documentserver/dictionaries",
- "options": {"maxAge": "7d"}
- }
- }
- },
- "request-filtering-agent": {
- "allowPrivateIPAddress": true,
- "allowMetaIPAddress": true
- },
- "utils": {
- "utils_common_fontdir": "/usr/share/fonts",
- "limits_document_types_upload": "xlsx"
- },
- "sockjs": {
- "sockjs_url": "/web-apps/vendor/sockjs/sockjs.min.js"
- }
- }
- },
- "license": {
- "license_file": "/var/www/onlyoffice/documentserver/../Data/license.lic",
- "warning_limit_percents": 70,
- "packageType": 0
- },
- "FileConverter": {
- "converter": {
- "fontDir": "/usr/share/fonts",
- "presentationThemesDir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes",
- "x2tPath": "/var/www/onlyoffice/documentserver/server/FileConverter/bin/x2t",
- "docbuilderPath": "/var/www/onlyoffice/documentserver/server/FileConverter/bin/docbuilder"
- }
- },
- "SpellChecker": {
- "server": {
- "dictDir": "/var/www/onlyoffice/documentserver/dictionaries"
- }
- }
-}
diff --git a/build/configs/onlyoffice/local.json b/build/configs/onlyoffice/local.json
deleted file mode 100644
index b5b83c7944..0000000000
--- a/build/configs/onlyoffice/local.json
+++ /dev/null
@@ -1,62 +0,0 @@
-{
- "runtimeConfig": {
- "filePath": "/var/www/onlyoffice/documentserver/server/Common/config/runtime.json"
- },
- "log": {
- "filePath": "/var/www/onlyoffice/documentserver/log4js.json",
- "options": {
- "replaceConsole": true
- }
- },
- "services": {
- "CoAuthoring": {
- "sql": {
- "type": "postgres",
- "dbHost": "localhost",
- "dbPort": "5432",
- "dbName": "onlyoffice",
- "dbUser": "onlyoffice",
- "dbPass": "onlyoffice"
- },
- "token": {
- "enable": {
- "request": {
- "inbox": true,
- "outbox": true
- },
- "browser": true
- },
- "inbox": {
- "header": "Authorization",
- "inBody": false
- },
- "outbox": {
- "header": "Authorization",
- "inBody": false
- }
- },
- "secret": {
- "browser": {
- "string": "secret"
- },
- "inbox": {
- "string": "secret"
- },
- "outbox": {
- "string": "secret"
- },
- "session": {
- "string": "secret"
- }
- },
- "requestDefaults": {
- "rejectUnauthorized": true
- },
- "request-filtering-agent": {
- "allowPrivateIPAddress": true,
- "allowMetaIPAddress": true
- }
-
- }
- }
-}
diff --git a/build/configs/onlyoffice/log4js/development.json b/build/configs/onlyoffice/log4js/development.json
deleted file mode 100644
index ff1d03265c..0000000000
--- a/build/configs/onlyoffice/log4js/development.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "appenders": {
- "default": {
- "type": "console",
- "layout": {
- "type": "patternWithTokens",
- "pattern": "%[[%d] [%p] [%X{TENANT}] [%X{DOCID}] [%X{USERID}]%x{usid} %c -%] %.10000m"
- }
- }
- },
- "categories": {
- "default": {"appenders": ["default"], "level": "ALL"}
- }
-}
diff --git a/build/configs/postgres/createdb.sql b/build/configs/postgres/createdb.sql
deleted file mode 100644
index 2c1cf1cdb0..0000000000
--- a/build/configs/postgres/createdb.sql
+++ /dev/null
@@ -1,73 +0,0 @@
---
--- Create schema onlyoffice
---
-
--- CREATE DATABASE onlyoffice ENCODING = 'UTF8' CONNECTION LIMIT = -1;
-
--- ----------------------------
--- Table structure for doc_changes
--- ----------------------------
-CREATE TABLE IF NOT EXISTS "doc_changes" (
-"tenant" varchar(255) COLLATE "default" NOT NULL,
-"id" varchar(255) COLLATE "default" NOT NULL,
-"change_id" int4 NOT NULL,
-"user_id" varchar(255) COLLATE "default" NOT NULL,
-"user_id_original" varchar(255) COLLATE "default" NOT NULL,
-"user_name" varchar(255) COLLATE "default" NOT NULL,
-"change_data" text COLLATE "default" NOT NULL,
-"change_date" timestamp without time zone NOT NULL,
-PRIMARY KEY ("tenant", "id", "change_id")
-)
-WITH (OIDS=FALSE);
-
--- ----------------------------
--- Table structure for task_result
--- ----------------------------
-CREATE TABLE IF NOT EXISTS "task_result" (
-"tenant" varchar(255) COLLATE "default" NOT NULL,
-"id" varchar(255) COLLATE "default" NOT NULL,
-"status" int2 NOT NULL,
-"status_info" int4 NOT NULL,
-"created_at" timestamp without time zone DEFAULT NOW(),
-"last_open_date" timestamp without time zone NOT NULL,
-"user_index" int4 NOT NULL DEFAULT 1,
-"change_id" int4 NOT NULL DEFAULT 0,
-"callback" text COLLATE "default" NOT NULL,
-"baseurl" text COLLATE "default" NOT NULL,
-"password" text COLLATE "default" NULL,
-"additional" text COLLATE "default" NULL,
-PRIMARY KEY ("tenant", "id")
-)
-WITH (OIDS=FALSE);
-
-CREATE OR REPLACE FUNCTION merge_db(_tenant varchar(255), _id varchar(255), _status int2, _status_info int4, _last_open_date timestamp without time zone, _user_index int4, _change_id int4, _callback text, _baseurl text, OUT isupdate char(5), OUT userindex int4) AS
-$$
-DECLARE
- t_var "task_result"."user_index"%TYPE;
-BEGIN
- LOOP
- -- first try to update the key
- -- note that "a" must be unique
- IF ((_callback <> '') IS TRUE) AND ((_baseurl <> '') IS TRUE) THEN
- UPDATE "task_result" SET last_open_date=_last_open_date, user_index=user_index+1,callback=_callback,baseurl=_baseurl WHERE tenant = _tenant AND id = _id RETURNING user_index into userindex;
- ELSE
- UPDATE "task_result" SET last_open_date=_last_open_date, user_index=user_index+1 WHERE tenant = _tenant AND id = _id RETURNING user_index into userindex;
- END IF;
- IF found THEN
- isupdate := 'true';
- RETURN;
- END IF;
- -- not there, so try to insert the key
- -- if someone else inserts the same key concurrently,
- -- we could get a unique-key failure
- BEGIN
- INSERT INTO "task_result"(tenant, id, status, status_info, last_open_date, user_index, change_id, callback, baseurl) VALUES(_tenant, _id, _status, _status_info, _last_open_date, _user_index, _change_id, _callback, _baseurl) RETURNING user_index into userindex;
- isupdate := 'false';
- RETURN;
- EXCEPTION WHEN unique_violation THEN
- -- do nothing, and loop to try the UPDATE again
- END;
- END LOOP;
-END;
-$$
-LANGUAGE plpgsql;
diff --git a/build/configs/supervisor/ds-adminpanel.conf b/build/configs/supervisor/ds-adminpanel.conf
index cf08a5815b..f8ee8f142c 100644
--- a/build/configs/supervisor/ds-adminpanel.conf
+++ b/build/configs/supervisor/ds-adminpanel.conf
@@ -1,12 +1,12 @@
[program:adminpanel]
-command=/var/www/onlyoffice/documentserver/server/AdminPanel/server/adminpanel
-directory=/var/www/onlyoffice/documentserver/server/AdminPanel
+command=/var/www/euro-office/documentserver/server/AdminPanel/server/adminpanel
+directory=/var/www/euro-office/documentserver/server/AdminPanel
user=ds
-environment=NODE_ENV=development-linux,NODE_CONFIG_DIR=/etc/onlyoffice/documentserver,NODE_DISABLE_COLORS=1,APPLICATION_NAME=onlyoffice,LD_LIBRARY_PATH=/var/www/onlyoffice/documentserver/server/FileConverter/bin:/var/www/onlyoffice/documentserver/server/FileConverter/lib
-stdout_logfile=/var/log/onlyoffice/documentserver/adminpanel/out.log
+environment=NODE_ENV=production-linux,NODE_CONFIG_DIR=/etc/euro-office/documentserver,NODE_DISABLE_COLORS=1,APPLICATION_NAME=onlyoffice,LD_LIBRARY_PATH=/var/www/euro-office/documentserver/server/FileConverter/bin:/var/www/euro-office/documentserver/server/FileConverter/lib
+stdout_logfile=/var/log/euro-office/documentserver/adminpanel/out.log
stdout_logfile_backups=0
stdout_logfile_maxbytes=0
-stderr_logfile=/var/log/onlyoffice/documentserver/adminpanel/err.log
+stderr_logfile=/var/log/euro-office/documentserver/adminpanel/err.log
stderr_logfile_backups=0
stderr_logfile_maxbytes=0
autostart=false
diff --git a/build/configs/supervisor/ds-converter.conf b/build/configs/supervisor/ds-converter.conf
index 0c55a982c4..3816aedf30 100644
--- a/build/configs/supervisor/ds-converter.conf
+++ b/build/configs/supervisor/ds-converter.conf
@@ -1,12 +1,12 @@
[program:converter]
-command=/var/www/onlyoffice/documentserver/server/FileConverter/converter
-directory=/var/www/onlyoffice/documentserver/server/FileConverter
+command=/var/www/euro-office/documentserver/server/FileConverter/converter
+directory=/var/www/euro-office/documentserver/server/FileConverter
user=ds
-environment=NODE_ENV=development-linux,NODE_CONFIG_DIR=/etc/onlyoffice/documentserver,NODE_DISABLE_COLORS=1,APPLICATION_NAME=onlyoffice,LD_LIBRARY_PATH=/var/www/onlyoffice/documentserver/server/FileConverter/bin:/var/www/onlyoffice/documentserver/server/FileConverter/lib
-stdout_logfile=/var/log/onlyoffice/documentserver/converter/out.log
+environment=NODE_ENV=production-linux,NODE_CONFIG_DIR=/etc/euro-office/documentserver,NODE_DISABLE_COLORS=1,APPLICATION_NAME=onlyoffice,LD_LIBRARY_PATH=/var/www/euro-office/documentserver/server/FileConverter/bin:/var/www/euro-office/documentserver/server/FileConverter/lib
+stdout_logfile=/var/log/euro-office/documentserver/converter/out.log
stdout_logfile_backups=0
stdout_logfile_maxbytes=0
-stderr_logfile=/var/log/onlyoffice/documentserver/converter/err.log
+stderr_logfile=/var/log/euro-office/documentserver/converter/err.log
stderr_logfile_backups=0
stderr_logfile_maxbytes=0
autostart=true
diff --git a/build/configs/supervisor/ds-docservice.conf b/build/configs/supervisor/ds-docservice.conf
index 9160edfc01..6ce15d40ea 100644
--- a/build/configs/supervisor/ds-docservice.conf
+++ b/build/configs/supervisor/ds-docservice.conf
@@ -1,12 +1,12 @@
[program:docservice]
-command=/var/www/onlyoffice/documentserver/server/DocService/docservice
-directory=/var/www/onlyoffice/documentserver/server/DocService
+command=/var/www/euro-office/documentserver/server/DocService/docservice
+directory=/var/www/euro-office/documentserver/server/DocService
user=ds
-environment=NODE_ENV=development-linux,NODE_CONFIG_DIR=/etc/onlyoffice/documentserver,NODE_DISABLE_COLORS=1,APPLICATION_NAME=onlyoffice,LD_LIBRARY_PATH=/var/www/onlyoffice/documentserver/server/FileConverter/bin:/var/www/onlyoffice/documentserver/server/FileConverter/lib
-stdout_logfile=/var/log/onlyoffice/documentserver/docservice/out.log
+environment=NODE_ENV=production-linux,NODE_CONFIG_DIR=/etc/euro-office/documentserver,NODE_DISABLE_COLORS=1,APPLICATION_NAME=onlyoffice,LD_LIBRARY_PATH=/var/www/euro-office/documentserver/server/FileConverter/bin:/var/www/euro-office/documentserver/server/FileConverter/lib
+stdout_logfile=/var/log/euro-office/documentserver/docservice/out.log
stdout_logfile_backups=0
stdout_logfile_maxbytes=0
-stderr_logfile=/var/log/onlyoffice/documentserver/docservice/err.log
+stderr_logfile=/var/log/euro-office/documentserver/docservice/err.log
stderr_logfile_backups=0
stderr_logfile_maxbytes=0
autostart=true
diff --git a/build/configs/supervisor/ds-example.conf b/build/configs/supervisor/ds-example.conf
index 11fbdd261f..3a03ea9c3e 100644
--- a/build/configs/supervisor/ds-example.conf
+++ b/build/configs/supervisor/ds-example.conf
@@ -1,12 +1,12 @@
[program:ds-example]
-command=/var/www/onlyoffice/documentserver-example/example
-directory=/var/www/onlyoffice/documentserver-example/
+command=/var/www/euro-office/documentserver-example/example
+directory=/var/www/euro-office/documentserver-example/
user=ds
-environment=NODE_ENV=development-linux,NODE_CONFIG_DIR=/etc/onlyoffice/documentserver-example,NODE_DISABLE_COLORS=1,APPLICATION_NAME=onlyoffice
-stdout_logfile=/var/log/onlyoffice/documentserver/ds-example_out.log
+environment=NODE_ENV=production-linux,NODE_CONFIG_DIR=/etc/euro-office/documentserver-example,NODE_DISABLE_COLORS=1,APPLICATION_NAME=onlyoffice
+stdout_logfile=/var/log/euro-office/documentserver/ds-example_out.log
stdout_logfile_backups=0
stdout_logfile_maxbytes=0
-stderr_logfile=/var/log/onlyoffice/documentserver/ds-example_err.log
+stderr_logfile=/var/log/euro-office/documentserver/ds-example_err.log
stderr_logfile_backups=0
stderr_logfile_maxbytes=0
autostart=false
diff --git a/build/configs/supervisor/ds-metrics.conf b/build/configs/supervisor/ds-metrics.conf
index 98fabc7c09..fe18341c40 100644
--- a/build/configs/supervisor/ds-metrics.conf
+++ b/build/configs/supervisor/ds-metrics.conf
@@ -1,12 +1,12 @@
[program:metrics]
-command=/var/www/onlyoffice/documentserver/server/Metrics/metrics ./config/config.js
-directory=/var/www/onlyoffice/documentserver/server/Metrics
+command=/var/www/euro-office/documentserver/server/Metrics/metrics ./config/config.js
+directory=/var/www/euro-office/documentserver/server/Metrics
user=ds
-environment=NODE_DISABLE_COLORS=1,LD_LIBRARY_PATH=/var/www/onlyoffice/documentserver/server/FileConverter/bin:/var/www/onlyoffice/documentserver/server/FileConverter/lib
-stdout_logfile=/var/log/onlyoffice/documentserver/metrics/out.log
+environment=NODE_DISABLE_COLORS=1,LD_LIBRARY_PATH=/var/www/euro-office/documentserver/server/FileConverter/bin:/var/www/euro-office/documentserver/server/FileConverter/lib
+stdout_logfile=/var/log/euro-office/documentserver/metrics/out.log
stdout_logfile_backups=0
stdout_logfile_maxbytes=0
-stderr_logfile=/var/log/onlyoffice/documentserver/metrics/err.log
+stderr_logfile=/var/log/euro-office/documentserver/metrics/err.log
stderr_logfile_backups=0
stderr_logfile_maxbytes=0
autostart=true
diff --git a/build/docker-bake.hcl b/build/docker-bake.hcl
index b5534a239c..4f0fd67c4e 100644
--- a/build/docker-bake.hcl
+++ b/build/docker-bake.hcl
@@ -17,7 +17,7 @@ variable "BUILD_ROOT" {
}
variable "PACKAGE_BASE" {
- default = "finalubuntu"
+ default = "docsrv-build"
}
variable "NUGET_CACHE" {
@@ -41,7 +41,7 @@ variable "CACHE_BUST" {
# ──────────────────────────────────────────────
group "default" {
- targets = ["documentserver"]
+ targets = ["docker"]
}
group "develop" {
@@ -125,16 +125,12 @@ target "example" {
cache-to = ["type=local,dest=/tmp/${REGISTRY}/example,mode=max"]
}
-# ──────────────────────────────────────────────
-# BUILD TARGETS
-# ──────────────────────────────────────────────
-
-target "documentserver" {
+target "bundle" {
inherits = ["_common"]
context = ".."
- dockerfile = "./build/.docker/docserver.bake.Dockerfile"
- target = "finalubuntu"
- tags = ["${REGISTRY}/documentserver:${TAG}"]
+ dockerfile = "./build/.docker/bundle.bake.Dockerfile"
+ target = "bundle"
+ tags = ["${REGISTRY}/bundle:${TAG}"]
contexts = {
core = "target:core"
server = "target:server"
@@ -142,26 +138,8 @@ target "documentserver" {
web-apps = "target:web-apps"
example = "target:example"
}
- cache-from = ["type=local,src=/tmp/${REGISTRY}/documentserver"]
- cache-to = ["type=local,dest=/tmp/${REGISTRY}/documentserver,mode=max"]
-}
-
-target "develop" {
- inherits = ["_common"]
- context = ".."
- dockerfile = "./build/.docker/develop.bake.Dockerfile"
- target = "develop"
- tags = ["${REGISTRY}/documentserver:${TAG}-dev"]
- contexts = {
- finalubuntu = "target:documentserver"
- core = "target:core"
- server = "target:server"
- sdkjs = "target:sdkjs"
- web-apps = "target:web-apps"
- example = "target:example"
- }
- cache-from = ["type=local,src=/tmp/${REGISTRY}/develop"]
- cache-to = ["type=local,dest=/tmp/${REGISTRY}/develop,mode=max"]
+ cache-from = ["type=local,src=/tmp/${REGISTRY}/bundle"]
+ cache-to = ["type=local,dest=/tmp/${REGISTRY}/bundle,mode=max"]
}
# ──────────────────────────────────────────────
@@ -175,16 +153,41 @@ target "packages" {
target = "packages" # points to the FROM scratch stage
tags = ["${REGISTRY}/packages:${TAG}"]
contexts = {
- finalubuntu = "target:documentserver"
- core = "target:core"
- server = "target:server"
- sdkjs = "target:sdkjs"
- web-apps = "target:web-apps"
- example = "target:example"
+ bundle = "target:bundle"
}
# Export the filesystem directly to a local directory instead of an image
output = ["type=local,dest=./deploy/packages"]
cache-from = ["type=local,src=/tmp/${REGISTRY}/packages"] # reuses builder cache
+}
+
+# ──────────────────────────────────────────────
+# BUILD TARGETS
+# ──────────────────────────────────────────────
+
+target "docker" {
+ inherits = ["_common"]
+ context = ".."
+ dockerfile = "./build/.docker/docker.bake.Dockerfile"
+ target = "finalubuntu"
+ tags = ["${REGISTRY}/documentserver:${TAG}"]
+ contexts = {
+ packages = "target:packages"
+ }
+ cache-from = ["type=local,src=/tmp/${REGISTRY}/documentserver"]
+ cache-to = ["type=local,dest=/tmp/${REGISTRY}/documentserver,mode=max"]
+}
+
+target "develop" {
+ inherits = ["_common"]
+ context = ".."
+ dockerfile = "./build/.docker/develop.bake.Dockerfile"
+ target = "develop"
+ tags = ["${REGISTRY}/documentserver:${TAG}-dev"]
+ contexts = {
+ finalubuntu = "target:docker"
+ }
+ cache-from = ["type=local,src=/tmp/${REGISTRY}/develop"]
+ cache-to = ["type=local,dest=/tmp/${REGISTRY}/develop,mode=max"]
}
\ No newline at end of file
diff --git a/build/scripts/build-packages.sh b/build/scripts/build-packages.sh
deleted file mode 100644
index 3f5a280054..0000000000
--- a/build/scripts/build-packages.sh
+++ /dev/null
@@ -1,94 +0,0 @@
-#!/usr/bin/env bash
-# build-packages.sh — runs inside the Docker `package` stage.
-# Populates the build output directory from the finalubuntu-installed files,
-# then invokes the upstream document-server-package Makefile to produce
-# .deb and .rpm packages, which are placed in /packages/.
-set -euo pipefail
-
-# ---------------------------------------------------------------------------
-# Detect architecture → upstream Makefile TARGET convention
-# ---------------------------------------------------------------------------
-case "$(uname -m)" in
- x86_64) TARGET="linux_64" ;;
- aarch64) TARGET="linux_arm64" ;;
- *) echo "ERROR: Unsupported architecture: $(uname -m)" >&2; exit 1 ;;
-esac
-
-PRODUCT_VERSION="${PRODUCT_VERSION:-0.0.0}"
-BUILD_NUMBER="${BUILD_NUMBER:-0}"
-
-# The upstream Makefile is invoked from /document-server-package/.
-# BUILD_OUTPUT_DIR=../build/package/out → /build/package/out/ (absolute)
-OUT_BASE="/build/package/out"
-OUT_DIR="${OUT_BASE}/${TARGET}/euro-office/documentserver"
-EXAMPLE_OUT="${OUT_BASE}/${TARGET}/euro-office/documentserver-example"
-
-echo "==> [build-packages] TARGET=${TARGET}"
-echo "==> [build-packages] PRODUCT_VERSION=${PRODUCT_VERSION}, BUILD_NUMBER=${BUILD_NUMBER}"
-
-# ---------------------------------------------------------------------------
-# 1. Populate documentserver output directory
-# ---------------------------------------------------------------------------
-echo "==> Setting up output directory: ${OUT_DIR}"
-mkdir -p "${OUT_DIR}"
-cp -a /var/www/onlyoffice/documentserver/. "${OUT_DIR}/"
-
-# Remove the Docker-specific runtime marker (upstream Makefile doesn't expect it)
-rm -f "${OUT_DIR}/server/Common/config/runtime.json"
-# Remove the Docker-generated log4js root file
-rm -f "${OUT_DIR}/log4js.json"
-
-# ---------------------------------------------------------------------------
-# 2. Overlay original source configs (unprocessed)
-# The upstream Makefile runs sed transforms on these; they must NOT be
-# the Docker-specific pre-processed versions from build/configs/onlyoffice/.
-# ---------------------------------------------------------------------------
-echo "==> Overlaying original server source configs"
-mkdir -p "${OUT_DIR}/server/Common/config/log4js"
-cp -a /server-src/Common/config/. "${OUT_DIR}/server/Common/config/"
-# Ensure runtime.json is absent after the overlay
-rm -f "${OUT_DIR}/server/Common/config/runtime.json"
-
-# ---------------------------------------------------------------------------
-# 3. Schema files (upstream runs sed -i on them for DB renaming)
-# ---------------------------------------------------------------------------
-echo "==> Copying schema files"
-cp -a /server-src/schema/. "${OUT_DIR}/server/schema/"
-
-# ---------------------------------------------------------------------------
-# 4. License files (upstream Makefile copies and renames these)
-# ---------------------------------------------------------------------------
-echo "==> Copying license files"
-cp -f /server-src/LICENSE.txt "${OUT_DIR}/server/"
-cp -f /server-src/3rd-Party.txt "${OUT_DIR}/server/"
-cp -a /server-src/license/. "${OUT_DIR}/server/license/"
-
-# ---------------------------------------------------------------------------
-# 5. Populate documentserver-example output directory
-# ---------------------------------------------------------------------------
-echo "==> Setting up example output directory: ${EXAMPLE_OUT}"
-mkdir -p "${EXAMPLE_OUT}/config"
-cp -f /var/www/onlyoffice/documentserver-example/example "${EXAMPLE_OUT}/"
-cp -f /etc/onlyoffice/documentserver-example/*.json "${EXAMPLE_OUT}/config/" 2>/dev/null || true
-
-# ---------------------------------------------------------------------------
-# 6. Run upstream Makefile
-# ---------------------------------------------------------------------------
-echo "==> Running upstream packaging Makefile (deb rpm)"
-cd /document-server-package
-make deb rpm \
- BUILD_OUTPUT_DIR="${OUT_BASE}" \
- PRODUCT_VERSION="${PRODUCT_VERSION}" \
- BUILD_NUMBER="${BUILD_NUMBER}"
-
-# ---------------------------------------------------------------------------
-# 7. Collect output packages
-# ---------------------------------------------------------------------------
-echo "==> Collecting packages"
-mkdir -p /packages
-find /document-server-package/deb -name "*.deb" -exec cp -v {} /packages/ \;
-find /document-server-package/rpm/builddir -name "*.rpm" -exec cp -v {} /packages/ \;
-
-echo ""
-echo "==> Done. Packages:"
-ls -lh /packages/
diff --git a/build/scripts/documentserver-flush-cache.sh b/build/scripts/documentserver-flush-cache.sh
deleted file mode 100755
index 77d9f032c6..0000000000
--- a/build/scripts/documentserver-flush-cache.sh
+++ /dev/null
@@ -1,50 +0,0 @@
-#!/bin/sh
-
-while [ "$1" != "" ]; do
- case $1 in
-
- -h | --hash )
- if [ "$2" != "" ]; then
- HASH=$2
- shift
- fi
- ;;
-
- -r | --restart )
- if [ "$2" != "" ]; then
- RESTART_CONDITION=$2
- shift
- fi
- ;;
-
- esac
- shift
-done
-
-HASH=${HASH:-$(date +'%Y.%m.%d' | openssl md5 | awk '{print $2}')}
-
-# Save the hash to a variable in the configuration file
-echo "set \$cache_tag \"$HASH\";" > /etc/nginx/includes/ds-cache.conf
-
-API_PATH="/var/www/onlyoffice/documentserver/web-apps/apps/api/documents/api.js"
-# Only copy template if it exists, otherwise create from existing api.js if available
-if [ -f "${API_PATH}.tpl" ]; then
- cp -f ${API_PATH}.tpl ${API_PATH}
-elif [ -f "$API_PATH" ]; then
- # If no template, use the existing file (first run scenario)
- cp -f $API_PATH ${API_PATH}.tpl 2>/dev/null || true
-fi
-sed -i "s/{{HASH_POSTFIX}}/${HASH}/g" ${API_PATH} 2>/dev/null || true
-# Only chown if ds user exists
-if id -u ds > /dev/null 2>&1; then
- chown ds:ds ${API_PATH}
-fi
-rm -f ${API_PATH}.gz
-
-if [ "$RESTART_CONDITION" != "false" ]; then
- if (pgrep -x "systemd" > /dev/null) && systemctl is-active --quiet nginx; then
- systemctl reload nginx
- elif service nginx status > /dev/null 2>&1; then
- service nginx reload
- fi
-fi
diff --git a/build/scripts/documentserver-generate-allfonts.sh b/build/scripts/documentserver-generate-allfonts.sh
deleted file mode 100755
index 14b0dba3f1..0000000000
--- a/build/scripts/documentserver-generate-allfonts.sh
+++ /dev/null
@@ -1,88 +0,0 @@
-#!/bin/sh
-
-ONLYOFFICE_DATA_CONTAINER=false
-if [ "$1" != "" ]; then
- ONLYOFFICE_DATA_CONTAINER=$1
-fi
-
-DIR="/var/www/onlyoffice/documentserver"
-
-export LD_LIBRARY_PATH=/var/www/onlyoffice/documentserver/server/FileConverter/bin:/var/www/onlyoffice/documentserver/server/FileConverter/lib:$LD_LIBRARY_PATH
-
-# Start the ds user if it doesn't exist (for chown commands later)
-if ! id -u ds > /dev/null 2>&1; then
- useradd -r -s /bin/false ds 2>/dev/null || true
-fi
-
-#Start generate AllFonts.js, font thumbnails and font_selection.bin
-echo "Generating AllFonts.js, please wait..."
-
-# Check if allfontsgen exists before trying to run it
-if [ ! -x "$DIR/server/tools/allfontsgen" ]; then
- echo "ERROR: allfontsgen not found or not executable at $DIR/server/tools/allfontsgen"
- exit 1
-fi
-
-
-"$DIR/server/tools/allfontsgen"\
- --input="$DIR/core-fonts"\
- --allfonts-web="$DIR/sdkjs/common/AllFonts.js"\
- --allfonts="$DIR/server/FileConverter/bin/AllFonts.js"\
- --images="$DIR/sdkjs/common/Images"\
- --selection="$DIR/server/FileConverter/bin/font_selection.bin"\
- --output-web="$DIR/fonts"\
- --use-system="true"\
- --use-system-user-fonts="false"
-
-echo Done
-
-echo -n Generating presentation themes, please wait...
-"$DIR/server/tools/allthemesgen"\
- --converter-dir="$DIR/server/FileConverter/bin"\
- --src="$DIR/sdkjs/slide/themes"\
- --output="$DIR/sdkjs/common/Images"
-
-"$DIR/server/tools/allthemesgen"\
- --converter-dir="$DIR/server/FileConverter/bin"\
- --src="$DIR/sdkjs/slide/themes"\
- --output="$DIR/sdkjs/common/Images"\
- --postfix="ios"\
- --params="280,224"
-
-"$DIR/server/tools/allthemesgen"\
- --converter-dir="$DIR/server/FileConverter/bin"\
- --src="$DIR/sdkjs/slide/themes"\
- --output="$DIR/sdkjs/common/Images"\
- --postfix="android"\
- --params="280,224"
-
-echo Done
-
-echo -n Generating js caches, please wait...
-"$DIR/server/FileConverter/bin/x2t" -create-js-cache
-
-echo Done
-
-# Setting user rights for files created in the previous steps
-chown -R ds:ds "$DIR/sdkjs"
-chown -R ds:ds "$DIR/server/FileConverter/bin"
-chown -R ds:ds "$DIR/fonts"
-
-#Remove gzipped files
-rm -f \
- $DIR/fonts/*.gz \
- $DIR/sdkjs/common/AllFonts.js.gz \
- $DIR/sdkjs/common/Images/*.gz \
- $DIR/sdkjs/slide/themes/themes.js.gz
-
-#Restart web-site and converter
-if [ "$ONLYOFFICE_DATA_CONTAINER" != "true" ]; then
- if pgrep -x "systemd" >/dev/null; then
- systemctl restart ds-docservice
- systemctl restart ds-converter
- elif pgrep -x "supervisord" >/dev/null; then
- supervisorctl restart ds:docservice
- supervisorctl restart ds:converter
- fi
- documentserver-flush-cache.sh
-fi
diff --git a/build/scripts/entrypoint.sh b/build/scripts/entrypoint.sh
index 0931375cf7..9bc601218f 100644
--- a/build/scripts/entrypoint.sh
+++ b/build/scripts/entrypoint.sh
@@ -1,8 +1,8 @@
#!/bin/sh
update_welcome_page() {
- WELCOME_PAGE="/var/www/onlyoffice/documentserver-example/welcome/docker.html"
- EXAMPLE_DISABLED_PAGE="/var/www/onlyoffice/documentserver-example/welcome/example-disabled.html"
+ WELCOME_PAGE="/var/www/euro-office/documentserver-example/welcome/docker.html"
+ EXAMPLE_DISABLED_PAGE="/var/www/euro-office/documentserver-example/welcome/example-disabled.html"
# Replace systemctl placeholder (set at build time) with docker+supervisorctl equivalent
sed -i 's|sudo systemctl start ds-example|sudo docker exec $(sudo docker ps -q) supervisorctl start ds:example|g' \
@@ -27,8 +27,8 @@ update_welcome_page() {
fi
}
-# Create symlink for /config -> /etc/onlyoffice/documentserver so tools can find config
-ln -sf /etc/onlyoffice/documentserver /config 2>/dev/null || true
+# Create symlink for /config -> /etc/euro-office/documentserver so tools can find config
+ln -sf /etc/euro-office/documentserver /config 2>/dev/null || true
service postgresql start
runuser -u rabbitmq -- rabbitmq-server -detached
@@ -36,9 +36,9 @@ service redis-server start
service nginx start
# Ensure the api.js.tpl template exists (required by documentserver-flush-cache.sh)
-API_TPL="/var/www/onlyoffice/documentserver/web-apps/apps/api/documents/api.js.tpl"
-if [ ! -f "$API_TPL" ] && [ -f "/var/www/onlyoffice/documentserver/web-apps/apps/api/documents/api.js" ]; then
- cp /var/www/onlyoffice/documentserver/web-apps/apps/api/documents/api.js "$API_TPL"
+API_TPL="/var/www/euro-office/documentserver/web-apps/apps/api/documents/api.js.tpl"
+if [ ! -f "$API_TPL" ] && [ -f "/var/www/euro-office/documentserver/web-apps/apps/api/documents/api.js" ]; then
+ cp /var/www/euro-office/documentserver/web-apps/apps/api/documents/api.js "$API_TPL"
fi
# Generate all fonts (AllFonts.js, font_selection.bin, presentation themes)
@@ -89,7 +89,7 @@ enable_supervisor_program() {
[ "${EXAMPLE_ENABLED:-false}" = "true" ] && enable_supervisor_program ds-example
# Update example app config with JWT settings
-EXAMPLE_CONF_DIR="/etc/onlyoffice/documentserver-example"
+EXAMPLE_CONF_DIR="/etc/euro-office/documentserver-example"
EXAMPLE_LOCAL="${EXAMPLE_CONF_DIR}/local.json"
if [ "${EXAMPLE_ENABLED:-false}" = "true" ] && [ -n "$JWT_SECRET" ]; then
jq -n \
@@ -97,6 +97,8 @@ if [ "${EXAMPLE_ENABLED:-false}" = "true" ] && [ -n "$JWT_SECRET" ]; then
--arg header "${JWT_HEADER:-Authorization}" \
'{
"server": {
+ "siteUrl": "/",
+ "exampleUrl": "http://localhost/example/",
"token": {
"enable": true,
"secret": $secret,
diff --git a/document-server-integration b/document-server-integration
index 27d0a58105..0b1d9b3ac3 160000
--- a/document-server-integration
+++ b/document-server-integration
@@ -1 +1 @@
-Subproject commit 27d0a58105bc32c0339b922068eb7dcdfb4b151d
+Subproject commit 0b1d9b3ac30d17954ab549b4ca16cacb643c2090
diff --git a/document-server-package b/document-server-package
index 5974fe95e2..4e9df15355 160000
--- a/document-server-package
+++ b/document-server-package
@@ -1 +1 @@
-Subproject commit 5974fe95e28f543e2b1323ca94222b10acbd6fb5
+Subproject commit 4e9df15355b03e481058c162d3f951f68ce2672d
diff --git a/server b/server
index f4afd0efaa..4d0caf457b 160000
--- a/server
+++ b/server
@@ -1 +1 @@
-Subproject commit f4afd0efaab0ed64406db3188d4c47d4fe2c6a0a
+Subproject commit 4d0caf457bfec8e0380531e0090c3f983b2d5c58