diff --git a/.envrc b/.envrc
deleted file mode 100644
index 1d953f4..0000000
--- a/.envrc
+++ /dev/null
@@ -1 +0,0 @@
-use nix
diff --git a/.gitea/workflows/4testing-build.yml.arch b/.gitea/workflows/4testing-build.yml.arch
deleted file mode 100644
index 138cd30..0000000
--- a/.gitea/workflows/4testing-build.yml.arch
+++ /dev/null
@@ -1,174 +0,0 @@
-### This workflow setup instance then build and push images ###
-name: 4testing multiarch-build
-run-name: >-
-  Build #${{ inputs.build }} [
-  ${{ inputs.amd64 && 'AMD64' || '-' }}
-  ${{ inputs.arm64 && 'ARM64' || '-' }}
-  ] [
-  ${{ inputs.community && 'CE' || '-' }}
-  ${{ inputs.developer && 'DE' || '-' }}
-  ${{ inputs.enterprise && 'EE' || '-' }}
-  ]
-
-on:
-  workflow_dispatch:
-    inputs:
-      build:
-        description: 'Build number (ex. 45)'
-        type: string
-        required: true
-      amd64:
-        type: boolean
-        description: 'Build AMD64'
-        default: true
-      arm64:
-        type: boolean
-        description: 'Build ARM64'
-        default: true
-      community:
-        type: boolean
-        description: 'Build Community Edition'
-        default: true
-      enterprise:
-        type: boolean
-        description: 'Build Enterprise Edition'
-        default: true
-      developer:
-        type: boolean
-        description: 'Build Developer Edition'
-        default: true
-
-env: 
-  COMPANY_NAME: "onlyoffice"
-  PRODUCT_NAME: "documentserver"
-      
-jobs:
-  prepare:
-    runs-on: ubuntu-latest
-    steps:
-      - id: matrix
-        run: |
-          set -ex
-
-          BRANCH_NAME=${GITHUB_REF#refs/heads/}
-          if ! [[ $BRANCH_NAME == develop || $BRANCH_NAME =~ hotfix || $BRANCH_NAME =~ release ]]; then
-            echo "Wrong branch."
-            exit 1
-          fi
-
-          [ ${{ github.event.inputs.amd64 }} = true ] && PLATFORMS+=("amd64")
-          [ ${{ github.event.inputs.arm64 }} = true ] && PLATFORMS+=("arm64")
-          if [ -z ${PLATFORMS} ]; then
-            echo "None of the platforms are selected."
-            exit 1
-          fi
-
-          [ ${{ github.event.inputs.community }} = true ] && EDITIONS+=("community")
-          [ ${{ github.event.inputs.enterprise }} = true ] && EDITIONS+=("enterprise")
-          [ ${{ github.event.inputs.developer }} = true ] && EDITIONS+=("developer")
-          if [ -z ${EDITIONS} ]; then
-            echo "None of the editions are selected."
-            exit 1
-          fi
-          echo "editions=$(jq -n -c --arg s "${EDITIONS[*]}" '($s|split(" "))')" >> $GITHUB_OUTPUT
-    outputs:
-      editions: ${{ steps.matrix.outputs.editions }}
-
-  build:
-    name: "Build ${{ matrix.image }}-${{ matrix.edition }}"
-    runs-on: ubuntu-latest
-    needs: prepare
-    strategy:
-      fail-fast: false
-      matrix:
-        image: ["documentserver"]
-        edition: ${{ fromJSON(needs.prepare.outputs.editions) }}
-    steps:
-      - name: Checkout code 
-        uses: actions/checkout@v3
-
-      - name: Set up QEMU
-        uses: docker/setup-qemu-action@v2
-
-      - name: Set up Docker Buildx
-        id: buildx
-        uses: docker/setup-buildx-action@v2
-     
-      - name: Login to Docker Hub
-        uses: docker/login-action@v2
-        with:
-          username: ${{ secrets.DOCKER_HUB_USERNAME }}
-          password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
-
-      - name: Build 4testing
-        id: build-ds
-        run: |
-          set -eux
-
-          ### ==>> At this step build variable declaration ###
-
-          case ${{ matrix.edition }} in
-            community)
-              PRODUCT_EDITION=""
-              ;;
-            enterprise)
-              PRODUCT_EDITION="-ee"
-              ;;
-            developer)
-              PRODUCT_EDITION="-de"
-              ;;
-          esac
-
-          [ ${{ github.event.inputs.amd64 }} = true ] && PLATFORMS+=("amd64")
-          [ ${{ github.event.inputs.arm64 }} = true ] && PLATFORMS+=("arm64")
-          PLATFORM=$(echo ${PLATFORMS[*]/#/linux/} | tr ' ' ',')
-
-          BRANCH_NAME=${GITHUB_REF#refs/heads/}
-          if [ $BRANCH_NAME = develop ]; then
-            BUILD_CHANNEL=nightly
-            PRODUCT_VERSION=99.99.99
-          elif [[ $BRANCH_NAME =~ hotfix || $BRANCH_NAME =~ release ]]; then
-            BUILD_CHANNEL=test
-            PRODUCT_VERSION=${BRANCH_NAME#*/v}
-          fi
-          BUILD_NUMBER=${{ github.event.inputs.build }}
-
-          export PRODUCT_EDITION
-          export PACKAGE_VERSION=${PRODUCT_VERSION}-${BUILD_NUMBER}
-          export PACKAGE_BASEURL=${{ secrets.REPO_BASEURL }}
-          export BUILD_CHANNEL
-          export PLATFORM
-          export DOCKERFILE=Dockerfile
-          export PREFIX_NAME=4testing-
-          export TAG=${PRODUCT_VERSION}.${BUILD_NUMBER}
-
-          ### ==>> Build and push images at this step ###
-
-          docker buildx bake -f docker-bake.hcl ${{ matrix.image }} --push
-          echo "DONE: Build success"
-
-          ### Set output for Zap scanner
-          ### NOTE: Output will be used only in release/hotfix branches
-          
-          echo "version=${TAG}" >> "$GITHUB_OUTPUT"
-          echo "branch=${BRANCH_NAME}" >> "$GITHUB_OUTPUT"
-        shell: bash
-
-      # Run scanner only when edition is community 
-      # and branch hit release/ or hotfix/
-      - name: Trigger zap manualy
-        if: >-
-             matrix.edition == 'community' &&
-             (startsWith(steps.build-ds.outputs.branch, 'release/') ||
-              startsWith(steps.build-ds.outputs.branch, 'hotfix/'))
-        env:
-          VERSION: ${{ steps.build-ds.outputs.version }}
-          BRANCH: ${{ steps.build-ds.outputs.branch }}
-          GITHUB_TOKEN: ${{ secrets.TOKEN }}
-        run: |
-            gh workflow run zap-ds.yaml \
-                 --repo ${{ github.repository }} \
-                 -f branch=${BRANCH} \
-                 -f version=${VERSION}
-        shell: bash
-
diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml
deleted file mode 100644
index 5ffeb2c..0000000
--- a/.gitea/workflows/build.yml
+++ /dev/null
@@ -1,66 +0,0 @@
-name: Build
-
-on:
-  schedule:
-    - cron: "0 0 * * 1"
-  push:
-    tags:        
-      - 'manual_build'
-
-jobs:
-  build:
-    runs-on: ubuntu-latest
-    steps:
-      - name: Checkout
-        uses: actions/checkout@v4
-
-      - name: Get upstream repository
-        run: |
-          git clone https://github.com/ONLYOFFICE/DocumentServer/ upstream
-
-      - name: Extract tags and labels for Docker
-        id: meta
-        run: |
-          export VERSION="$(cd upstream && git describe --tags --abbrev=0 | cut -d 'v' -f2-)" 
-          echo "Version: ${VERSION}"
-          echo "tag=${VERSION}" >> $GITHUB_OUTPUT
-        shell: bash
-
-      - name: Check if the image was already built
-        id: check-build-status
-        run: |
-          echo ${{ steps.meta.outputs.tag }}
-          if curl --silent -f -lSL "https://hub.docker.com/v2/repositories/jiriks74/onlyoffice-documentserver/tags/$(echo ${{ steps.meta.outputs.tag }})" > /dev/null; then echo "Already exists" && exit 1; else echo "Desn't exist" && exit 0; fi
-
-      - name: Set tag in Dockerfile
-        run: |
-          sed -i "s/ARG PACKAGE_VERSION=/ARG PACKAGE_VERSION=$(echo ${{ steps.meta.outputs.tag }} | cut -d ':' -f2)/g" Dockerfile
-
-      - name: Update repositories
-        run: sudo apt update
-      - name: Install Docker
-        uses: awalsh128/cache-apt-pkgs-action@latest
-        with:
-          packages: docker.io
-
-      - name: Set up QEMU
-        uses: docker/setup-qemu-action@v2
-      - name: Set up Docker Buildx
-        uses: docker/setup-buildx-action@v1
-        with:
-          platforms: linux/amd64,linux/arm64
-
-      - name: Login to DockerHub
-        uses: docker/login-action@v1
-        with:
-          username: ${{ secrets.DOCKERHUB_USERNAME }}
-          password: ${{ secrets.DOCKERHUB_TOKEN }}
-
-      - name: Build and push image
-        uses: docker/build-push-action@v2
-        with:
-          push: true
-          tags: jiriks74/onlyoffice-documentserver:${{ steps.meta.outputs.tag }},jiriks74/onlyoffice-documentserver:latest
-          platforms: linux/amd64,linux/arm64
-          context: .
-          file: ./Dockerfile
diff --git a/.gitea/workflows/cron-rebuild-trigger.yml.arch b/.gitea/workflows/cron-rebuild-trigger.yml.arch
deleted file mode 100644
index 52cb144..0000000
--- a/.gitea/workflows/cron-rebuild-trigger.yml.arch
+++ /dev/null
@@ -1,22 +0,0 @@
----
-name: Trigger 4testing rebuild
-
-run-name: "Weekly 4testing rebuild trigger"
-
-on: 
-  schedule:
-    # Run every Saturday at 10 p.m.   
-    - cron: '00 22 * * 6'
-  
-jobs: 
-  trigger-rebuild:
-    name: "trigget-rebuild"
-    runs-on: "ubuntu-latest"
-    steps:
-      - name: Rebuild 4testing manualy
-        env: 
-          GITHUB_TOKEN: ${{ secrets.TOKEN }}
-        run: |
-          gh workflow run rebuild.yml \
-              --repo ONLYOFFICE/Docker-DocumentServer \
-              -f repo=4test
diff --git a/.gitea/workflows/rebuild.yml.arch b/.gitea/workflows/rebuild.yml.arch
deleted file mode 100644
index 953eefd..0000000
--- a/.gitea/workflows/rebuild.yml.arch
+++ /dev/null
@@ -1,224 +0,0 @@
----
-name: Rebuild Docker-Documentserver 
-
-run-name: >
-        Rebuild DocumentServer with secure updates for repo: ${{ github.event.inputs.repo }}
-
-on:
-  workflow_dispatch:
-    inputs:
-      repo:
-        type: choice
-        description: Please, choose upload repo..
-        options:
-        - '4test'
-        - 'stable'
-
-permissions:
-  # All other permissions are set to none
-  contents: read
-  # Technically read access while waiting for images should be more than enough. However,
-  # there is a bug in GitHub Actions/Packages and in case private repositories are used, you get a permission
-  # denied error when attempting to just pull private image, changing the token permission to write solves the
-  # issue. This is not dangerous, because if it is for "ONLYOFFICE/Docker-DocumentServer", only maintainers can use ds-rebuild.yaml
-  # If it is for a fork, then the token is read-only anyway.
-  packages: read
-
-env: 
-  COMPANY_NAME: "onlyoffice"
-  PRODUCT_NAME: "documentserver" 
-  REGISTRY_URL: "https://hub.docker.com/v2/repositories"  
-
-jobs:
-  rebuild-info:
-    name: "Rebuild-info"
-    runs-on: "ubuntu-22.04"
-    env:
-      REPO_INPUTS: ${{ github.event.inputs.repo }}
-      EVENT: ${{ github.event_name }}
-    outputs: 
-      stable-versions: ${{ steps.selective-checks.outputs.stable-versions }}
-      ucs-versions: ${{ steps.selective-checks.outputs.ucs-versions }}
-      minor-tags: ${{ steps.selective-checks.outputs.minor-tags }}
-      ucs-rebuild-condition: ${{ steps.selective-checks.outputs.ucs-rebuild-condition }}
-      prefix-name: ${{ steps.selective-checks.outputs.prefix-name }}
-      repo: ${{ steps.selective-checks.outputs.repo }}
-    steps:
-      - name: Selective checks
-        id: selective-checks
-        run: |
-            set -e
-
-            REPO=${REPO_INPUTS:-"4test"}
-
-            if [ "${REPO}" == "stable" ]; then
-                 UCS_REBUILD=true
-                 UCS_VERSIONS=($(curl -s -H -X ${REGISTRY_URL}/${COMPANY_NAME}/${PRODUCT_NAME}-ucs/tags/?page_size=100 | \
-                            jq -r '.results|.[]|.name' | grep -oxE '[0-9]{1,}.[0-9]{1,}.[0-9]{1,}.1' || true))
-                 echo "ucs-versions=$(jq -c -n '$ARGS.positional' --args "${UCS_VERSIONS[@]}")" >> "$GITHUB_OUTPUT"
-            elif
-               [ "${REPO}" == "4test" ]; then 
-                 UCS_REBUILD=false
-                 PREFIX_NAME=4testing-
-            fi
-            
-            STABLE_VERSIONS=($(curl -s -H -X ${REGISTRY_URL}/${COMPANY_NAME}/${PRODUCT_NAME}/tags/?page_size=100 | \
-                            jq -r '.results|.[]|.name' | grep -oxE '[0-9]{1,}.[0-9]{1,}.[0-9]{1,}.1' || true))
-                            
-            # When rebuilding stable versions of the document server, 
-            # it is necessary to determine the version from which the 
-            # minor x.x tag will need to be pushed.        
-            
-            VERSIONS=(${STABLE_VERSIONS[@]})
-            for i in {1..10}; do
-                 if [ -z "${VERSIONS}" ]; then
-                     break
-                 else 
-                     TEMPLATE=${VERSIONS[0]%.*.*}
-                     TEMPLATE_MINOR=$(printf -- '%s\n' "${VERSIONS[@]}" | grep -o -m 1 "${VERSIONS[0]%.*.*}.[0-9].[0-9]")
-                     MINOR_TAGS+=(${TEMPLATE_MINOR%.*})
-            
-                     for v in ${MINOR_TAGS[@]}; do
-                          VERSIONS=(${VERSIONS[@]//${v%.*}.*.*})
-                     done
-                 fi
-            done
-            
-            echo "Stable releases that will be rebuilded"
-            echo "--------------------------------------"
-            echo "${STABLE_VERSIONS[@]}"
-            echo
-            echo 
-            echo "Ucs releases that will be rebuilded"
-            echo "-----------------------------------"
-            echo "${UCS_VERSIONS[@]}"
-            
-            echo "stable-versions=$(jq -c -n '$ARGS.positional' --args "${STABLE_VERSIONS[@]}")" >> "$GITHUB_OUTPUT"
-            echo "minor-tags=${MINOR_TAGS[@]}" >> "$GITHUB_OUTPUT"
-            echo "ucs-rebuild-condition=${UCS_REBUILD}" >> "$GITHUB_OUTPUT"
-            echo "prefix-name=${PREFIX_NAME}" >>  "$GITHUB_OUTPUT"
-            echo "repo=${REPO}" >> "$GITHUB_OUTPUT"
-        shell: bash
-
-  re-build-stable:
-    name: "Rebuild stable:${{ matrix.version }} ${{ matrix.edition }}"
-    needs: [rebuild-info]
-    runs-on: ubuntu-latest
-    strategy:
-      fail-fast: false
-      matrix:
-        type: ["stable"]
-        edition: ["", "-ee", "-de"]
-        version: ${{fromJSON(needs.rebuild-info.outputs.stable-versions)}}
-    steps:
-      - name: Checkout code 
-        uses: actions/checkout@v3
-      - name: Set up QEMU
-        uses: docker/setup-qemu-action@v2
-      - name: Set up Docker Buildx
-        uses: docker/setup-buildx-action@v2      
-      - name: Login to Docker Hub
-        uses: docker/login-action@v2
-        with:
-          username: ${{ secrets.DOCKER_HUB_USERNAME }}
-          password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
-     # Determines the new build number based 
-     # on data from the hub.docker registry
-      - name: Declare release number
-        id: release-number
-        env: 
-          REBUILD_VERSION: ${{ matrix.version }}
-        run: |
-          MINOR_VERSION=${REBUILD_VERSION%.*} 
-          LAST_RELEASE=$(curl -s -H -X ${REGISTRY_URL}/${COMPANY_NAME}/${PRODUCT_NAME}/tags/?page_size=100 \
-          | jq -r '.results|.[]|.name' | grep -Eo -m1 "${MINOR_VERSION}.[0-9]{1,}")
-          LAST_RELEASE=${LAST_RELEASE#*.*.*.}
-          echo "release-number=$((LAST_RELEASE+1))" >> "$GITHUB_OUTPUT"   
-        shell: bash  
-    #  Note: Rebuilding images with an 
-    #  extra layer to update security and 
-    #  all dependencies. Update tags got +1 to previous release.
-      - name: Re-build documentserver-stable
-        env:
-          MINOR_TAGS_ST: ${{ needs.rebuild-info.outputs.minor-tags }}
-          VERSION: ${{ matrix.version }}
-          RELEASE_NUMBER: ${{ steps.release-number.outputs.release-number }}
-          PREFIX_NAME: ${{ needs.rebuild-info.outputs.prefix-name }}
-          REPO: ${{ needs.rebuild-info.outputs.repo }}
-          PRODUCT_EDITION: ${{ matrix.edition }}
-        run: |
-            set -eux
-            export PULL_TAG=${VERSION}
-            export TAG=${VERSION%.*}.${RELEASE_NUMBER}
-            export SHORTER_TAG=${VERSION%.*}
-            export SHORTEST_TAG=${VERSION%.*.*}
-            
-            if [ "${REPO}" == "stable" ]; then
-                 MINOR_TAGS=(${MINOR_TAGS_ST})
-                 for v in ${MINOR_TAGS[@]}; do
-                     if [ "${SHORTER_TAG}" == "${v}" ]; then
-                         export PUSH_MAJOR="true"
-                     fi
-                 done
-                 if [ "${SHORTER_TAG}" == "${MINOR_TAGS[0]}" ]; then
-                     export LATEST="true"
-                 fi
-            fi
-            docker buildx bake -f docker-bake.hcl documentserver-stable-rebuild --push
-        shell: bash
-  re-build-ucs:
-    name: "Rebuild ucs: ${{ matrix.version }} ${{ matrix.edition }}"
-    if: needs.rebuild-info.outputs.ucs-rebuild-condition == 'true'
-    needs: [rebuild-info]
-    runs-on: ubuntu-latest
-    strategy:
-      fail-fast: false
-      matrix:
-        type: ["ucs"]
-        edition: ["", "-ee"]
-        version: ${{fromJSON(needs.rebuild-info.outputs.ucs-versions)}}
-    steps:
-      - name: Checkout code 
-        uses: actions/checkout@v3
-      - name: Set up QEMU
-        uses: docker/setup-qemu-action@v2
-      - name: Set up Docker Buildx
-        uses: docker/setup-buildx-action@v2
-      - name: Login to Docker Hub
-        uses: docker/login-action@v2
-        with:
-          username: ${{ secrets.DOCKER_HUB_USERNAME }}
-          password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
-      # Determines the new build number based 
-      # on data from the hub.docker registry
-      - name: Declare release number
-        id: release-number
-        env: 
-          REBUILD_VERSION: ${{ matrix.version }}
-        run: |
-          MINOR_VERSION=${REBUILD_VERSION%.*} 
-          LAST_RELEASE=$(curl -s -H -X ${REGISTRY_URL}/${COMPANY_NAME}/${PRODUCT_NAME}/tags/?page_size=100 \
-                        | jq -r '.results|.[]|.name' | grep -Eo -m1 "${MINOR_VERSION}.[0-9]{1,}")
-          LAST_RELEASE=${LAST_RELEASE#*.*.*.}
-          echo "release-number=$((LAST_RELEASE+1))" >> "$GITHUB_OUTPUT"
-        shell: bash       
-      #  Note: Rebuilding images with an 
-      #  extra layer to update security and 
-      #  all dependencies. Update tags +1 to previous release.
-      - name: Re-build documentserver-ucs
-        env: 
-          VERSION: ${{ matrix.version }}
-          RELEASE_NUMBER: ${{ steps.release-number.outputs.release-number }}
-          PRODUCT_EDITION: ${{ matrix.edition }}
-        run: |
-            set -eux
-            export PULL_TAG=${VERSION}
-            export TAG=${VERSION%.*}.${RELEASE_NUMBER}
-            export SHORTER_TAG=${VERSION%.*}
-            export SHORTEST_TAG=${VERSION%.*.*}
-          
-            export UCS_REBUILD=true
-            export UCS_PREFIX=-ucs
-          
-            docker buildx bake -f docker-bake.hcl documentserver-stable-rebuild --push
-        shell: bash
diff --git a/.gitea/workflows/stable-build.yml.arch b/.gitea/workflows/stable-build.yml.arch
deleted file mode 100644
index fd493f3..0000000
--- a/.gitea/workflows/stable-build.yml.arch
+++ /dev/null
@@ -1,137 +0,0 @@
-### This workflow setup instance then build and push images ###
-name: Multi-arch build stable
-run-name: ${{ inputs.tag }} (${{ inputs.release_number }})
-
-on:
-  workflow_dispatch:
-    inputs:
-      tag:
-        description: 'Tag for release (ex. 1.2.3.45)'
-        type: string
-        required: true
-      release_number:
-        description: 'Sequence number of the release (ex. x.x.x.<number>)'
-        type: string
-        required: true
-        default: '1'
-
-env:
-  COMPANY_NAME: "onlyoffice"
-  PRODUCT_NAME: "documentserver" 
-
-jobs:
-  build:
-    name: "Release image: DocumentServer${{ matrix.edition }}"
-    runs-on: ubuntu-latest
-    strategy:
-      fail-fast: false
-      matrix:
-        images: ["documentserver-stable"]
-        edition: ["", "-ee", "-de"]
-    steps:
-      - name: Checkout code 
-        uses: actions/checkout@v3
-
-      - name: Set up QEMU
-        uses: docker/setup-qemu-action@v2
-
-      - name: Set up Docker Buildx
-        uses: docker/setup-buildx-action@v2
-     
-      - name: Login to Docker Hub
-        uses: docker/login-action@v2
-        with:
-          username: ${{ secrets.DOCKER_HUB_USERNAME }}
-          password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
-
-      - name: Build documentserver-release
-        run: |
-          set -eux
-          VERSION=${{ github.event.inputs.tag }}
-          RELEASE_NUMBER=${{ github.event.inputs.release_number }}
-          PRODUCT_EDITION=${{ matrix.edition }}
-          TESTING_IMAGE=${COMPANY_NAME}/4testing-${PRODUCT_NAME}${PRODUCT_EDITION}
-            export PRODUCT_EDITION
-            export PULL_TAG=${VERSION}
-            export TAG=${VERSION%.*}.${RELEASE_NUMBER}
-            export SHORTER_TAG=${VERSION%.*}
-            export SHORTEST_TAG=${VERSION%.*.*}
-            docker buildx bake -f docker-bake.hcl ${{ matrix.images }} --push
-            echo "DONE: Build success >> exit with 0"
-            exit 0
-        shell: bash
-
-  build-nonexample:
-    name: "Release image: DocumentServer${{ matrix.edition }}-nonExample"
-    runs-on: ubuntu-latest
-    needs: [build]
-    if: ${{ false }}
-    strategy:
-      fail-fast: false
-      matrix:
-        images: ["documentserver-nonexample"]
-        edition: ["", "-ee", "-de"]
-    steps:
-      - name: Checkout code
-        uses: actions/checkout@v3
-
-      - name: Set up QEMU
-        uses: docker/setup-qemu-action@v2
-
-      - name: Set up Docker Buildx
-        uses: docker/setup-buildx-action@v2
-
-      - name: Login to Docker Hub
-        uses: docker/login-action@v2
-        with:
-          username: ${{ secrets.DOCKER_HUB_USERNAME }}
-          password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
-
-      - name: build image
-        run: |
-          set -eux
-          VERSION=${{ github.event.inputs.tag }}
-          RELEASE_NUMBER=${{ github.event.inputs.release_number }}
-          export PULL_TAG=${VERSION%.*}.${RELEASE_NUMBER}
-          export PRODUCT_EDITION=${{ matrix.edition }}
-          export TAG=${VERSION%.*}.${RELEASE_NUMBER}
-          docker buildx bake -f docker-bake.hcl ${{ matrix.images }} --push
-        shell: bash
-
-  build-ucs-ubuntu20:
-    name: "Release image: DocumentServer${{ matrix.edition }}-ucs"
-    runs-on: ubuntu-latest
-    strategy:
-      fail-fast: false
-      matrix:
-        edition: ["", "-ee"]
-    steps:
-      - name: Checkout code
-        uses: actions/checkout@v3
-
-      - name: Set up QEMU
-        uses: docker/setup-qemu-action@v2
-
-      - name: Set up Docker Buildx
-        uses: docker/setup-buildx-action@v2
-
-      - name: Login to Docker Hub
-        uses: docker/login-action@v2
-        with:
-          username: ${{ secrets.DOCKER_HUB_USERNAME }}
-          password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
-
-      - name: build UCS
-        run: |
-           set -eux
-           VERSION=${{ github.event.inputs.tag }}
-           RELEASE_NUMBER=${{ github.event.inputs.release_number }}
-           export PRODUCT_EDITION=${{ matrix.edition }}
-           export PACKAGE_BASEURL=${{ secrets.REPO_BASEURL }}
-           export DOCKERFILE=Dockerfile
-           export BASE_IMAGE=ubuntu:20.04
-           export PG_VERSION=12
-           export TAG=${VERSION%.*}.${RELEASE_NUMBER}
-           export PACKAGE_VERSION=$( echo ${VERSION} |  sed -E 's/(.*)\./\1-/')
-           docker buildx bake -f docker-bake.hcl documentserver-ucs --push
-        shell: bash
diff --git a/.gitea/workflows/zap-ds.yaml.arch b/.gitea/workflows/zap-ds.yaml.arch
deleted file mode 100644
index 022ca1c..0000000
--- a/.gitea/workflows/zap-ds.yaml.arch
+++ /dev/null
@@ -1,70 +0,0 @@
----
-name: Scanning DocumentServer with ZAP
-
-run-name: > 
-      ZAP DocumentServer ver: ${{ github.event.inputs.version }} from branch: ${{ github.event.inputs.branch }}
-
-on:
-  workflow_dispatch:
-    inputs:
-      version:
-        description: 'Set DocumentServer version that will be deployed'
-        type: string
-        required: true
-      branch:
-        description: 'The branch from which the scan will be performed'
-        type: string
-        required: true
-jobs:
-  zap:
-    name: "Zap scanning DocumentServer"
-    runs-on: ubuntu-latest
-    permissions:
-      issues: write
-    steps:
-      - name: Checkout code
-        uses: actions/checkout@v3
-
-      - name: Run DS
-        id: run-ds
-        env:
-          TAG: ${{ github.event.inputs.version }}
-        run: |
-           # Create ssl certs
-           openssl genrsa -out tls.key 2048
-           openssl req -new -key tls.key -out tls.csr -subj "/C=RU/ST=NizhObl/L=NizhNov/O=RK-Tech/OU=TestUnit/CN=TestName"
-           openssl x509 -req -days 365 -in tls.csr -signkey tls.key -out tls.crt
-           openssl dhparam -out dhparam.pem 2048
-           sudo mkdir -p /app/onlyoffice/DocumentServer/data/certs
-           sudo cp ./tls.key /app/onlyoffice/DocumentServer/data/certs/
-           sudo cp ./tls.crt /app/onlyoffice/DocumentServer/data/certs/
-           sudo cp ./dhparam.pem /app/onlyoffice/DocumentServer/data/certs/
-           sudo chmod 400 /app/onlyoffice/DocumentServer/data/certs/tls.key
-           rm ./tls.key ./tls.crt ./dhparam.pem
-
-           # Run Ds with enabled ssl
-           export CONTAINER_NAME="documentserver"
-           sudo docker run -itd \
-                           --name ${CONTAINER_NAME} \
-                           -p 80:80 \
-                           -p 443:443 \
-                           -v /app/onlyoffice/DocumentServer/data:/var/www/onlyoffice/Data \
-                           onlyoffice/4testing-documentserver:${TAG}
-           sleep 60
-           sudo docker exec ${CONTAINER_NAME} sudo supervisorctl start ds:example
-           LOCAL_IP=$(hostname -I | awk '{print $1}')
-           echo "local-ip=${LOCAL_IP}" >> "$GITHUB_OUTPUT"
-
-      # Scan DocumentServer with ZAP.
-      # NOTE: Full scan get a lot of time.
-      # If you want make scan more faster (but less accurate) remove `cmd options` field
-      # -j mean that scanning use AJAX Spider, with this spider the scan takes approximately an hour
-      # Without any cmd options will be used default spider and the scan takes approximately ~10-15 minutes
-      - name: ZAP Scan
-        uses: zaproxy/action-full-scan@v0.8.0
-        with:
-          token: ${{ secrets.GITHUB_TOKEN }}
-          docker_name: 'ghcr.io/zaproxy/zaproxy:stable'
-          target: 'https://${{ steps.run-ds.outputs.local-ip }}/'
-          allow_issue_writing: false
-          cmd_options: '-j'
diff --git a/.gitea/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md
similarity index 100%
rename from .gitea/ISSUE_TEMPLATE.md
rename to .github/ISSUE_TEMPLATE.md
diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index ab736a1..0000000
--- a/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-# Nix, direnv
-.direnv
diff --git a/.travis.yml b/.travis.yml
index 2e37ca6..084cddc 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -32,23 +32,23 @@ env:
     SSL_KEY_PATH: /var/www/onlyoffice/Data/certs/mycert.key
 
 
-  # postgresql 16
-  - config: postgres.yml
-    POSTGRES_VERSION: 16
-
-  # postgresql 15
-  - config: postgres.yml
-    POSTGRES_VERSION: 15
-
-  # postgresql 14
-  - config: postgres.yml
-    POSTGRES_VERSION: 14
-
-  # postgresql 13
-  - config: postgres.yml
-    POSTGRES_VERSION: 13
-
   # postgresql 12
+  - config: postgres.yml
+    POSTGRES_VERSION: 12
+
+  # postgresql 11
+  - config: postgres.yml
+    POSTGRES_VERSION: 11
+
+  # postgresql 10
+  - config: postgres.yml
+    POSTGRES_VERSION: 10
+
+  # postgresql 9
+  - config: postgres.yml
+    POSTGRES_VERSION: 9
+
+  # postgresql 9.5
   - config: postgres.yml
 
   # postgresql custom values
diff --git a/Dockerfile b/Dockerfile
index b5b8d8b..8d8b2c2 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,17 +1,14 @@
-ARG BASE_IMAGE=ubuntu:22.04
+FROM ubuntu:20.04
+LABEL maintainer Ascensio System SIA <support@onlyoffice.com>
 
-FROM ${BASE_IMAGE} as documentserver
-LABEL maintainer Jiří Štefka <jiri.stefka.js@gmail.com>
-
-ARG PG_VERSION=14
-
-ENV LANG=en_US.UTF-8 LANGUAGE=en_US:en LC_ALL=en_US.UTF-8 DEBIAN_FRONTEND=noninteractive PG_VERSION=${PG_VERSION}
+ENV LANG=en_US.UTF-8 LANGUAGE=en_US:en LC_ALL=en_US.UTF-8 DEBIAN_FRONTEND=noninteractive PG_VERSION=12
 
 ARG ONLYOFFICE_VALUE=onlyoffice
 
 RUN echo "#!/bin/sh\nexit 0" > /usr/sbin/policy-rc.d && \
     apt-get -y update && \
-    apt-get -yq install wget apt-transport-https gnupg locales lsb-release && \
+    apt-get -yq install wget apt-transport-https gnupg locales && \
+    apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 0x8320ca65cb2de8e5 && \
     locale-gen en_US.UTF-8 && \
     echo ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true | debconf-set-selections && \
     apt-get -yq install \
@@ -19,8 +16,8 @@ RUN echo "#!/bin/sh\nexit 0" > /usr/sbin/policy-rc.d && \
         apt-utils \
         bomstrip \
         certbot \
-        cron \
         curl \
+        gconf-service \
         htop \
         libasound2 \
         libboost-regex-dev \
@@ -57,8 +54,9 @@ RUN echo "#!/bin/sh\nexit 0" > /usr/sbin/policy-rc.d && \
     sed 's|\(application\/zip.*\)|\1\n    application\/wasm wasm;|' -i /etc/nginx/mime.types && \
     pg_conftool $PG_VERSION main set listen_addresses 'localhost' && \
     service postgresql restart && \
+    sudo -u postgres psql -c "CREATE DATABASE $ONLYOFFICE_VALUE;" && \
     sudo -u postgres psql -c "CREATE USER $ONLYOFFICE_VALUE WITH password '$ONLYOFFICE_VALUE';" && \
-    sudo -u postgres psql -c "CREATE DATABASE $ONLYOFFICE_VALUE OWNER $ONLYOFFICE_VALUE;" && \
+    sudo -u postgres psql -c "GRANT ALL privileges ON DATABASE $ONLYOFFICE_VALUE TO $ONLYOFFICE_VALUE;" && \ 
     service postgresql stop && \
     service redis-server stop && \
     service rabbitmq-server stop && \
@@ -66,35 +64,26 @@ RUN echo "#!/bin/sh\nexit 0" > /usr/sbin/policy-rc.d && \
     service nginx stop && \
     rm -rf /var/lib/apt/lists/*
 
-COPY config/supervisor/supervisor /etc/init.d/
-COPY config/supervisor/ds/*.conf /etc/supervisor/conf.d/
+COPY config /app/ds/setup/config/
 COPY run-document-server.sh /app/ds/run-document-server.sh
 
 EXPOSE 80 443
 
 ARG COMPANY_NAME=onlyoffice
 ARG PRODUCT_NAME=documentserver
-ARG PRODUCT_EDITION=
-ARG PACKAGE_VERSION=
-ARG TARGETARCH
-ARG PACKAGE_BASEURL="http://download.onlyoffice.com/install/documentserver/linux"
+ARG PACKAGE_URL="http://download.onlyoffice.com/install/documentserver/linux/${COMPANY_NAME}-${PRODUCT_NAME}_amd64.deb"
 
 ENV COMPANY_NAME=$COMPANY_NAME \
-    PRODUCT_NAME=$PRODUCT_NAME \
-    PRODUCT_EDITION=$PRODUCT_EDITION \
-    DS_DOCKER_INSTALLATION=true
+    PRODUCT_NAME=$PRODUCT_NAME
 
-RUN PACKAGE_FILE="${COMPANY_NAME}-${PRODUCT_NAME}${PRODUCT_EDITION}${PACKAGE_VERSION:+_$PACKAGE_VERSION}_${TARGETARCH:-$(dpkg --print-architecture)}.deb" && \
-    wget -q -P /tmp "$PACKAGE_BASEURL/$PACKAGE_FILE" && \
+RUN wget -q -P /tmp "$PACKAGE_URL" && \
     apt-get -y update && \
     service postgresql start && \
-    apt-get -yq install /tmp/$PACKAGE_FILE && \
+    apt-get -yq install /tmp/$(basename "$PACKAGE_URL") && \
     service postgresql stop && \
-    chmod 755 /etc/init.d/supervisor && \
-    sed "s/COMPANY_NAME/${COMPANY_NAME}/g" -i /etc/supervisor/conf.d/*.conf && \
     service supervisor stop && \
     chmod 755 /app/ds/*.sh && \
-    rm -f /tmp/$PACKAGE_FILE && \
+    rm -f /tmp/$(basename "$PACKAGE_URL") && \
     rm -rf /var/log/$COMPANY_NAME && \
     rm -rf /var/lib/apt/lists/*
 
diff --git a/Makefile b/Makefile
index bb80cde..c371fc7 100644
--- a/Makefile
+++ b/Makefile
@@ -1,66 +1,75 @@
 COMPANY_NAME ?= ONLYOFFICE
 GIT_BRANCH ?= develop
-PRODUCT_NAME ?= documentserver
-PRODUCT_EDITION ?= 
+PRODUCT_NAME ?= DocumentServer
 PRODUCT_VERSION ?= 0.0.0
 BUILD_NUMBER ?= 0
-BUILD_CHANNEL ?= nightly
 ONLYOFFICE_VALUE ?= onlyoffice
+S3_BUCKET ?= repo-doc-onlyoffice-com
+RELEASE_BRANCH ?= unstable
 
 COMPANY_NAME_LOW = $(shell echo $(COMPANY_NAME) | tr A-Z a-z)
+PRODUCT_NAME_LOW = $(shell echo $(PRODUCT_NAME) | tr A-Z a-z)
+COMPANY_NAME_LOW_ESCAPED = $(subst -,,$(COMPANY_NAME_LOW))
 
-PACKAGE_NAME := $(COMPANY_NAME_LOW)-$(PRODUCT_NAME)$(PRODUCT_EDITION)
-PACKAGE_VERSION ?= $(PRODUCT_VERSION)-$(BUILD_NUMBER)~stretch
-PACKAGE_BASEURL ?= https://s3.eu-west-1.amazonaws.com/repo-doc-onlyoffice-com/server/linux/debian
+PACKAGE_NAME := $(COMPANY_NAME_LOW)-$(PRODUCT_NAME_LOW)
+PACKAGE_VERSION := $(PRODUCT_VERSION)-$(BUILD_NUMBER)
+PACKAGE_URL := http://$(S3_BUCKET).s3.amazonaws.com/$(COMPANY_NAME_LOW)/$(RELEASE_BRANCH)/ubuntu/$(PACKAGE_NAME)_$(PACKAGE_VERSION)_amd64.deb
 
-ifeq ($(BUILD_CHANNEL),$(filter $(BUILD_CHANNEL),nightly test))
-	DOCKER_TAG := $(PRODUCT_VERSION).$(BUILD_NUMBER)
+UPDATE_LATEST := false
+
+ifneq (,$(findstring develop,$(GIT_BRANCH)))
+DOCKER_TAG += $(subst -,.,$(PACKAGE_VERSION))
+DOCKER_TAGS += latest
+else ifneq (,$(findstring release,$(GIT_BRANCH)))
+DOCKER_TAG += $(subst -,.,$(PACKAGE_VERSION))
+else ifneq (,$(findstring hotfix,$(GIT_BRANCH)))
+DOCKER_TAG += $(subst -,.,$(PACKAGE_VERSION))
 else
-	DOCKER_TAG := $(PRODUCT_VERSION).$(BUILD_NUMBER)-$(subst /,-,$(GIT_BRANCH))
+DOCKER_TAG += $(subst -,.,$(PACKAGE_VERSION))-$(subst /,-,$(GIT_BRANCH))
 endif
 
-DOCKER_ORG ?= $(COMPANY_NAME_LOW)
-DOCKER_IMAGE := $(DOCKER_ORG)/4testing-$(PRODUCT_NAME)$(PRODUCT_EDITION)
-DOCKER_DUMMY := $(COMPANY_NAME_LOW)-$(PRODUCT_NAME)$(PRODUCT_EDITION)__$(DOCKER_TAG).dummy
-DOCKER_ARCH := $(COMPANY_NAME_LOW)-$(PRODUCT_NAME)_$(DOCKER_TAG).tar.gz
+DOCKER_TAGS += $(DOCKER_TAG)
 
-.PHONY: all clean clean-docker image deploy docker
+DOCKER_REPO = $(COMPANY_NAME_LOW_ESCAPED)/4testing-$(PRODUCT_NAME_LOW)
 
-$(DOCKER_DUMMY):
-	docker pull ubuntu:22.04
+COLON := __colon__
+DOCKER_TARGETS := $(foreach TAG,$(DOCKER_TAGS),$(DOCKER_REPO)$(COLON)$(TAG))
+
+DOCKER_ARCH := $(COMPANY_NAME_LOW)-$(PRODUCT_NAME_LOW)_$(PACKAGE_VERSION).tar.gz
+
+DOCKER_ARCH_URI := $(COMPANY_NAME_LOW)/$(RELEASE_BRANCH)/docker/$(notdir $(DOCKER_ARCH))
+
+.PHONY: all clean clean-docker deploy docker publish
+
+$(DOCKER_TARGETS): $(DEB_REPO_DATA)
+	docker pull ubuntu:20.04
 	docker build \
+		--build-arg PACKAGE_URL=$(PACKAGE_URL) \
 		--build-arg COMPANY_NAME=$(COMPANY_NAME_LOW) \
-		--build-arg PRODUCT_NAME=$(PRODUCT_NAME) \
-		--build-arg PRODUCT_EDITION=$(PRODUCT_EDITION) \
-		--build-arg PACKAGE_VERSION=$(PACKAGE_VERSION) \
-		--build-arg PACKAGE_BASEURL=$(PACKAGE_BASEURL) \
-		--build-arg TARGETARCH=amd64 \
+		--build-arg PRODUCT_NAME=$(PRODUCT_NAME_LOW) \
 		--build-arg ONLYOFFICE_VALUE=$(ONLYOFFICE_VALUE) \
-		-t $(DOCKER_IMAGE):$(DOCKER_TAG) . && \
-	mkdir -p $$(dirname $@) && \
+		-t $(subst $(COLON),:,$@) . &&\
+	mkdir -p $$(dirname $@) &&\
 	echo "Done" > $@
 
-$(DOCKER_ARCH): $(DOCKER_DUMMY)
-	docker save $(DOCKER_IMAGE):$(DOCKER_TAG) | \
+$(DOCKER_ARCH): $(DOCKER_TARGETS)
+	docker save $(DOCKER_REPO):$(DOCKER_TAG) | \
 		gzip > $@
 
-all: image
+all: $(DOCKER_TARGETS)
 
 clean:
-	rm -rfv *.dummy *.tar.gz
+	rm -rfv $(DOCKER_TARGETS) $(DOCKER_ARCH)
 		
 clean-docker:
 	docker rmi -f $$(docker images -q $(COMPANY_NAME_LOW)/*) || exit 0
 
-image: $(DOCKER_DUMMY)
+deploy: $(DOCKER_TARGETS)
+	$(foreach TARGET,$(DOCKER_TARGETS), \
+		for i in {1..3}; do \
+			docker push $(subst $(COLON),:,$(TARGET)) && break || sleep 1m; \
+		done;)
 
-deploy: $(DOCKER_DUMMY)
-	for i in {1..3}; do \
-		docker push $(DOCKER_IMAGE):$(DOCKER_TAG) && break || sleep 1m; \
-	done
-ifeq ($(BUILD_CHANNEL),nightly)
-	docker tag $(DOCKER_IMAGE):$(DOCKER_TAG) $(DOCKER_IMAGE):latest
-	for i in {1..3}; do \
-		docker push $(DOCKER_IMAGE):latest && break || sleep 1m; \
-	done
-endif
+publish: $(DOCKER_ARCH)
+	aws s3 cp --no-progress --acl public-read \
+		$(DOCKER_ARCH) s3://$(S3_BUCKET)/$(DOCKER_ARCH_URI)
diff --git a/README.md b/README.md
index e988b81..59ddeae 100644
--- a/README.md
+++ b/README.md
@@ -1,190 +1,3 @@
-[![Docker Pulls](https://img.shields.io/docker/pulls/jiriks74/onlyoffice-documentserver.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=pulls&logo=docker)](https://hub.docker.com/r/jiriks74/onlyoffice-documentserver)
-[![Docker Stars](https://img.shields.io/docker/stars/jiriks74/onlyoffice-documentserver.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=stars&logo=docker)](https://hub.docker.com/r/jiriks74/onlyoffice-documentserver)
-[![Docker Size](https://img.shields.io/docker/image-size/jiriks74/onlyoffice-documentserver/latest.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=Size&logo=docker)](https://hub.docker.com/r/jiriks74/onlyoffice-documentserver)
-
-#### This repository is based on the official `Dockerfile` and `docker-compose.yml` files with all the needed files as well
-
-# Table of contents
-
-- [Usage](#usage)
-  - [Setting up secret key with nextcloud](#setting-up-secret-key-with-nextcloud)
-  - [Larger file limits](#setting-up-larger-file-limits)
-  - [Generating custom presentation themes](#generating-custom-presentation-themes)
-- [Tags on DockerHub](#tags-used-on-dockerhub)
-- [Building the image from source](#building-the-image-yourself-not-recommended---may-take-a-lot-of-time)
-  - [Updating the image yourself](#updating-the-image-yourself)
-
-## Usage
-
-#### docker-compose with prebuilt image (recommended)
-
-- Docker will pull the correct architecture automatically
-- Below in `Details` you'll find a `docker-compose.yml` templete.
-To use it, make a directory where data from the container will be saved, create
-`docker-compose.yml` file in it and put the template from below in it.
-Then modify the template to your needs.
-
-<details>
-
-```yml
-version: '2'
-services:
-  onlyoffice-documentserver:
-    image: jiriks74/onlyoffice-documentserver:latest
-    container_name: onlyoffice-documentserver
-    depends_on:
-      - onlyoffice-postgresql
-      - onlyoffice-rabbitmq
-    environment:
-      - DB_TYPE=postgres
-      - DB_HOST=onlyoffice-postgresql
-      - DB_PORT=5432
-      - DB_NAME=onlyoffice
-      - DB_USER=onlyoffice
-      - AMQP_URI=amqp://guest:guest@onlyoffice-rabbitmq
-      # Uncomment strings below to enable the JSON Web Token validation.
-      #- JWT_ENABLED=true
-      #- JWT_SECRET=secret
-      #- JWT_HEADER=AuthorizationJwt
-      #- JWT_IN_BODY=true
-      # Uncomment the line below to set larger file limits (about 1GB)
-      #- LARGER_FILE_LIMITS=true
-    ports:
-      - '80:80'
-      - '443:443'
-    stdin_open: true
-    restart: always
-    stop_grace_period: 120s
-    volumes:
-       # Uncomment the line below to get access to the slide themes directory.
-       # To use the themes, copy them to the slideThemes directory and run `docker exec -it <container-name> /usr/bin/documentserver-generate-allfonts.sh`
-       #- ./slideThemes:/var/www/onlyoffice/documentserver/sdkjs/slide/themes/src
-       - /var/www/onlyoffice/Data
-       - /var/log/onlyoffice
-       - /var/lib/onlyoffice/documentserver/App_Data/cache/files
-       - /var/www/onlyoffice/documentserver-example/public/files
-       - /usr/share/fonts
-       
-  onlyoffice-rabbitmq:
-    container_name: onlyoffice-rabbitmq
-    image: rabbitmq
-    restart: always
-    expose:
-      - '5672'
-
-  onlyoffice-postgresql:
-    container_name: onlyoffice-postgresql
-    image: postgres:9.5
-    environment:
-      - POSTGRES_DB=onlyoffice
-      - POSTGRES_USER=onlyoffice
-      - POSTGRES_HOST_AUTH_METHOD=trust
-    restart: always
-    expose:
-      - '5432'
-    volumes:
-      - postgresql_data:/var/lib/postgresql
-
-volumes:
-  postgresql_data:
-```
-
-</details>
-
-### Setting up `Secret key` with Nextcloud
-
-1. Uncomment four lines starting with `JWT` in `docker-compose`
-2. Set your secret on line `JWT_SECRET=yourSecret`
-3. Open Nexcloud's `config.php` (by default `/var/www/nextcloud/config/config.php`)
-4. Add this to the 2nd last line (before the line with `);`) and paste in your secret (3rd last line)
-
-```php
-  'onlyoffice' =>
-    array (
-      "jwt_secret" => "yourSecret",
-      "jwt_header" => "AuthorizationJwt"
-  )
-```
-
-5. Go to your Nextcloud settings, navigate to Onlyoffice settings
-6. Add your server Address and Secret key
-7. Save
-
-### Setting up larger file limits
-
-- Uncomment the `- LARGER_FILE_LIMITS=true` line in `docker-compose.yml`
-
-### Generating custom presentation themes
-
-1. Uncomment the
-`- ./slideThemes:/var/www/onlyoffice/documentserver/sdkjs/slide/themes/src`
-line in `docker-compose.yml`
-2. Put your themes into the `slideThemes` directory
-3. Run `docker exec -it <container-name> /usr/bin/documentserver-generate-allfonts.sh`
-	- (This will take some time. I have totally 35 themes and it took about 30 minutes to generate them on a Raspberry Pi 4 4GB on an external HDD - SSD may be faster)
-4. If you want to add more themes later, repeat step 2 and 3.
-
-## Tags used on DockerHub
-
-- `latest` - the latest version of the Documentserver
-- Version tags (eg. `7.0.1-37`) - these tags are equal to the Documentserver
-version of the `onlyoffice-documentserver` debian package used in the image
-
-## Building the image yourself (not recommended - may take a lot of time)
-
-#### 1. Clone the repository (for example to your home directory `cd /home/$USER/`) 
-
-   `git clone https://github.com/jiriks74/Docker-DocumentServer.git && cd Docker-DocumentServer`
-
-#### 2. Build the docker image 
-
-##### Building only for the architecture you are building the image on (when building on Raspberry Pi result will be `arm64`, when on pc result will be `amd64`) 
-
-   `docker-compose build` 
-
-##### Building for all supported architectures (you have to have your environment setup for emulation of arm64 with `qemu` and build it on `amd64`) - you have to push to DockerHub
-
-   `docker buildx build --push --platform linux/arm64,linux/amd64,linux/386 .`
-
-#### 3. Create and start the container
-
-   `docker-compose up -d`
-
-   - This will start the server. It is set to be automatically started/restarted so as long you have docker running on startup this will start automatically
-
-### Updating the image yourself
-
-#### 1. Stop and delete the old container
-
-   `docker-compose down`
-
-#### 2. (optional) Clear the docker cache 
-
-####    - ! This will remove all unused cache images ! (good for saving space, bad if you develop with and need cache, but you understand it at that point)
-
-   `docker rmi $(docker images -f "dangling=true" -q)`
-
-#### 4. Rebuild the image without cache
-
-##### Building only for the architecture you are building the image on (when building on Raspberry Pi result will be `arm64`, when on pc result will be `amd64`)
-
-   `docker-compose build`
-
-##### Building for all supported architectures (you have to have your environment setup for emulation of arm64 with `qemu`) - you'll have to push to DockerHub, multiplatform images cannot be saved locally (for whatever reason)
-
-   `docker buildx build --push --platform linux/arm64,linux/amd64,linux/386 .`
-
-#### 3. Create and start the new container
-
-   `docker-compose up -d`
-
----
-
-## The rest of this file is the official [`README.md` from OnlyOffice-Documentserver repository](https://github.com/ONLYOFFICE/Docker-DocumentServer). I will not change anything in it, it may not work, but considering the changes I made, it should be fully compatible (beware that you must change the `docker-compose.yml` from building the image locally to using this repository). If you want to change something, make a issue on my repository and we'll figure it out.
-
-<details>
-	
-	
 * [Overview](#overview)
 * [Functionality](#functionality)
 * [Recommended System Requirements](#recommended-system-requirements)
@@ -198,7 +11,6 @@ version of the `onlyoffice-documentserver` debian package used in the image
         + [Installation of the SSL Certificates](#installation-of-the-ssl-certificates)
         + [Available Configuration Parameters](#available-configuration-parameters)
 * [Installing ONLYOFFICE Document Server integrated with Community and Mail Servers](#installing-onlyoffice-document-server-integrated-with-community-and-mail-servers)
-* [ONLYOFFICE Document Server ipv6 setup](#onlyoffice-document-server-ipv6-setup)
 * [Issues](#issues)
     - [Docker Issues](#docker-issues)
     - [Document Server usage Issues](#document-server-usage-issues)
@@ -213,8 +25,6 @@ Starting from version 6.0, Document Server is distributed as ONLYOFFICE Docs. It
 
 ONLYOFFICE Docs can be used as a part of ONLYOFFICE Workspace or with third-party sync&share solutions (e.g. Nextcloud, ownCloud, Seafile) to enable collaborative editing within their interface.
 
-***Important*** Please update `docker-engine` to latest version (`20.10.21` as of writing this doc) before using it. We use `ubuntu:22.04` as base image and it older versions of docker have compatibility problems with it
-
 ## Functionality ##
 * ONLYOFFICE Document Editor
 * ONLYOFFICE Spreadsheet Editor
@@ -375,17 +185,13 @@ Below is the complete list of parameters that can be set using environment varia
 - **AMQP_TYPE**: The message broker type. Supported values are `rabbitmq` or `activemq`. Defaults to `rabbitmq`.
 - **REDIS_SERVER_HOST**: The IP address or the name of the host where the Redis server is running.
 - **REDIS_SERVER_PORT**:  The Redis server port number.
-- **REDIS_SERVER_PASS**: The Redis server password. The password is not set by default.
 - **NGINX_WORKER_PROCESSES**: Defines the number of nginx worker processes.
 - **NGINX_WORKER_CONNECTIONS**: Sets the maximum number of simultaneous connections that can be opened by a nginx worker process.
-- **SECURE_LINK_SECRET**: Defines secret for the nginx config directive [secure_link_md5](https://nginx.org/en/docs/http/ngx_http_secure_link_module.html#secure_link_md5). Defaults to `random string`.
-- **JWT_ENABLED**: Specifies the enabling the JSON Web Token validation by the ONLYOFFICE Document Server. Defaults to `true`.
-- **JWT_SECRET**: Defines the secret key to validate the JSON Web Token in the request to the ONLYOFFICE Document Server. Defaults to random value.
+- **JWT_ENABLED**: Specifies the enabling the JSON Web Token validation by the ONLYOFFICE Document Server. Defaults to `false`.
+- **JWT_SECRET**: Defines the secret key to validate the JSON Web Token in the request to the ONLYOFFICE Document Server. Defaults to `secret`.
 - **JWT_HEADER**: Defines the http header that will be used to send the JSON Web Token. Defaults to `Authorization`.
 - **JWT_IN_BODY**: Specifies the enabling the token validation in the request body to the ONLYOFFICE Document Server. Defaults to `false`.
 - **WOPI_ENABLED**: Specifies the enabling the wopi handlers. Defaults to `false`.
-- **ALLOW_META_IP_ADDRESS**: Defines if it is allowed to connect meta IP address or not. Defaults to `false`.
-- **ALLOW_PRIVATE_IP_ADDRESS**: Defines if it is allowed to connect private IP address or not. Defaults to `false`.
 - **USE_UNAUTHORIZED_STORAGE**: Set to `true`if using selfsigned certificates for your storage server e.g. Nextcloud. Defaults to `false`
 - **GENERATE_FONTS**: When 'true' regenerates fonts list and the fonts thumbnails etc. at each start. Defaults to `true`
 - **METRICS_ENABLED**: Specifies the enabling StatsD for ONLYOFFICE Document Server. Defaults to `false`.
@@ -410,28 +216,18 @@ Then launch containers on it using the 'docker run --net onlyoffice' option:
 
 Follow [these steps](#installing-mysql) to install MySQL server.
 
-**STEP 3**: Generate JWT Secret
-
-JWT secret defines the secret key to validate the JSON Web Token in the request to the **ONLYOFFICE Document Server**. You can specify it yourself or easily get it using the command:
-```
-JWT_SECRET=$(cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 12);
-```
-
-**STEP 4**: Install ONLYOFFICE Document Server.
+**STEP 3**: Install ONLYOFFICE Document Server.
 
 ```bash
 sudo docker run --net onlyoffice -i -t -d --restart=always --name onlyoffice-document-server \
- -e JWT_ENABLED=true \
- -e JWT_SECRET=${JWT_SECRET} \
- -e JWT_HEADER=AuthorizationJwt \
- -v /app/onlyoffice/DocumentServer/logs:/var/log/onlyoffice  \
- -v /app/onlyoffice/DocumentServer/data:/var/www/onlyoffice/Data  \
- -v /app/onlyoffice/DocumentServer/lib:/var/lib/onlyoffice \
- -v /app/onlyoffice/DocumentServer/db:/var/lib/postgresql \
- onlyoffice/documentserver
+	-v /app/onlyoffice/DocumentServer/logs:/var/log/onlyoffice  \
+	-v /app/onlyoffice/DocumentServer/data:/var/www/onlyoffice/Data  \
+	-v /app/onlyoffice/DocumentServer/lib:/var/lib/onlyoffice \
+	-v /app/onlyoffice/DocumentServer/db:/var/lib/postgresql \
+	onlyoffice/documentserver
 ```
 
-**STEP 5**: Install ONLYOFFICE Mail Server. 
+**STEP 4**: Install ONLYOFFICE Mail Server. 
 
 For the mail server correct work you need to specify its hostname 'yourdomain.com'.
 
@@ -449,14 +245,14 @@ sudo docker run --init --net onlyoffice --privileged -i -t -d --restart=always -
  onlyoffice/mailserver
 ```
 
-The additional parameters for mail server are available [here](https://github.com/ONLYOFFICE/Docker-CommunityServer/blob/master/docker-compose.workspace_enterprise.yml#L87).
+The additional parameters for mail server are available [here](https://github.com/ONLYOFFICE/Docker-CommunityServer/blob/master/docker-compose.yml#L75).
 
 To learn more, refer to the [ONLYOFFICE Mail Server documentation](https://github.com/ONLYOFFICE/Docker-MailServer "ONLYOFFICE Mail Server documentation").
 
-**STEP 6**: Install ONLYOFFICE Community Server
+**STEP 5**: Install ONLYOFFICE Community Server
 
 ```bash
-sudo docker run --net onlyoffice -i -t -d --privileged --restart=always --name onlyoffice-community-server -p 80:80 -p 443:443 -p 5222:5222 --cgroupns=host \
+sudo docker run --net onlyoffice -i -t -d --restart=always --name onlyoffice-community-server -p 80:80 -p 443:443 -p 5222:5222 \
  -e MYSQL_SERVER_ROOT_PASSWORD=my-secret-pw \
  -e MYSQL_SERVER_DB_NAME=onlyoffice \
  -e MYSQL_SERVER_HOST=onlyoffice-mysql-server \
@@ -464,9 +260,6 @@ sudo docker run --net onlyoffice -i -t -d --privileged --restart=always --name o
  -e MYSQL_SERVER_PASS=onlyoffice_pass \
  
  -e DOCUMENT_SERVER_PORT_80_TCP_ADDR=onlyoffice-document-server \
- -e DOCUMENT_SERVER_JWT_ENABLED=true \
- -e DOCUMENT_SERVER_JWT_SECRET=${JWT_SECRET} \
- -e DOCUMENT_SERVER_JWT_HEADER=AuthorizationJwt \
  
  -e MAIL_SERVER_API_HOST=${MAIL_SERVER_IP} \
  -e MAIL_SERVER_DB_HOST=onlyoffice-mysql-server \
@@ -477,14 +270,12 @@ sudo docker run --net onlyoffice -i -t -d --privileged --restart=always --name o
  
  -v /app/onlyoffice/CommunityServer/data:/var/www/onlyoffice/Data \
  -v /app/onlyoffice/CommunityServer/logs:/var/log/onlyoffice \
- -v /app/onlyoffice/CommunityServer/letsencrypt:/etc/letsencrypt \
- -v /sys/fs/cgroup:/sys/fs/cgroup:rw \
  onlyoffice/communityserver
 ```
 
 Where `${MAIL_SERVER_IP}` is the IP address for **ONLYOFFICE Mail Server**. You can easily get it using the command:
 ```
-MAIL_SERVER_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' onlyoffice-mail-server)
+docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' onlyoffice-mail-server
 ```
 
 Alternatively, you can use an automatic installation script to install the whole ONLYOFFICE Community Edition at once. For the mail server correct work you need to specify its hostname 'yourdomain.com'.
@@ -504,34 +295,10 @@ bash opensource-install.sh -md yourdomain.com
 Or, use [docker-compose](https://docs.docker.com/compose/install "docker-compose"). For the mail server correct work you need to specify its hostname 'yourdomain.com'. Assuming you have docker-compose installed, execute the following command:
 
 ```bash
-wget https://raw.githubusercontent.com/ONLYOFFICE/Docker-CommunityServer/master/docker-compose.groups.yml
+wget https://raw.githubusercontent.com/ONLYOFFICE/Docker-CommunityServer/master/docker-compose.yml
 docker-compose up -d
 ```
 
-## ONLYOFFICE Document Server ipv6 setup
-
-(Works and is supported only for Linux hosts)
-
-Docker does not currently provide ipv6 addresses to containers by default. This function is experimental now.
-
-To set up interaction via ipv6, you need to enable support for this feature in your Docker. For this you need:
-- create the `/etc/docker/daemon.json` file with the following content:
-
-```
-{
-"ipv6": true,
-"fixed-cidr-v6": "2001:db8:abc1::/64"
-}
-```
-- restart docker with the following command: `systemctl restart docker`
-
-After that, all running containers receive an ipv6 address and have an inet6 interface.
-
-You can check your default bridge network and see the field there
-`EnableIPv6=true`. A new ipv6 subnet will also be added.
-
-For more information, visit the official [Docker manual site](https://docs.docker.com/config/daemon/ipv6/)
-
 ## Issues
 
 ### Docker Issues
@@ -570,5 +337,3 @@ If you have any problems with or questions about this image, please visit our of
 
   [1]: https://forum.onlyoffice.com
   [2]: https://stackoverflow.com/questions/tagged/onlyoffice
-	
-</details>
diff --git a/build_and_push_all_images.py b/build_and_push_all_images.py
deleted file mode 100644
index aae069a..0000000
--- a/build_and_push_all_images.py
+++ /dev/null
@@ -1,18 +0,0 @@
-import requests
-import os
-
-response = requests.get("https://api.github.com/repos/ONLYOFFICE/DocumentServer/releases/latest")
-
-print('docker buildx build --push --platform linux/arm64,linux/amd64 --tag jiriks74/onlyoffice-documentserver:latest .')
-os.system(f'docker buildx build --push --platform linux/arm64,linux/amd64 --tag jiriks74/onlyoffice-documentserver:latest .')
-print("///////////////////////////////////////////////////////////////////////////")
-print('Build and push ":latest" .........................................finished')
-print("///////////////////////////////////////////////////////////////////////////")
-print()
-
-print(f'docker buildx build --push --platform linux/arm64,linux/amd64 --tag jiriks74/onlyoffice-documentserver:{response.json()["name"].replace("ONLYOFFICE-DocumentServer-", "")} .')
-os.system(f'docker buildx build --push --platform linux/arm64,linux/amd64 --tag jiriks74/onlyoffice-documentserver:{response.json()["name"].replace("ONLYOFFICE-DocumentServer-", "")} .')
-print("///////////////////////////////////////////////////////////////////////////")
-print(f'Build and push ":{response.json()["name"].replace("ONLYOFFICE-DocumentServer-", "")}".........................................finished')
-print("///////////////////////////////////////////////////////////////////////////")
-
diff --git a/cluster.yml b/cluster.yml
new file mode 100644
index 0000000..0cb07c1
--- /dev/null
+++ b/cluster.yml
@@ -0,0 +1,108 @@
+version: '2.1'
+
+x-ds-image:
+  &ds-image
+  ${COMPANY_NAME:-onlyoffice}/${PRODUCT_NAME:-documentserver-de}:${PRODUCT_VERSION:-latest}
+
+services:
+  onlyoffice-documentserver-data:  
+    container_name: onlyoffice-documentserver-data
+    image: *ds-image
+    environment:
+      - ONLYOFFICE_DATA_CONTAINER=true
+      - DB_HOST=onlyoffice-postgresql
+      - DB_PORT=5432
+      - DB_NAME=onlyoffice
+      - DB_USER=onlyoffice
+      - AMQP_URI=amqp://guest:guest@onlyoffice-rabbitmq
+      - REDIS_SERVER_HOST=onlyoffice-redis
+      - REDIS_SERVER_PORT=6379
+      # Uncomment strings below to enable the JSON Web Token validation.
+      #- JWT_ENABLED=true
+      #- JWT_SECRET=secret
+      #- JWT_HEADER=Authorization
+      #- JWT_IN_BODY=true
+    stdin_open: true
+    restart: always
+    volumes:
+       - /etc/onlyoffice
+       - /var/www/onlyoffice/Data
+       - /var/log/onlyoffice
+       - /var/lib/onlyoffice/documentserver/App_Data/cache/files
+       - /var/www/onlyoffice/documentserver-example/public/files
+       - /usr/share/fonts
+       
+  onlyoffice-documentserver:
+    image: *ds-image
+    depends_on:
+      - onlyoffice-documentserver-data
+      - onlyoffice-postgresql
+      - onlyoffice-redis
+      - onlyoffice-rabbitmq
+    environment:
+      - ONLYOFFICE_DATA_CONTAINER_HOST=onlyoffice-documentserver-data
+      - BALANCE=uri depth 3
+      - EXCLUDE_PORTS=443
+      - HTTP_CHECK=GET /healthcheck
+      - EXTRA_SETTINGS=http-check expect string true
+      # Uncomment the string below to redirect HTTP request to HTTPS request.
+      #- FORCE_SSL=true
+    stdin_open: true
+    restart: always
+    expose:
+      - '80'
+    volumes_from:
+     - onlyoffice-documentserver-data
+
+  onlyoffice-haproxy:
+    container_name: onlyoffice-haproxy
+    image: dockercloud/haproxy:1.5.1
+    depends_on:
+      - onlyoffice-documentserver
+    environment:
+      - MODE=http
+      # Uncomment the string below to specify the path of ssl certificates
+      #- CERT_FOLDER=/certs/
+    stdin_open: true
+    links:
+     - onlyoffice-documentserver
+    volumes:
+      - /var/run/docker.sock:/var/run/docker.sock
+      # Uncomment the string below to map a ssl certificate from host
+      # to the proxy container
+      #- /app/onlyoffice/DocumentServer/data/certs/onlyoffice.pem:/certs/cert1.pem
+    restart: always
+    ports:
+      - '80:80'
+      - '443:443'
+      - '1936:1936'
+       
+  onlyoffice-redis:
+    container_name: onlyoffice-redis
+    image: redis
+    restart: always
+    expose:
+      - '6379'
+
+  onlyoffice-rabbitmq:
+    container_name: onlyoffice-rabbitmq
+    image: rabbitmq
+    restart: always
+    expose:
+      - '5672'
+
+  onlyoffice-postgresql:
+    container_name: onlyoffice-postgresql
+    image: postgres:9.5
+    environment:
+      - POSTGRES_DB=onlyoffice
+      - POSTGRES_USER=onlyoffice
+      - POSTGRES_HOST_AUTH_METHOD=trust
+    restart: always
+    expose:
+      - '5432'
+    volumes:
+      - postgresql_data:/var/lib/postgresql
+
+volumes:
+  postgresql_data:
diff --git a/config/supervisor/ds/ds-converter.conf b/config/supervisor/ds/ds-converter.conf
deleted file mode 100644
index 69285cd..0000000
--- a/config/supervisor/ds/ds-converter.conf
+++ /dev/null
@@ -1,13 +0,0 @@
-[program:converter]
-command=/var/www/COMPANY_NAME/documentserver/server/FileConverter/converter
-directory=/var/www/COMPANY_NAME/documentserver/server/FileConverter
-user=ds
-environment=NODE_ENV=production-linux,NODE_CONFIG_DIR=/etc/COMPANY_NAME/documentserver,NODE_DISABLE_COLORS=1,APPLICATION_NAME=COMPANY_NAME
-stdout_logfile=/var/log/COMPANY_NAME/documentserver/converter/out.log
-stdout_logfile_backups=0
-stdout_logfile_maxbytes=0
-stderr_logfile=/var/log/COMPANY_NAME/documentserver/converter/err.log
-stderr_logfile_backups=0
-stderr_logfile_maxbytes=0
-autostart=true
-autorestart=true
diff --git a/config/supervisor/ds/ds-docservice.conf b/config/supervisor/ds/ds-docservice.conf
deleted file mode 100644
index 4afbc1b..0000000
--- a/config/supervisor/ds/ds-docservice.conf
+++ /dev/null
@@ -1,13 +0,0 @@
-[program:docservice]
-command=/var/www/COMPANY_NAME/documentserver/server/DocService/docservice
-directory=/var/www/COMPANY_NAME/documentserver/server/DocService
-user=ds
-environment=NODE_ENV=production-linux,NODE_CONFIG_DIR=/etc/COMPANY_NAME/documentserver,NODE_DISABLE_COLORS=1
-stdout_logfile=/var/log/COMPANY_NAME/documentserver/docservice/out.log
-stdout_logfile_backups=0
-stdout_logfile_maxbytes=0
-stderr_logfile=/var/log/COMPANY_NAME/documentserver/docservice/err.log
-stderr_logfile_backups=0
-stderr_logfile_maxbytes=0
-autostart=true
-autorestart=true
diff --git a/config/supervisor/ds/ds-example.conf b/config/supervisor/ds/ds-example.conf
deleted file mode 100644
index 44fa688..0000000
--- a/config/supervisor/ds/ds-example.conf
+++ /dev/null
@@ -1,14 +0,0 @@
-[program:example]
-command=/var/www/COMPANY_NAME/documentserver-example/example
-directory=/var/www/COMPANY_NAME/documentserver-example/
-user=ds
-environment=NODE_ENV=production-linux,NODE_CONFIG_DIR=/etc/COMPANY_NAME/documentserver-example,NODE_DISABLE_COLORS=1
-stdout_logfile=/var/log/COMPANY_NAME/documentserver-example/out.log
-stdout_logfile_backups=0
-stdout_logfile_maxbytes=0
-stderr_logfile=/var/log/COMPANY_NAME/documentserver-example/err.log
-stderr_logfile_backups=0
-stderr_logfile_maxbytes=0
-autostart=false
-autorestart=true
-redirect_stderr=true
diff --git a/config/supervisor/ds/ds-metrics.conf b/config/supervisor/ds/ds-metrics.conf
deleted file mode 100644
index 1eb858a..0000000
--- a/config/supervisor/ds/ds-metrics.conf
+++ /dev/null
@@ -1,13 +0,0 @@
-[program:metrics]
-command=/var/www/COMPANY_NAME/documentserver/server/Metrics/metrics ./config/config.js
-directory=/var/www/COMPANY_NAME/documentserver/server/Metrics
-user=ds
-environment=NODE_DISABLE_COLORS=1
-stdout_logfile=/var/log/COMPANY_NAME/documentserver/metrics/out.log
-stdout_logfile_backups=0
-stdout_logfile_maxbytes=0
-stderr_logfile=/var/log/COMPANY_NAME/documentserver/metrics/err.log
-stderr_logfile_backups=0
-stderr_logfile_maxbytes=0
-autostart=true
-autorestart=true
diff --git a/config/supervisor/ds/ds.conf b/config/supervisor/ds/ds.conf
deleted file mode 100644
index c9179df..0000000
--- a/config/supervisor/ds/ds.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-[group:ds]
-programs=docservice,converter,metrics,example
diff --git a/config/supervisor/supervisord.conf b/config/supervisor/supervisord.conf
new file mode 100644
index 0000000..27ef634
--- /dev/null
+++ b/config/supervisor/supervisord.conf
@@ -0,0 +1,27 @@
+; supervisor config file
+
+[inet_http_server]
+port = 127.0.0.1:9001
+
+[supervisord]
+logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)
+pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
+childlogdir=/var/log/supervisor            ; ('AUTO' child log dir, default $TEMP)
+
+; the below section must remain in the config file for RPC
+; (supervisorctl/web interface) to work, additional interfaces may be
+; added by defining them in separate rpcinterface: sections
+[rpcinterface:supervisor]
+supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
+
+[supervisorctl]
+serverurl = http://localhost:9001 ; use a unix:// URL  for a unix socket
+
+; The [include] section can just contain the "files" setting.  This
+; setting can list multiple files (separated by whitespace or
+; newlines).  It can also contain wildcards.  The filenames are
+; interpreted as relative to this file.  Included files *cannot*
+; include files themselves.
+
+[include]
+files = /etc/supervisor/conf.d/*.conf
diff --git a/default.nix b/default.nix
deleted file mode 100644
index 5226177..0000000
--- a/default.nix
+++ /dev/null
@@ -1,11 +0,0 @@
-{ pkgs ? (import <nixpkgs> { 
-    config.allowUnfree = true;
-}),
-}:
-pkgs.mkShell {
-  pure = true;
-  packages = with pkgs; [
-    # Choose the build tools that you need
-    act
-  ];
-}
diff --git a/docker-bake.hcl b/docker-bake.hcl
deleted file mode 100644
index 54de0b6..0000000
--- a/docker-bake.hcl
+++ /dev/null
@@ -1,169 +0,0 @@
-variable "TAG" {
-    default = ""
-}
-
-variable "SHORTER_TAG" {
-    default = ""
-}
-
-variable "SHORTEST_TAG" {
-    default = ""
-}
-
-variable "PULL_TAG" {
-    default = ""
-}
-
-variable "COMPANY_NAME" {
-    default = ""
-}
-
-variable "PREFIX_NAME" {
-    default = ""
-}
-
-variable "PRODUCT_EDITION" {
-    default = ""
-}
-
-variable "PRODUCT_NAME" {
-    default = ""
-}
-
-variable "PACKAGE_VERSION" {
-    default = ""
-}
-
-variable "DOCKERFILE" {
-    default = ""
-}
-
-variable "PLATFORM" {
-    default = ""
-}
-
-variable "PACKAGE_BASEURL" {
-    default = ""
-}
-
-variable "PACKAGE_FILE" {
-    default = ""
-}
-
-variable "BUILD_CHANNEL" {
-    default = ""
-}
-
-variable "PUSH_MAJOR" {
-    default = "false"
-}
-
-variable "LATEST" {
-    default = "false"
-}
-
-### ↓ Variables for UCS build ↓
-
-variable "BASE_IMAGE" {
-    default     = ""
-}
-
-variable "PG_VERSION" {
-    default     = ""
-}
-
-variable "UCS_REBUILD" {
-    default = ""
-}
-
-variable "UCS_PREFIX" {
-    default = ""
-}
-
-### ↑ Variables for UCS build ↑
-
-target "documentserver" {
-    target = "documentserver"
-    dockerfile = "${DOCKERFILE}"
-    tags = [
-           "docker.io/${COMPANY_NAME}/${PREFIX_NAME}${PRODUCT_NAME}${PRODUCT_EDITION}:${TAG}",
-           equal("nightly",BUILD_CHANNEL) ? "docker.io/${COMPANY_NAME}/${PREFIX_NAME}${PRODUCT_NAME}${PRODUCT_EDITION}:latest": "",
-           ]
-    platforms = ["${PLATFORM}"]
-    args = {
-        "COMPANY_NAME": "${COMPANY_NAME}"
-        "PRODUCT_NAME": "${PRODUCT_NAME}"
-        "PRODUCT_EDITION": "${PRODUCT_EDITION}"
-        "PACKAGE_VERSION": "${PACKAGE_VERSION}"
-        "PACKAGE_BASEURL": "${PACKAGE_BASEURL}"
-        "PLATFORM": "${PLATFORM}"
-    }
-}
-
-target "documentserver-stable" {
-    target = "documentserver-stable"
-    dockerfile = "production.dockerfile"
-    tags = ["docker.io/${COMPANY_NAME}/${PREFIX_NAME}${PRODUCT_NAME}${PRODUCT_EDITION}:${TAG}",
-            "docker.io/${COMPANY_NAME}/${PREFIX_NAME}${PRODUCT_NAME}${PRODUCT_EDITION}:${SHORTER_TAG}",
-            "docker.io/${COMPANY_NAME}/${PREFIX_NAME}${PRODUCT_NAME}${PRODUCT_EDITION}:${SHORTEST_TAG}",
-            "docker.io/${COMPANY_NAME}/${PREFIX_NAME}${PRODUCT_NAME}${PRODUCT_EDITION}:latest",
-            equal("-ee",PRODUCT_EDITION) ? "docker.io/${COMPANY_NAME}4enterprise/${PREFIX_NAME}${PRODUCT_NAME}${PRODUCT_EDITION}:${TAG}": "",]
-    platforms = ["linux/amd64", "linux/arm64"]
-    args = {
-        "PULL_TAG": "${PULL_TAG}"
-        "COMPANY_NAME": "${COMPANY_NAME}"
-        "PRODUCT_NAME": "${PRODUCT_NAME}"
-        "PRODUCT_EDITION": "${PRODUCT_EDITION}"
-    }
-}
-
-target "documentserver-ucs" {
-    target = "documentserver"
-    dockerfile = "${DOCKERFILE}"
-    tags = [
-           "docker.io/${COMPANY_NAME}/${PRODUCT_NAME}${PRODUCT_EDITION}-ucs:${TAG}"
-           ]
-    platforms = ["linux/amd64", "linux/arm64"]
-    args = {
-        "PRODUCT_EDITION": "${PRODUCT_EDITION}"
-        "PRODUCT_NAME": "${PRODUCT_NAME}"
-        "COMPANY_NAME": "${COMPANY_NAME}"
-        "PACKAGE_VERSION": "${PACKAGE_VERSION}"
-        "PACKAGE_BASEURL": "${PACKAGE_BASEURL}"
-        "BASE_IMAGE": "${BASE_IMAGE}"
-        "PG_VERSION": "${PG_VERSION}"
-    }
-}
-
-target "documentserver-nonexample" {
-    target = "documentserver-nonexample"
-    dockerfile = "production.dockerfile"
-    tags = [ "docker.io/${COMPANY_NAME}/${PRODUCT_NAME}${PREFIX_NAME}${PRODUCT_EDITION}:${TAG}-nonexample" ]
-    platforms = ["linux/amd64", "linux/arm64"]
-    args = {
-        "PULL_TAG": "${PULL_TAG}"
-        "COMPANY_NAME": "${COMPANY_NAME}"
-        "PRODUCT_NAME": "${PRODUCT_NAME}"
-        "PRODUCT_EDITION": "${PRODUCT_EDITION}"
-    } 
-}
-
-target "documentserver-stable-rebuild" {
-    target = "documentserver-stable-rebuild"
-    dockerfile = "production.dockerfile"
-    tags = equal("true",UCS_REBUILD) ? ["docker.io/${COMPANY_NAME}/${PREFIX_NAME}${PRODUCT_NAME}${PRODUCT_EDITION}-ucs:${TAG}",] : [
-                                        "docker.io/${COMPANY_NAME}/${PREFIX_NAME}${PRODUCT_NAME}${PRODUCT_EDITION}:${TAG}",
-                equal("",PREFIX_NAME) ? "docker.io/${COMPANY_NAME}/${PREFIX_NAME}${PRODUCT_NAME}${PRODUCT_EDITION}:${SHORTER_TAG}": "",
-             equal("true",PUSH_MAJOR) ? "docker.io/${COMPANY_NAME}/${PREFIX_NAME}${PRODUCT_NAME}${PRODUCT_EDITION}:${SHORTEST_TAG}": "",
-                equal("",PREFIX_NAME) && equal("true",LATEST) ? "docker.io/${COMPANY_NAME}/${PREFIX_NAME}${PRODUCT_NAME}${PRODUCT_EDITION}:latest": "",
-         equal("-ee",PRODUCT_EDITION) && equal("",PREFIX_NAME) ? "docker.io/${COMPANY_NAME}4enterprise/${PREFIX_NAME}${PRODUCT_NAME}${PRODUCT_EDITION}:${TAG}": "",
-                                 ]
-    platforms = ["linux/amd64", "linux/arm64"]
-    args = {
-        "UCS_PREFIX": "${UCS_PREFIX}"
-        "PULL_TAG": "${PULL_TAG}"
-        "COMPANY_NAME": "${COMPANY_NAME}"
-        "PRODUCT_NAME": "${PRODUCT_NAME}"
-        "PRODUCT_EDITION": "${PRODUCT_EDITION}"
-    }
-}
diff --git a/docker-compose.yml b/docker-compose.yml
index 3684adf..51fafb2 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -17,20 +17,15 @@ services:
       # Uncomment strings below to enable the JSON Web Token validation.
       #- JWT_ENABLED=true
       #- JWT_SECRET=secret
-      #- JWT_HEADER=AuthorizationJwt
+      #- JWT_HEADER=Authorization
       #- JWT_IN_BODY=true
-      # Uncomment the line below to set larger file limits (about 1GB)
-      #- LARGER_FILE_LIMITS=true
     ports:
       - '80:80'
       - '443:443'
     stdin_open: true
     restart: always
-    stop_grace_period: 120s
+    stop_grace_period: 60s
     volumes:
-       # Uncomment the line below to get access to the slide themes directory.
-       # To use the themes, copy them to the slideThemes directory and run `docker exec -it <container-name> /usr/bin/documentserver-generate-allfonts.sh`
-       #- ./slideThemes:/var/www/onlyoffice/documentserver/sdkjs/slide/themes/src
        - /var/www/onlyoffice/Data
        - /var/log/onlyoffice
        - /var/lib/onlyoffice/documentserver/App_Data/cache/files
@@ -46,7 +41,7 @@ services:
 
   onlyoffice-postgresql:
     container_name: onlyoffice-postgresql
-    image: postgres:12
+    image: postgres:9.5
     environment:
       - POSTGRES_DB=onlyoffice
       - POSTGRES_USER=onlyoffice
diff --git a/production.dockerfile b/production.dockerfile
deleted file mode 100644
index 24c6569..0000000
--- a/production.dockerfile
+++ /dev/null
@@ -1,33 +0,0 @@
-### Arguments avavlivable only for FROM instruction ### 
-ARG PULL_TAG=latest
-ARG COMPANY_NAME=onlyoffice
-ARG PRODUCT_EDITION=
-### Rebuild arguments
-ARG UCS_PREFIX=
-ARG IMAGE=${COMPANY_NAME}/documentserver${PRODUCT_EDITION}${UCS_PREFIX}:${PULL_TAG}
-
-### Build main-release ###
-
-FROM ${COMPANY_NAME}/4testing-documentserver${PRODUCT_EDITION}:${PULL_TAG} as documentserver-stable
-
-### Rebuild stable images with secure updates 
-FROM ${IMAGE} as documentserver-stable-rebuild
-RUN    echo "This is rebuild" \
-    && apt-get update -y \
-    && apt-get upgrade -y
-
-### Build nonexample ###
- 
-FROM ${COMPANY_NAME}/documentserver${PRODUCT_EDITION}:${PULL_TAG} as documentserver-nonexample
-
-ARG COMPANY_NAME=onlyoffice
-ARG PRODUCT_NAME=documentserver
-ARG DS_SUPERVISOR_CONF=/etc/supervisor/conf.d/ds.conf
-
-### Remove all documentserver-example data ###
-
-RUN    rm -rf /var/www/$COMPANY_NAME/$PRODUCT_NAME-example \
-    && rm -rf /etc/$COMPANY_NAME/$PRODUCT_NAME-example \
-    && rm -f $DS_SUPERVISOR_CONF \ 
-    && rm -f /etc/nginx/includes/ds-example.conf \
-    && ln -s /etc/$COMPANY_NAME/$PRODUCT_NAME/supervisor/ds.conf  $DS_SUPERVISOR_CONF 
diff --git a/run-document-server.sh b/run-document-server.sh
old mode 100644
new mode 100755
index 79975ab..2bcdcc2
--- a/run-document-server.sh
+++ b/run-document-server.sh
@@ -1,12 +1,7 @@
 #!/bin/bash
 
-umask 0022
-
 function clean_exit {
-  if [ ${ONLYOFFICE_DATA_CONTAINER} == "false" ] && \
-  [ ${ONLYOFFICE_DATA_CONTAINER_HOST} == "localhost" ]; then
-    /usr/bin/documentserver-prepare4shutdown.sh
-  fi
+  /usr/bin/documentserver-prepare4shutdown.sh
 }
 
 trap clean_exit SIGTERM
@@ -42,21 +37,14 @@ if [ "${RELEASE_DATE}" != "${PREV_RELEASE_DATE}" ]; then
   fi
 fi
 
-SSL_CERTIFICATES_DIR="/usr/share/ca-certificates/ds"
-mkdir -p ${SSL_CERTIFICATES_DIR}
-if [[ -d ${DATA_DIR}/certs ]] && [ -e ${DATA_DIR}/certs/*.crt ]; then
-  cp -f ${DATA_DIR}/certs/* ${SSL_CERTIFICATES_DIR}
-  chmod 644 ${SSL_CERTIFICATES_DIR}/*.crt ${SSL_CERTIFICATES_DIR}/*.pem
-  chmod 400 ${SSL_CERTIFICATES_DIR}/*.key
-fi
-
-if [[ -z $SSL_CERTIFICATE_PATH ]] && [[ -f ${SSL_CERTIFICATES_DIR}/${COMPANY_NAME}.crt ]]; then
-  SSL_CERTIFICATE_PATH=${SSL_CERTIFICATES_DIR}/${COMPANY_NAME}.crt
+SSL_CERTIFICATES_DIR="${DATA_DIR}/certs"
+if [[ -z $SSL_CERTIFICATE_PATH ]] && [[ -f ${SSL_CERTIFICATES_DIR}/onlyoffice.crt ]]; then
+  SSL_CERTIFICATE_PATH=${SSL_CERTIFICATES_DIR}/onlyoffice.crt
 else
   SSL_CERTIFICATE_PATH=${SSL_CERTIFICATE_PATH:-${SSL_CERTIFICATES_DIR}/tls.crt}
 fi
-if [[ -z $SSL_KEY_PATH ]] && [[ -f ${SSL_CERTIFICATES_DIR}/${COMPANY_NAME}.key ]]; then
-  SSL_KEY_PATH=${SSL_CERTIFICATES_DIR}/${COMPANY_NAME}.key
+if [[ -z $SSL_KEY_PATH ]] && [[ -f ${SSL_CERTIFICATES_DIR}/onlyoffice.key ]]; then
+  SSL_KEY_PATH=${SSL_CERTIFICATES_DIR}/onlyoffice.key
 else
   SSL_KEY_PATH=${SSL_KEY_PATH:-${SSL_CERTIFICATES_DIR}/tls.key}
 fi
@@ -76,31 +64,18 @@ NGINX_ONLYOFFICE_EXAMPLE_CONF="${NGINX_ONLYOFFICE_EXAMPLE_PATH}/includes/ds-exam
 
 NGINX_CONFIG_PATH="/etc/nginx/nginx.conf"
 NGINX_WORKER_PROCESSES=${NGINX_WORKER_PROCESSES:-1}
-# Limiting the maximum number of simultaneous connections due to possible memory shortage
-[ $(ulimit -n) -gt 1048576 ] && NGINX_WORKER_CONNECTIONS=${NGINX_WORKER_CONNECTIONS:-1048576} || NGINX_WORKER_CONNECTIONS=${NGINX_WORKER_CONNECTIONS:-$(ulimit -n)}
+NGINX_WORKER_CONNECTIONS=${NGINX_WORKER_CONNECTIONS:-$(ulimit -n)}
 
-JWT_ENABLED=${JWT_ENABLED:-true}
-
-# validate user's vars before usinig in json
-if [ "${JWT_ENABLED}" == "true" ]; then
-  JWT_ENABLED="true"
-else
-  JWT_ENABLED="false"
-fi
-
-[ -z $JWT_SECRET ] && JWT_MESSAGE='JWT is enabled by default. A random secret is generated automatically. Run the command "docker exec $(sudo docker ps -q) sudo documentserver-jwt-status.sh" to get information about JWT.'
-
-JWT_SECRET=${JWT_SECRET:-$(pwgen -s 32)}
+JWT_ENABLED=${JWT_ENABLED:-false}
+JWT_SECRET=${JWT_SECRET:-secret}
 JWT_HEADER=${JWT_HEADER:-Authorization}
 JWT_IN_BODY=${JWT_IN_BODY:-false}
 
 WOPI_ENABLED=${WOPI_ENABLED:-false}
-ALLOW_META_IP_ADDRESS=${ALLOW_META_IP_ADDRESS:-false}
-ALLOW_PRIVATE_IP_ADDRESS=${ALLOW_PRIVATE_IP_ADDRESS:-false}
 
 GENERATE_FONTS=${GENERATE_FONTS:-true}
 
-if [[ ${PRODUCT_NAME}${PRODUCT_EDITION} == "documentserver" ]]; then
+if [[ ${PRODUCT_NAME} == "documentserver" ]]; then
   REDIS_ENABLED=false
 else
   REDIS_ENABLED=true
@@ -205,7 +180,7 @@ parse_rabbitmq_url(){
   # extract the host
   local hostport="$(echo ${url/$userpass@/} | cut -d/ -f1)"
   # by request - try to extract the port
-  local port="$(echo $hostport | grep : | sed -r 's_^.*:+|/.*$__g')"
+  local port="$(echo $hostport | sed -e 's,^.*:,:,g' -e 's,.*:\([0-9]*\).*,\1,g' -e 's,[^0-9],,g')"
 
   local host
   if [ -n "$port" ]; then
@@ -309,37 +284,33 @@ update_rabbitmq_setting(){
 }
 
 update_redis_settings(){
-  ${JSON} -I -e "if(this.services.CoAuthoring.redis===undefined)this.services.CoAuthoring.redis={};"
   ${JSON} -I -e "this.services.CoAuthoring.redis.host = '${REDIS_SERVER_HOST}'"
   ${JSON} -I -e "this.services.CoAuthoring.redis.port = '${REDIS_SERVER_PORT}'"
-
-  if [ -n "${REDIS_SERVER_PASS}" ]; then
-    ${JSON} -I -e "this.services.CoAuthoring.redis.options = {'password':'${REDIS_SERVER_PASS}'}"
-  fi
-
 }
 
 update_ds_settings(){
-  ${JSON} -I -e "this.services.CoAuthoring.token.enable.browser = ${JWT_ENABLED}"
-  ${JSON} -I -e "this.services.CoAuthoring.token.enable.request.inbox = ${JWT_ENABLED}"
-  ${JSON} -I -e "this.services.CoAuthoring.token.enable.request.outbox = ${JWT_ENABLED}"
+  if [ "${JWT_ENABLED}" == "true" ]; then
+    ${JSON} -I -e "this.services.CoAuthoring.token.enable.browser = ${JWT_ENABLED}"
+    ${JSON} -I -e "this.services.CoAuthoring.token.enable.request.inbox = ${JWT_ENABLED}"
+    ${JSON} -I -e "this.services.CoAuthoring.token.enable.request.outbox = ${JWT_ENABLED}"
 
-  ${JSON} -I -e "this.services.CoAuthoring.secret.inbox.string = '${JWT_SECRET}'"
-  ${JSON} -I -e "this.services.CoAuthoring.secret.outbox.string = '${JWT_SECRET}'"
-  ${JSON} -I -e "this.services.CoAuthoring.secret.session.string = '${JWT_SECRET}'"
+    ${JSON} -I -e "this.services.CoAuthoring.secret.inbox.string = '${JWT_SECRET}'"
+    ${JSON} -I -e "this.services.CoAuthoring.secret.outbox.string = '${JWT_SECRET}'"
+    ${JSON} -I -e "this.services.CoAuthoring.secret.session.string = '${JWT_SECRET}'"
 
-  ${JSON} -I -e "this.services.CoAuthoring.token.inbox.header = '${JWT_HEADER}'"
-  ${JSON} -I -e "this.services.CoAuthoring.token.outbox.header = '${JWT_HEADER}'"
+    ${JSON} -I -e "this.services.CoAuthoring.token.inbox.header = '${JWT_HEADER}'"
+    ${JSON} -I -e "this.services.CoAuthoring.token.outbox.header = '${JWT_HEADER}'"
 
-  ${JSON} -I -e "this.services.CoAuthoring.token.inbox.inBody = ${JWT_IN_BODY}"
-  ${JSON} -I -e "this.services.CoAuthoring.token.outbox.inBody = ${JWT_IN_BODY}"
+    ${JSON} -I -e "this.services.CoAuthoring.token.inbox.inBody = ${JWT_IN_BODY}"
+    ${JSON} -I -e "this.services.CoAuthoring.token.outbox.inBody = ${JWT_IN_BODY}"
 
-  if [ -f "${ONLYOFFICE_EXAMPLE_CONFIG}" ]; then
-    ${JSON_EXAMPLE} -I -e "this.server.token.enable = ${JWT_ENABLED}"
-    ${JSON_EXAMPLE} -I -e "this.server.token.secret = '${JWT_SECRET}'"
-    ${JSON_EXAMPLE} -I -e "this.server.token.authorizationHeader = '${JWT_HEADER}'"
+    if [ -f "${ONLYOFFICE_EXAMPLE_CONFIG}" ] && [ "${JWT_ENABLED}" == "true" ]; then
+      ${JSON_EXAMPLE} -I -e "this.server.token.enable = ${JWT_ENABLED}"
+      ${JSON_EXAMPLE} -I -e "this.server.token.secret = '${JWT_SECRET}'"
+      ${JSON_EXAMPLE} -I -e "this.server.token.authorizationHeader = '${JWT_HEADER}'"
+    fi
   fi
- 
+
   if [ "${USE_UNAUTHORIZED_STORAGE}" == "true" ]; then
     ${JSON} -I -e "if(this.services.CoAuthoring.requestDefaults===undefined)this.services.CoAuthoring.requestDefaults={}"
     ${JSON} -I -e "if(this.services.CoAuthoring.requestDefaults.rejectUnauthorized===undefined)this.services.CoAuthoring.requestDefaults.rejectUnauthorized=false"
@@ -349,12 +320,6 @@ update_ds_settings(){
     ${JSON} -I -e "if(this.wopi===undefined)this.wopi={}"
     ${JSON} -I -e "this.wopi.enable = true"
   fi
-
-  if [ "${ALLOW_META_IP_ADDRESS}" = "true" ] || [ "${ALLOW_PRIVATE_IP_ADDRESS}" = "true" ]; then
-    ${JSON} -I -e "if(this.services.CoAuthoring['request-filtering-agent']===undefined)this.services.CoAuthoring['request-filtering-agent']={}"
-    [ "${ALLOW_META_IP_ADDRESS}" = "true" ] && ${JSON} -I -e "this.services.CoAuthoring['request-filtering-agent'].allowMetaIPAddress = true"
-    [ "${ALLOW_PRIVATE_IP_ADDRESS}" = "true" ] && ${JSON} -I -e "this.services.CoAuthoring['request-filtering-agent'].allowPrivateIPAddress = true"
-  fi
 }
 
 create_postgresql_cluster(){
@@ -369,8 +334,9 @@ create_postgresql_cluster(){
 }
 
 create_postgresql_db(){
+  sudo -u postgres psql -c "CREATE DATABASE $DB_NAME;"
   sudo -u postgres psql -c "CREATE USER $DB_USER WITH password '"$DB_PWD"';"
-  sudo -u postgres psql -c "CREATE DATABASE $DB_NAME OWNER $DB_USER;"
+  sudo -u postgres psql -c "GRANT ALL privileges ON DATABASE $DB_NAME TO $DB_USER;"
 }
 
 create_db_tbl() {
@@ -437,16 +403,11 @@ update_welcome_page() {
   WELCOME_PAGE="${APP_DIR}-example/welcome/docker.html"
   if [[ -e $WELCOME_PAGE ]]; then
     DOCKER_CONTAINER_ID=$(basename $(cat /proc/1/cpuset))
-    (( ${#DOCKER_CONTAINER_ID} < 12 )) && DOCKER_CONTAINER_ID=$(hostname)
-    if (( ${#DOCKER_CONTAINER_ID} >= 12 )); then
-      if [[ -x $(command -v docker) ]]; then
-        DOCKER_CONTAINER_NAME=$(docker inspect --format="{{.Name}}" $DOCKER_CONTAINER_ID)
-        sed 's/$(sudo docker ps -q)/'"${DOCKER_CONTAINER_NAME#/}"'/' -i $WELCOME_PAGE
-        JWT_MESSAGE=$(echo $JWT_MESSAGE | sed 's/$(sudo docker ps -q)/'"${DOCKER_CONTAINER_NAME#/}"'/')
-      else
-        sed 's/$(sudo docker ps -q)/'"${DOCKER_CONTAINER_ID::12}"'/' -i $WELCOME_PAGE
-        JWT_MESSAGE=$(echo $JWT_MESSAGE | sed 's/$(sudo docker ps -q)/'"${DOCKER_CONTAINER_ID::12}"'/')
-      fi
+    if [[ -x $(command -v docker) ]]; then
+      DOCKER_CONTAINER_NAME=$(docker inspect --format="{{.Name}}" $DOCKER_CONTAINER_ID)
+      sed 's/$(sudo docker ps -q)/'"${DOCKER_CONTAINER_NAME#/}"'/' -i $WELCOME_PAGE
+    else
+      sed 's/$(sudo docker ps -q)/'"${DOCKER_CONTAINER_ID::12}"'/' -i $WELCOME_PAGE
     fi
   fi
 }
@@ -498,8 +459,13 @@ update_nginx_settings(){
   if [ -f "${NGINX_ONLYOFFICE_EXAMPLE_CONF}" ]; then
     sed 's/linux/docker/' -i ${NGINX_ONLYOFFICE_EXAMPLE_CONF}
   fi
+}
 
-  documentserver-update-securelink.sh -s ${SECURE_LINK_SECRET:-$(pwgen -s 20)} -r false
+update_supervisor_settings(){
+  # Copy modified supervisor start script
+  cp ${SYSCONF_TEMPLATES_DIR}/supervisor/supervisor /etc/init.d/
+  # Copy modified supervisor config
+  cp ${SYSCONF_TEMPLATES_DIR}/supervisor/supervisord.conf /etc/supervisor/supervisord.conf
 }
 
 update_log_settings(){
@@ -528,7 +494,7 @@ for i in ${DS_LIB_DIR}/App_Data/cache/files ${DS_LIB_DIR}/App_Data/docbuilder ${
 done
 
 # change folder rights
-for i in ${LOG_DIR} ${LIB_DIR}; do
+for i in ${LOG_DIR} ${LIB_DIR} ${DATA_DIR}; do
   chown -R ds:ds "$i"
   chmod -R 755 "$i"
 done
@@ -602,8 +568,6 @@ else
   update_welcome_page
 fi
 
-find /etc/${COMPANY_NAME} ! -path '*logrotate*' -exec chown ds:ds {} \;
-
 #start needed local services
 for i in ${LOCAL_SERVICES[@]}; do
   service $i start
@@ -627,7 +591,8 @@ if [ ${ONLYOFFICE_DATA_CONTAINER} != "true" ]; then
   fi
 
   update_nginx_settings
-  
+
+  update_supervisor_settings
   service supervisor start
   
   # start cron to enable log rotating
@@ -651,32 +616,5 @@ if [ "${GENERATE_FONTS}" == "true" ]; then
 fi
 documentserver-static-gzip.sh ${ONLYOFFICE_DATA_CONTAINER}
 
-echo "${JWT_MESSAGE}" 
-
-# Check if lager file limits should be set
-if [ "$LARGER_FILE_LIMITS" = "true" ]; then
-    if [ -e /app/ds/file_limits_set ]; then
-        echo ""
-    else
-        touch /app/ds/file_limits_set
-
-        sed -i -e 's/104857600/10485760000/g' /etc/onlyoffice/documentserver-example/production-linux.json
-        
-        sed -i '9iclient_max_body_size 1000M;' /etc/onlyoffice/documentserver-example/nginx/includes/ds-example.conf
-        sed -i '16iclient_max_body_size 1000M;' /etc/nginx/nginx.conf
-        
-        sed -i -e 's/104857600/10485760000/g' /etc/onlyoffice/documentserver/default.json
-        sed -i -e 's/50MB/5000MB/g' /etc/onlyoffice/documentserver/default.json
-        sed -i -e 's/300MB/3000MB/g' /etc/onlyoffice/documentserver/default.json
-        
-        sed -i 's/^client_max_body_size 100m;$/client_max_body_size 1000m;/' /etc/onlyoffice/documentserver/nginx/includes/ds-common.conf
-
-        service nginx restart
-        supervisorctl restart all
-        
-    fi
-fi
-
 tail -f /var/log/${COMPANY_NAME}/**/*.log &
 wait $!
-
diff --git a/slideThemes/01_blank.pptx b/slideThemes/01_blank.pptx
deleted file mode 100644
index 09e243b..0000000
Binary files a/slideThemes/01_blank.pptx and /dev/null differ
diff --git a/slideThemes/02_basic.pptx b/slideThemes/02_basic.pptx
deleted file mode 100644
index 5e08ac3..0000000
Binary files a/slideThemes/02_basic.pptx and /dev/null differ
diff --git a/slideThemes/03_classic.pptx b/slideThemes/03_classic.pptx
deleted file mode 100644
index 4e009f8..0000000
Binary files a/slideThemes/03_classic.pptx and /dev/null differ
diff --git a/slideThemes/04_official.pptx b/slideThemes/04_official.pptx
deleted file mode 100644
index 84aab37..0000000
Binary files a/slideThemes/04_official.pptx and /dev/null differ
diff --git a/slideThemes/05_green leaf.pptx b/slideThemes/05_green leaf.pptx
deleted file mode 100644
index d92b846..0000000
Binary files a/slideThemes/05_green leaf.pptx and /dev/null differ
diff --git a/slideThemes/06_lines.pptx b/slideThemes/06_lines.pptx
deleted file mode 100644
index ed7394f..0000000
Binary files a/slideThemes/06_lines.pptx and /dev/null differ
diff --git a/slideThemes/07_office.pptx b/slideThemes/07_office.pptx
deleted file mode 100644
index 6ab99d6..0000000
Binary files a/slideThemes/07_office.pptx and /dev/null differ
diff --git a/slideThemes/08_safari.pptx b/slideThemes/08_safari.pptx
deleted file mode 100644
index e1e6362..0000000
Binary files a/slideThemes/08_safari.pptx and /dev/null differ
diff --git a/slideThemes/09_dotted.pptx b/slideThemes/09_dotted.pptx
deleted file mode 100644
index 6fe7c2a..0000000
Binary files a/slideThemes/09_dotted.pptx and /dev/null differ
diff --git a/slideThemes/10_corner.pptx b/slideThemes/10_corner.pptx
deleted file mode 100644
index 1b6ce8e..0000000
Binary files a/slideThemes/10_corner.pptx and /dev/null differ
diff --git a/slideThemes/11_tort.pptx b/slideThemes/11_tort.pptx
deleted file mode 100644
index b7c5858..0000000
Binary files a/slideThemes/11_tort.pptx and /dev/null differ
diff --git a/tests/activemq.yml b/tests/activemq.yml
new file mode 100644
index 0000000..5781c64
--- /dev/null
+++ b/tests/activemq.yml
@@ -0,0 +1,32 @@
+version: '2.1'
+services:
+  onlyoffice-documentserver:
+    container_name: onlyoffice-documentserver
+    build:
+      context: ../.
+    environment:
+      - AMQP_TYPE=${AMQP_TYPE:-activemq}
+      - AMQP_URI=${AMQP_URI:-amqp://guest:guest@onlyoffice-activemq}
+    stdin_open: true
+    restart: always
+    ports:
+      - '80:80'
+      - '443:443'
+    networks:
+      - onlyoffice
+
+  onlyoffice-activemq:
+    container_name: onlyoffice-activemq
+    image: webcenter/activemq:${ACTIVEMQ_VERSION:-5.14.3}
+    environment:
+      - ACTIVEMQ_USERS_guest=${ACTIVEMQ_USERS_guest:-guest}
+      - ACTIVEMQ_GROUPS_owners=${ACTIVEMQ_GROUPS_owners:-guest}
+    restart: always
+    networks:
+     - onlyoffice
+    expose:
+      - '5672'
+
+networks:
+  onlyoffice:
+    driver: 'bridge'
diff --git a/tests/certs-customized.yml b/tests/certs-customized.yml
new file mode 100644
index 0000000..af73081
--- /dev/null
+++ b/tests/certs-customized.yml
@@ -0,0 +1,18 @@
+version: '2.1'
+services:
+  onlyoffice-documentserver:
+    container_name: onlyoffice-documentserver
+    build:
+      context: ../.
+    environment:
+      - SSL_CERTIFICATE_PATH=${SSL_CERTIFICATE_PATH:-/var/www/onlyoffice/Data/certs/tls.crt}
+      - SSL_KEY_PATH=${SSL_KEY_PATH:-/var/www/onlyoffice/Data/certs/tls.key}
+      - CA_CERTIFICATES_PATH=${CA_CERTIFICATES_PATH:-/var/www/onlyoffice/Data/certs/ca-certificates.pem}
+      - SSL_DHPARAM_PATH=${SSL_DHPARAM_PATH:-/var/www/onlyoffice/Data/certs/dhparam.pem}
+    stdin_open: true
+    restart: always
+    ports:
+      - '80:80'
+      - '443:443'
+    volumes:
+      - ./data:/var/www/onlyoffice/Data
diff --git a/tests/certs.yml b/tests/certs.yml
new file mode 100644
index 0000000..77d37ce
--- /dev/null
+++ b/tests/certs.yml
@@ -0,0 +1,13 @@
+version: '2.1'
+services:
+  onlyoffice-documentserver:
+    container_name: onlyoffice-documentserver
+    build:
+      context: ../.
+    stdin_open: true
+    restart: always
+    ports:
+      - '80:80'
+      - '443:443'
+    volumes:
+      - ./data:/var/www/onlyoffice/Data
diff --git a/tests/graphite.yml b/tests/graphite.yml
new file mode 100644
index 0000000..2bc4694
--- /dev/null
+++ b/tests/graphite.yml
@@ -0,0 +1,32 @@
+version: '2.1'
+services:
+  onlyoffice-documentserver:
+    container_name: onlyoffice-documentserver
+    build:
+      context: ../.
+    depends_on:
+      - onlyoffice-graphite
+    environment:
+      - METRICS_ENABLED=${METRICS_ENABLED:-true}
+      - METRICS_HOST=${METRICS_HOST:-localhost}
+      - METRICS_PORT=${METRICS_PORT:-8125}
+      - METRICS_PREFIX=${METRICS_PREFIX:-ds.}
+    stdin_open: true
+    restart: always
+    expose:
+      - '2003'
+    ports:
+      - '80:80'
+    volumes:
+      - ./graphite/statsd:/var/www/onlyoffice/documentserver/server/Metrics/config
+
+  onlyoffice-graphite:
+    container_name: onlyoffice-graphite
+    image: graphiteapp/graphite-statsd
+    environment:
+      - GRAPHITE_STATSD_HOST=${GRAPHITE_STATSD_HOST:-onlyoffice-documentserver}
+      - GRAPHITE_TIME_ZONE=${GRAPHITE_TIME_ZONE:-Etc/UTC}
+    ports:
+      - '8888:80'
+    stdin_open: true
+    restart: always
diff --git a/tests/graphite/statsd/config.js b/tests/graphite/statsd/config.js
new file mode 100644
index 0000000..2ebffe6
--- /dev/null
+++ b/tests/graphite/statsd/config.js
@@ -0,0 +1,7 @@
+{
+  "graphiteHost": "onlyoffice-graphite",
+  "graphitePort": 2003,
+  "port": 8125,
+  "flushInterval": 60000,
+  "backends": [ "./backends/graphite.js" ]
+}
diff --git a/tests/mariadb.yml b/tests/mariadb.yml
new file mode 100644
index 0000000..4bb8de5
--- /dev/null
+++ b/tests/mariadb.yml
@@ -0,0 +1,36 @@
+version: '2.1'
+services:
+  ds:
+    container_name: ds
+    build:
+      context: ../.
+    depends_on:
+      - onlyoffice-mariadb
+    environment:
+      - DB_TYPE=${DB_TYPE:-mysql}
+      - DB_HOST=${DB_HOST:-onlyoffice-mariadb}
+      - DB_PORT=${DB_PORT:-3306}
+      - DB_NAME=${DB_NAME:-onlyoffice}
+      - DB_USER=${DB_USER:-onlyoffice}
+      - DB_PWD=${DB_PWD:-onlyoffice}
+    stdin_open: true
+    restart: always
+    ports:
+      - '80:80'
+
+  onlyoffice-mariadb:
+    container_name: onlyoffice-mariadb
+    image: mariadb:${MARIADB_VERSION:-10.5}
+    environment:
+      - MYSQL_DATABASE=${MYSQL_DATABASE:-onlyoffice}
+      - MYSQL_USER=${MYSQL_USER:-onlyoffice}
+      - MYSQL_PASSWORD=${MYSQL_PASSWORD:-onlyoffice}
+      - MYSQL_ALLOW_EMPTY_PASSWORD=${MYSQL_ALLOW_EMPTY_PASSWORD:-yes}
+    restart: always
+    volumes:
+      - mysql_data:/var/lib/mysql
+    expose:
+      - '3306'
+
+volumes:
+  mysql_data:
diff --git a/tests/mysql.yml b/tests/mysql.yml
new file mode 100644
index 0000000..20fcd70
--- /dev/null
+++ b/tests/mysql.yml
@@ -0,0 +1,37 @@
+version: '2.1'
+services:
+  onlyoffice-documentserver:
+    container_name: onlyoffice-documentserver
+    build:
+      context: ../.
+    depends_on:
+      - onlyoffice-mysql
+    environment:
+      - DB_TYPE=${DB_TYPE:-mysql}
+      - DB_HOST=${DB_HOST:-onlyoffice-mysql}
+      - DB_PORT=${DB_PORT:-3306}
+      - DB_NAME=${DB_NAME:-onlyoffice}
+      - DB_USER=${DB_USER:-onlyoffice}
+      - DB_PWD=${DB_PWD:-onlyoffice}
+    stdin_open: true
+    restart: always
+    ports:
+      - '80:80'
+
+  onlyoffice-mysql:
+    container_name: onlyoffice-mysql
+    image: mysql:${MYSQL_VERSION:-5.7}
+    command: --default-authentication-plugin=mysql_native_password
+    environment:
+      - MYSQL_DATABASE=${MYSQL_DATABASE:-onlyoffice}
+      - MYSQL_USER=${MYSQL_USER:-onlyoffice}
+      - MYSQL_PASSWORD=${MYSQL_PASSWORD:-onlyoffice}
+      - MYSQL_ALLOW_EMPTY_PASSWORD=${MYSQL_ALLOW_EMPTY_PASSWORD:-yes}
+    restart: always
+    volumes:
+      - mysql_data:/var/lib/mysql
+    expose:
+      - '3306'
+
+volumes:
+  mysql_data:
diff --git a/tests/postgres-old.yml b/tests/postgres-old.yml
new file mode 100644
index 0000000..237246c
--- /dev/null
+++ b/tests/postgres-old.yml
@@ -0,0 +1,34 @@
+version: '2.1'
+services:
+  onlyoffice-documentserver:
+    container_name: onlyoffice-documentserver
+    build:
+      context: ../.
+    depends_on:
+      - onlyoffice-postgresql
+    environment:
+      - POSTGRESQL_SERVER_HOST=${DB_HOST:-onlyoffice-postgresql}
+      - POSTGRESQL_SERVER_PORT=${DB_PORT:-5432}
+      - POSTGRESQL_SERVER_DB_NAME=${DB_NAME:-onlyoffice}
+      - POSTGRESQL_SERVER_USER=${DB_USER:-onlyoffice}
+      - POSTGRESQL_SERVER_PASS=${DB_PWD:-onlyoffice}
+    stdin_open: true
+    restart: always
+    ports:
+      - '80:80'
+
+  onlyoffice-postgresql:
+    container_name: onlyoffice-postgresql
+    image: postgres:9.5
+    environment:
+      - POSTGRES_DB=${POSTGRES_DB:-onlyoffice}
+      - POSTGRES_USER=${POSTGRES_USER:-onlyoffice}
+      - POSTGRES_HOST_AUTH_METHOD=${POSTGRES_HOST_AUTH_METHOD:-trust}
+    restart: always
+    expose:
+      - '5432'
+    volumes:
+      - postgresql_data:/var/lib/postgresql
+
+volumes:
+  postgresql_data:
diff --git a/tests/postgres.yml b/tests/postgres.yml
index bb0b418..8333b10 100644
--- a/tests/postgres.yml
+++ b/tests/postgres.yml
@@ -20,7 +20,7 @@ services:
 
   onlyoffice-postgresql:
     container_name: onlyoffice-postgresql
-    image: postgres:${POSTGRES_VERSION:-12}
+    image: postgres:${POSTGRES_VERSION:-9.5}
     environment:
       - POSTGRES_DB=${POSTGRES_DB:-onlyoffice}
       - POSTGRES_USER=${POSTGRES_USER:-onlyoffice}
diff --git a/tests/prometheus.yml b/tests/prometheus.yml
deleted file mode 100644
index 3750576..0000000
--- a/tests/prometheus.yml
+++ /dev/null
@@ -1,46 +0,0 @@
-version: '2.1'
-services:
-  onlyoffice-documentserver:
-    container_name: onlyoffice-documentserver
-    build:
-      context: ../.
-    depends_on:
-      - onlyoffice-statsd-exporter
-    environment:
-      - METRICS_ENABLED=${METRICS_ENABLED:-true}
-      - METRICS_HOST=${METRICS_HOST:-onlyoffice-statsd-exporter}
-      - METRICS_PORT=${METRICS_PORT:-9125}
-      - METRICS_PREFIX=${METRICS_PREFIX:-ds.}
-    stdin_open: true
-    restart: always
-    ports:
-      - '80:80'
-
-  onlyoffice-statsd-exporter:
-    container_name: onlyoffice-statsd-exporter
-    image: prom/statsd-exporter
-    command: --statsd.event-flush-interval=30000ms
-    ports:
-      - '9102:9102'
-      - '9125:9125/tcp'
-      - '9125:9125/udp'
-
-  onlyoffice-prometheus:
-    container_name: onlyoffice-prometheus
-    image: prom/prometheus
-    ports:
-      - '9090:9090'
-    volumes:
-      - ./prometheus/prometheus-scrape/statsd-exporter.yml:/etc/prometheus/prometheus.yml
-
-  grafana:
-    container_name: onlyoffice-grafana
-    image: bitnami/grafana
-    ports:
-      - '3000:3000'
-    environment:
-      - 'GF_SECURITY_ADMIN_PASSWORD=G0pGE4'
-    volumes:
-      - ./prometheus/grafana/conf/prometheus.yml:/opt/bitnami/grafana/conf/provisioning/datasources/prometheus.yml
-      - ./prometheus/grafana/conf/default-provider.yaml:/opt/bitnami/grafana/conf/provisioning/dashboards/default-provider.yaml
-      - ./prometheus/grafana/dashboards:/opt/bitnami/grafana/dashboards
diff --git a/tests/prometheus/grafana/conf/default-provider.yaml b/tests/prometheus/grafana/conf/default-provider.yaml
deleted file mode 100644
index b8b270b..0000000
--- a/tests/prometheus/grafana/conf/default-provider.yaml
+++ /dev/null
@@ -1,23 +0,0 @@
-apiVersion: 1
-providers:
-  # <string> an unique provider name
-- name: 'default-provider'
-  # <int> org id. will default to orgId 1 if not specified
-  orgId: 1
-  # <string, required> name of the dashboard folder. Required
-  folder: dashboards
-  # <string> folder UID. will be automatically generated if not specified
-  folderUid: ''
-  # <string, required> provider type. Required
-  type: file
-  # <bool> disable dashboard deletion
-  disableDeletion: false
-  # <bool> enable dashboard editing
-  editable: true
-  # <int> how often Grafana will scan for changed dashboards
-  updateIntervalSeconds: 10
-  options:
-    # <string, required> path to dashboard files on disk. Required
-    path: /opt/bitnami/grafana/dashboards
-    # <bool> enable folders creation for dashboards
-    #foldersFromFilesStructure: true
diff --git a/tests/prometheus/grafana/conf/prometheus.yml b/tests/prometheus/grafana/conf/prometheus.yml
deleted file mode 100644
index 11428bc..0000000
--- a/tests/prometheus/grafana/conf/prometheus.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-apiVersion: 1
-datasources:
-  - name: Prometheus
-    type: prometheus
-    url: http://onlyoffice-prometheus:9090
-    editable: true
diff --git a/tests/prometheus/grafana/dashboards/documentserver-statsd-exporter.json b/tests/prometheus/grafana/dashboards/documentserver-statsd-exporter.json
deleted file mode 100644
index d7a7c6f..0000000
--- a/tests/prometheus/grafana/dashboards/documentserver-statsd-exporter.json
+++ /dev/null
@@ -1,2797 +0,0 @@
-{
-  "annotations": {
-    "list": [
-      {
-        "builtIn": 1,
-        "datasource": "-- Grafana --",
-        "enable": true,
-        "hide": true,
-        "iconColor": "rgba(0, 211, 255, 1)",
-        "name": "Annotations & Alerts",
-        "type": "dashboard"
-      }
-    ]
-  },
-  "editable": true,
-  "gnetId": null,
-  "graphTooltip": 0,
-  "id": 8,
-  "links": [],
-  "panels": [
-    {
-      "collapsed": true,
-      "datasource": null,
-      "gridPos": {
-        "h": 1,
-        "w": 24,
-        "x": 0,
-        "y": 0
-      },
-      "id": 22,
-      "panels": [
-        {
-          "aliasColors": {},
-          "bars": false,
-          "dashLength": 10,
-          "dashes": false,
-          "datasource": "Prometheus",
-          "fieldConfig": {
-            "defaults": {
-              "custom": {},
-              "unit": "none"
-            },
-            "overrides": []
-          },
-          "fill": 1,
-          "fillGradient": 0,
-          "gridPos": {
-            "h": 9,
-            "w": 8,
-            "x": 0,
-            "y": 1
-          },
-          "hiddenSeries": false,
-          "id": 76,
-          "legend": {
-            "avg": false,
-            "current": false,
-            "max": false,
-            "min": false,
-            "show": true,
-            "total": false,
-            "values": false
-          },
-          "lines": true,
-          "linewidth": 1,
-          "nullPointMode": "null",
-          "options": {
-            "alertThreshold": true
-          },
-          "percentage": false,
-          "pluginVersion": "7.4.3",
-          "pointradius": 2,
-          "points": false,
-          "renderer": "flot",
-          "seriesOverrides": [],
-          "spaceLength": 10,
-          "stack": false,
-          "steppedLine": false,
-          "targets": [
-            {
-              "expr": "ds_expireDoc_connections_edit",
-              "interval": "",
-              "legendFormat": "number of connections for editing",
-              "queryType": "randomWalk",
-              "refId": "A"
-            }
-          ],
-          "thresholds": [],
-          "timeFrom": null,
-          "timeRegions": [],
-          "timeShift": null,
-          "title": "Edit",
-          "tooltip": {
-            "shared": true,
-            "sort": 0,
-            "value_type": "individual"
-          },
-          "type": "graph",
-          "xaxis": {
-            "buckets": null,
-            "mode": "time",
-            "name": null,
-            "show": true,
-            "values": []
-          },
-          "yaxes": [
-            {
-              "format": "none",
-              "label": null,
-              "logBase": 1,
-              "max": null,
-              "min": null,
-              "show": true
-            },
-            {
-              "format": "short",
-              "label": null,
-              "logBase": 1,
-              "max": null,
-              "min": null,
-              "show": true
-            }
-          ],
-          "yaxis": {
-            "align": false,
-            "alignLevel": null
-          }
-        },
-        {
-          "aliasColors": {},
-          "bars": false,
-          "dashLength": 10,
-          "dashes": false,
-          "datasource": "Prometheus",
-          "fieldConfig": {
-            "defaults": {
-              "custom": {},
-              "unit": "none"
-            },
-            "overrides": []
-          },
-          "fill": 1,
-          "fillGradient": 0,
-          "gridPos": {
-            "h": 9,
-            "w": 8,
-            "x": 8,
-            "y": 1
-          },
-          "hiddenSeries": false,
-          "id": 78,
-          "legend": {
-            "avg": false,
-            "current": false,
-            "max": false,
-            "min": false,
-            "show": true,
-            "total": false,
-            "values": false
-          },
-          "lines": true,
-          "linewidth": 1,
-          "nullPointMode": "null",
-          "options": {
-            "alertThreshold": true
-          },
-          "percentage": false,
-          "pluginVersion": "7.4.3",
-          "pointradius": 2,
-          "points": false,
-          "renderer": "flot",
-          "seriesOverrides": [],
-          "spaceLength": 10,
-          "stack": false,
-          "steppedLine": false,
-          "targets": [
-            {
-              "expr": "ds_expireDoc_connections_view",
-              "interval": "",
-              "legendFormat": "number of connections for viewing",
-              "queryType": "randomWalk",
-              "refId": "A"
-            }
-          ],
-          "thresholds": [],
-          "timeFrom": null,
-          "timeRegions": [],
-          "timeShift": null,
-          "title": "View",
-          "tooltip": {
-            "shared": true,
-            "sort": 0,
-            "value_type": "individual"
-          },
-          "type": "graph",
-          "xaxis": {
-            "buckets": null,
-            "mode": "time",
-            "name": null,
-            "show": true,
-            "values": []
-          },
-          "yaxes": [
-            {
-              "format": "none",
-              "label": null,
-              "logBase": 1,
-              "max": null,
-              "min": null,
-              "show": true
-            },
-            {
-              "format": "short",
-              "label": null,
-              "logBase": 1,
-              "max": null,
-              "min": null,
-              "show": true
-            }
-          ],
-          "yaxis": {
-            "align": false,
-            "alignLevel": null
-          }
-        },
-        {
-          "aliasColors": {},
-          "bars": false,
-          "dashLength": 10,
-          "dashes": false,
-          "datasource": "Prometheus",
-          "fieldConfig": {
-            "defaults": {
-              "custom": {},
-              "unit": "none"
-            },
-            "overrides": []
-          },
-          "fill": 1,
-          "fillGradient": 0,
-          "gridPos": {
-            "h": 9,
-            "w": 8,
-            "x": 16,
-            "y": 1
-          },
-          "hiddenSeries": false,
-          "id": 80,
-          "legend": {
-            "avg": false,
-            "current": false,
-            "max": false,
-            "min": false,
-            "show": true,
-            "total": false,
-            "values": false
-          },
-          "lines": true,
-          "linewidth": 1,
-          "nullPointMode": "null",
-          "options": {
-            "alertThreshold": true
-          },
-          "percentage": false,
-          "pluginVersion": "7.4.3",
-          "pointradius": 2,
-          "points": false,
-          "renderer": "flot",
-          "seriesOverrides": [],
-          "spaceLength": 10,
-          "stack": false,
-          "steppedLine": false,
-          "targets": [
-            {
-              "expr": "ds_expireDoc_connections_edit + ds_expireDoc_connections_view",
-              "interval": "",
-              "legendFormat": "sum of connections for editing and viewing",
-              "queryType": "randomWalk",
-              "refId": "A"
-            }
-          ],
-          "thresholds": [],
-          "timeFrom": null,
-          "timeRegions": [],
-          "timeShift": null,
-          "title": "Sum",
-          "tooltip": {
-            "shared": true,
-            "sort": 0,
-            "value_type": "individual"
-          },
-          "type": "graph",
-          "xaxis": {
-            "buckets": null,
-            "mode": "time",
-            "name": null,
-            "show": true,
-            "values": []
-          },
-          "yaxes": [
-            {
-              "format": "none",
-              "label": null,
-              "logBase": 1,
-              "max": null,
-              "min": null,
-              "show": true
-            },
-            {
-              "format": "short",
-              "label": null,
-              "logBase": 1,
-              "max": null,
-              "min": null,
-              "show": true
-            }
-          ],
-          "yaxis": {
-            "align": false,
-            "alignLevel": null
-          }
-        }
-      ],
-      "title": "Сonnecting",
-      "type": "row"
-    },
-    {
-      "collapsed": true,
-      "datasource": null,
-      "gridPos": {
-        "h": 1,
-        "w": 24,
-        "x": 0,
-        "y": 1
-      },
-      "id": 56,
-      "panels": [
-        {
-          "aliasColors": {},
-          "bars": false,
-          "dashLength": 10,
-          "dashes": false,
-          "datasource": "Prometheus",
-          "fieldConfig": {
-            "defaults": {
-              "custom": {},
-              "unit": "s"
-            },
-            "overrides": []
-          },
-          "fill": 1,
-          "fillGradient": 0,
-          "gridPos": {
-            "h": 9,
-            "w": 8,
-            "x": 0,
-            "y": 2
-          },
-          "hiddenSeries": false,
-          "id": 52,
-          "legend": {
-            "avg": false,
-            "current": false,
-            "max": false,
-            "min": false,
-            "show": true,
-            "total": false,
-            "values": false
-          },
-          "lines": true,
-          "linewidth": 1,
-          "nullPointMode": "null",
-          "options": {
-            "alertThreshold": true
-          },
-          "percentage": false,
-          "pluginVersion": "7.4.3",
-          "pointradius": 2,
-          "points": false,
-          "renderer": "flot",
-          "seriesOverrides": [],
-          "spaceLength": 10,
-          "stack": false,
-          "steppedLine": false,
-          "targets": [
-            {
-              "expr": "rate(ds_coauth_openDocument_open_sum[5m])/rate(ds_coauth_openDocument_open_count[5m])",
-              "interval": "",
-              "legendFormat": "moving average time of opening documents (for 5 minutes)",
-              "queryType": "randomWalk",
-              "refId": "A"
-            }
-          ],
-          "thresholds": [],
-          "timeFrom": null,
-          "timeRegions": [],
-          "timeShift": null,
-          "title": "Average time",
-          "tooltip": {
-            "shared": true,
-            "sort": 0,
-            "value_type": "individual"
-          },
-          "type": "graph",
-          "xaxis": {
-            "buckets": null,
-            "mode": "time",
-            "name": null,
-            "show": true,
-            "values": []
-          },
-          "yaxes": [
-            {
-              "format": "s",
-              "label": null,
-              "logBase": 1,
-              "max": null,
-              "min": null,
-              "show": true
-            },
-            {
-              "format": "short",
-              "label": null,
-              "logBase": 1,
-              "max": null,
-              "min": null,
-              "show": true
-            }
-          ],
-          "yaxis": {
-            "align": false,
-            "alignLevel": null
-          }
-        },
-        {
-          "aliasColors": {},
-          "bars": false,
-          "dashLength": 10,
-          "dashes": false,
-          "datasource": "Prometheus",
-          "fieldConfig": {
-            "defaults": {
-              "custom": {},
-              "unit": "s"
-            },
-            "overrides": []
-          },
-          "fill": 1,
-          "fillGradient": 0,
-          "gridPos": {
-            "h": 9,
-            "w": 8,
-            "x": 8,
-            "y": 2
-          },
-          "hiddenSeries": false,
-          "id": 54,
-          "legend": {
-            "avg": false,
-            "current": false,
-            "max": false,
-            "min": false,
-            "show": true,
-            "total": false,
-            "values": false
-          },
-          "lines": true,
-          "linewidth": 1,
-          "nullPointMode": "null",
-          "options": {
-            "alertThreshold": true
-          },
-          "percentage": false,
-          "pluginVersion": "7.4.3",
-          "pointradius": 2,
-          "points": false,
-          "renderer": "flot",
-          "seriesOverrides": [],
-          "spaceLength": 10,
-          "stack": false,
-          "steppedLine": false,
-          "targets": [
-            {
-              "expr": "ds_coauth_openDocument_open",
-              "interval": "",
-              "legendFormat": "quantile=\"{{quantile}}\"",
-              "queryType": "randomWalk",
-              "refId": "A"
-            }
-          ],
-          "thresholds": [],
-          "timeFrom": null,
-          "timeRegions": [],
-          "timeShift": null,
-          "title": "Quantile (0.5, 0.9, 0.99)",
-          "tooltip": {
-            "shared": true,
-            "sort": 0,
-            "value_type": "individual"
-          },
-          "type": "graph",
-          "xaxis": {
-            "buckets": null,
-            "mode": "time",
-            "name": null,
-            "show": true,
-            "values": []
-          },
-          "yaxes": [
-            {
-              "format": "s",
-              "label": null,
-              "logBase": 1,
-              "max": null,
-              "min": null,
-              "show": true
-            },
-            {
-              "format": "short",
-              "label": null,
-              "logBase": 1,
-              "max": null,
-              "min": null,
-              "show": true
-            }
-          ],
-          "yaxis": {
-            "align": false,
-            "alignLevel": null
-          }
-        },
-        {
-          "aliasColors": {},
-          "bars": false,
-          "dashLength": 10,
-          "dashes": false,
-          "datasource": "Prometheus",
-          "fieldConfig": {
-            "defaults": {
-              "custom": {},
-              "unit": "cpm"
-            },
-            "overrides": []
-          },
-          "fill": 1,
-          "fillGradient": 0,
-          "gridPos": {
-            "h": 9,
-            "w": 8,
-            "x": 16,
-            "y": 2
-          },
-          "hiddenSeries": false,
-          "id": 74,
-          "legend": {
-            "avg": false,
-            "current": false,
-            "max": false,
-            "min": false,
-            "show": true,
-            "total": false,
-            "values": false
-          },
-          "lines": true,
-          "linewidth": 1,
-          "nullPointMode": "null",
-          "options": {
-            "alertThreshold": true
-          },
-          "percentage": false,
-          "pluginVersion": "7.4.3",
-          "pointradius": 2,
-          "points": false,
-          "renderer": "flot",
-          "seriesOverrides": [],
-          "spaceLength": 10,
-          "stack": false,
-          "steppedLine": false,
-          "targets": [
-            {
-              "expr": "ds_coauth_openDocument_open_count - ds_coauth_openDocument_open_count offset 1m",
-              "interval": "",
-              "legendFormat": "number of open documents",
-              "queryType": "randomWalk",
-              "refId": "A"
-            }
-          ],
-          "thresholds": [],
-          "timeFrom": null,
-          "timeRegions": [],
-          "timeShift": null,
-          "title": "Count",
-          "tooltip": {
-            "shared": true,
-            "sort": 0,
-            "value_type": "individual"
-          },
-          "type": "graph",
-          "xaxis": {
-            "buckets": null,
-            "mode": "time",
-            "name": null,
-            "show": true,
-            "values": []
-          },
-          "yaxes": [
-            {
-              "format": "cpm",
-              "label": null,
-              "logBase": 1,
-              "max": null,
-              "min": null,
-              "show": true
-            },
-            {
-              "format": "short",
-              "label": null,
-              "logBase": 1,
-              "max": null,
-              "min": null,
-              "show": true
-            }
-          ],
-          "yaxis": {
-            "align": false,
-            "alignLevel": null
-          }
-        }
-      ],
-      "title": "Opening Documents",
-      "type": "row"
-    },
-    {
-      "collapsed": true,
-      "datasource": null,
-      "gridPos": {
-        "h": 1,
-        "w": 24,
-        "x": 0,
-        "y": 2
-      },
-      "id": 10,
-      "panels": [
-        {
-          "aliasColors": {},
-          "bars": false,
-          "dashLength": 10,
-          "dashes": false,
-          "datasource": "Prometheus",
-          "fieldConfig": {
-            "defaults": {
-              "color": {},
-              "custom": {},
-              "thresholds": {
-                "mode": "absolute",
-                "steps": []
-              },
-              "unit": "s"
-            },
-            "overrides": []
-          },
-          "fill": 1,
-          "fillGradient": 0,
-          "gridPos": {
-            "h": 9,
-            "w": 8,
-            "x": 0,
-            "y": 3
-          },
-          "hiddenSeries": false,
-          "id": 8,
-          "legend": {
-            "avg": false,
-            "current": false,
-            "max": false,
-            "min": false,
-            "show": true,
-            "total": false,
-            "values": false
-          },
-          "lines": true,
-          "linewidth": 1,
-          "nullPointMode": "null",
-          "options": {
-            "alertThreshold": true
-          },
-          "percentage": false,
-          "pluginVersion": "7.4.3",
-          "pointradius": 2,
-          "points": false,
-          "renderer": "flot",
-          "seriesOverrides": [],
-          "spaceLength": 10,
-          "stack": false,
-          "steppedLine": false,
-          "targets": [
-            {
-              "expr": "rate(ds_conv_downloadFile_sum[5m])/rate(ds_conv_downloadFile_count[5m])",
-              "interval": "",
-              "legendFormat": "moving average time of downloading documents (for 5 minutes)",
-              "queryType": "randomWalk",
-              "refId": "A"
-            }
-          ],
-          "thresholds": [],
-          "timeFrom": null,
-          "timeRegions": [],
-          "timeShift": null,
-          "title": "Average time",
-          "tooltip": {
-            "shared": true,
-            "sort": 0,
-            "value_type": "individual"
-          },
-          "type": "graph",
-          "xaxis": {
-            "buckets": null,
-            "mode": "time",
-            "name": null,
-            "show": true,
-            "values": []
-          },
-          "yaxes": [
-            {
-              "format": "s",
-              "label": null,
-              "logBase": 1,
-              "max": null,
-              "min": null,
-              "show": true
-            },
-            {
-              "format": "short",
-              "label": null,
-              "logBase": 1,
-              "max": null,
-              "min": null,
-              "show": true
-            }
-          ],
-          "yaxis": {
-            "align": false,
-            "alignLevel": null
-          }
-        },
-        {
-          "aliasColors": {},
-          "bars": false,
-          "dashLength": 10,
-          "dashes": false,
-          "datasource": "Prometheus",
-          "fieldConfig": {
-            "defaults": {
-              "custom": {},
-              "unit": "s"
-            },
-            "overrides": []
-          },
-          "fill": 1,
-          "fillGradient": 0,
-          "gridPos": {
-            "h": 9,
-            "w": 8,
-            "x": 8,
-            "y": 3
-          },
-          "hiddenSeries": false,
-          "id": 2,
-          "legend": {
-            "avg": false,
-            "current": false,
-            "max": false,
-            "min": false,
-            "show": true,
-            "total": false,
-            "values": false
-          },
-          "lines": true,
-          "linewidth": 1,
-          "nullPointMode": "null",
-          "options": {
-            "alertThreshold": true
-          },
-          "percentage": false,
-          "pluginVersion": "7.4.3",
-          "pointradius": 2,
-          "points": false,
-          "renderer": "flot",
-          "seriesOverrides": [],
-          "spaceLength": 10,
-          "stack": false,
-          "steppedLine": false,
-          "targets": [
-            {
-              "expr": "ds_conv_downloadFile",
-              "interval": "",
-              "legendFormat": "quantile=\"{{quantile}}\"",
-              "queryType": "randomWalk",
-              "refId": "A"
-            }
-          ],
-          "thresholds": [],
-          "timeFrom": null,
-          "timeRegions": [],
-          "timeShift": null,
-          "title": "Quantile (0.5, 0.9, 0.99)",
-          "tooltip": {
-            "shared": true,
-            "sort": 0,
-            "value_type": "individual"
-          },
-          "type": "graph",
-          "xaxis": {
-            "buckets": null,
-            "mode": "time",
-            "name": null,
-            "show": true,
-            "values": []
-          },
-          "yaxes": [
-            {
-              "format": "s",
-              "label": null,
-              "logBase": 1,
-              "max": null,
-              "min": null,
-              "show": true
-            },
-            {
-              "format": "short",
-              "label": null,
-              "logBase": 1,
-              "max": null,
-              "min": null,
-              "show": true
-            }
-          ],
-          "yaxis": {
-            "align": false,
-            "alignLevel": null
-          }
-        },
-        {
-          "aliasColors": {},
-          "bars": false,
-          "dashLength": 10,
-          "dashes": false,
-          "datasource": "Prometheus",
-          "fieldConfig": {
-            "defaults": {
-              "custom": {},
-              "unit": "cpm"
-            },
-            "overrides": []
-          },
-          "fill": 1,
-          "fillGradient": 0,
-          "gridPos": {
-            "h": 9,
-            "w": 8,
-            "x": 16,
-            "y": 3
-          },
-          "hiddenSeries": false,
-          "id": 6,
-          "legend": {
-            "avg": false,
-            "current": false,
-            "max": false,
-            "min": false,
-            "show": true,
-            "total": false,
-            "values": false
-          },
-          "lines": true,
-          "linewidth": 1,
-          "nullPointMode": "null",
-          "options": {
-            "alertThreshold": true
-          },
-          "percentage": false,
-          "pluginVersion": "7.4.3",
-          "pointradius": 2,
-          "points": false,
-          "renderer": "flot",
-          "seriesOverrides": [],
-          "spaceLength": 10,
-          "stack": false,
-          "steppedLine": false,
-          "targets": [
-            {
-              "expr": "ds_conv_downloadFile_count - ds_conv_downloadFile_count offset 1m",
-              "interval": "",
-              "legendFormat": "number of downloaded files",
-              "queryType": "randomWalk",
-              "refId": "A"
-            }
-          ],
-          "thresholds": [],
-          "timeFrom": null,
-          "timeRegions": [],
-          "timeShift": null,
-          "title": "Count",
-          "tooltip": {
-            "shared": true,
-            "sort": 0,
-            "value_type": "individual"
-          },
-          "type": "graph",
-          "xaxis": {
-            "buckets": null,
-            "mode": "time",
-            "name": null,
-            "show": true,
-            "values": []
-          },
-          "yaxes": [
-            {
-              "format": "cpm",
-              "label": null,
-              "logBase": 1,
-              "max": null,
-              "min": null,
-              "show": true
-            },
-            {
-              "format": "short",
-              "label": null,
-              "logBase": 1,
-              "max": null,
-              "min": null,
-              "show": true
-            }
-          ],
-          "yaxis": {
-            "align": false,
-            "alignLevel": null
-          }
-        }
-      ],
-      "title": "Downloading Documents",
-      "type": "row"
-    },
-    {
-      "collapsed": true,
-      "datasource": null,
-      "gridPos": {
-        "h": 1,
-        "w": 24,
-        "x": 0,
-        "y": 3
-      },
-      "id": 12,
-      "panels": [
-        {
-          "aliasColors": {},
-          "bars": false,
-          "dashLength": 10,
-          "dashes": false,
-          "datasource": "Prometheus",
-          "fieldConfig": {
-            "defaults": {
-              "custom": {},
-              "unit": "s"
-            },
-            "overrides": []
-          },
-          "fill": 1,
-          "fillGradient": 0,
-          "gridPos": {
-            "h": 9,
-            "w": 8,
-            "x": 0,
-            "y": 4
-          },
-          "hiddenSeries": false,
-          "id": 16,
-          "legend": {
-            "avg": false,
-            "current": false,
-            "max": false,
-            "min": false,
-            "show": true,
-            "total": false,
-            "values": false
-          },
-          "lines": true,
-          "linewidth": 1,
-          "nullPointMode": "null",
-          "options": {
-            "alertThreshold": true
-          },
-          "percentage": false,
-          "pluginVersion": "7.4.3",
-          "pointradius": 2,
-          "points": false,
-          "renderer": "flot",
-          "seriesOverrides": [],
-          "spaceLength": 10,
-          "stack": false,
-          "steppedLine": false,
-          "targets": [
-            {
-              "expr": "rate(ds_conv_allconvert_sum[5m])/rate(ds_conv_allconvert_count[5m])",
-              "interval": "",
-              "legendFormat": "moving average time of converting documents (for 5 minutes)",
-              "queryType": "randomWalk",
-              "refId": "A"
-            }
-          ],
-          "thresholds": [],
-          "timeFrom": null,
-          "timeRegions": [],
-          "timeShift": null,
-          "title": "Average time",
-          "tooltip": {
-            "shared": true,
-            "sort": 0,
-            "value_type": "individual"
-          },
-          "type": "graph",
-          "xaxis": {
-            "buckets": null,
-            "mode": "time",
-            "name": null,
-            "show": true,
-            "values": []
-          },
-          "yaxes": [
-            {
-              "format": "s",
-              "label": null,
-              "logBase": 1,
-              "max": null,
-              "min": null,
-              "show": true
-            },
-            {
-              "format": "short",
-              "label": null,
-              "logBase": 1,
-              "max": null,
-              "min": null,
-              "show": true
-            }
-          ],
-          "yaxis": {
-            "align": false,
-            "alignLevel": null
-          }
-        },
-        {
-          "aliasColors": {},
-          "bars": false,
-          "dashLength": 10,
-          "dashes": false,
-          "datasource": "Prometheus",
-          "fieldConfig": {
-            "defaults": {
-              "custom": {},
-              "unit": "s"
-            },
-            "overrides": []
-          },
-          "fill": 1,
-          "fillGradient": 0,
-          "gridPos": {
-            "h": 9,
-            "w": 8,
-            "x": 8,
-            "y": 4
-          },
-          "hiddenSeries": false,
-          "id": 18,
-          "legend": {
-            "avg": false,
-            "current": false,
-            "max": false,
-            "min": false,
-            "show": true,
-            "total": false,
-            "values": false
-          },
-          "lines": true,
-          "linewidth": 1,
-          "nullPointMode": "null",
-          "options": {
-            "alertThreshold": true
-          },
-          "percentage": false,
-          "pluginVersion": "7.4.3",
-          "pointradius": 2,
-          "points": false,
-          "renderer": "flot",
-          "seriesOverrides": [],
-          "spaceLength": 10,
-          "stack": false,
-          "steppedLine": false,
-          "targets": [
-            {
-              "expr": "ds_conv_allconvert",
-              "interval": "",
-              "legendFormat": "quantile=\"{{quantile}}\"",
-              "queryType": "randomWalk",
-              "refId": "A"
-            }
-          ],
-          "thresholds": [],
-          "timeFrom": null,
-          "timeRegions": [],
-          "timeShift": null,
-          "title": "quantile (0.5, 0.9, 0.99)",
-          "tooltip": {
-            "shared": true,
-            "sort": 0,
-            "value_type": "individual"
-          },
-          "type": "graph",
-          "xaxis": {
-            "buckets": null,
-            "mode": "time",
-            "name": null,
-            "show": true,
-            "values": []
-          },
-          "yaxes": [
-            {
-              "format": "s",
-              "label": null,
-              "logBase": 1,
-              "max": null,
-              "min": null,
-              "show": true
-            },
-            {
-              "format": "short",
-              "label": null,
-              "logBase": 1,
-              "max": null,
-              "min": null,
-              "show": true
-            }
-          ],
-          "yaxis": {
-            "align": false,
-            "alignLevel": null
-          }
-        },
-        {
-          "aliasColors": {},
-          "bars": false,
-          "dashLength": 10,
-          "dashes": false,
-          "datasource": "Prometheus",
-          "fieldConfig": {
-            "defaults": {
-              "custom": {},
-              "unit": "cpm"
-            },
-            "overrides": []
-          },
-          "fill": 1,
-          "fillGradient": 0,
-          "gridPos": {
-            "h": 9,
-            "w": 8,
-            "x": 16,
-            "y": 4
-          },
-          "hiddenSeries": false,
-          "id": 14,
-          "legend": {
-            "avg": false,
-            "current": false,
-            "max": false,
-            "min": false,
-            "show": true,
-            "total": false,
-            "values": false
-          },
-          "lines": true,
-          "linewidth": 1,
-          "nullPointMode": "null",
-          "options": {
-            "alertThreshold": true
-          },
-          "percentage": false,
-          "pluginVersion": "7.4.3",
-          "pointradius": 2,
-          "points": false,
-          "renderer": "flot",
-          "seriesOverrides": [],
-          "spaceLength": 10,
-          "stack": false,
-          "steppedLine": false,
-          "targets": [
-            {
-              "expr": "ds_conv_allconvert_count - ds_conv_allconvert_count offset 1m",
-              "interval": "",
-              "legendFormat": "number of conversions",
-              "queryType": "randomWalk",
-              "refId": "A"
-            }
-          ],
-          "thresholds": [],
-          "timeFrom": null,
-          "timeRegions": [],
-          "timeShift": null,
-          "title": "Count",
-          "tooltip": {
-            "shared": true,
-            "sort": 0,
-            "value_type": "individual"
-          },
-          "type": "graph",
-          "xaxis": {
-            "buckets": null,
-            "mode": "time",
-            "name": null,
-            "show": true,
-            "values": []
-          },
-          "yaxes": [
-            {
-              "format": "cpm",
-              "label": null,
-              "logBase": 1,
-              "max": null,
-              "min": null,
-              "show": true
-            },
-            {
-              "format": "short",
-              "label": null,
-              "logBase": 1,
-              "max": null,
-              "min": null,
-              "show": true
-            }
-          ],
-          "yaxis": {
-            "align": false,
-            "alignLevel": null
-          }
-        }
-      ],
-      "title": "Converting Documents",
-      "type": "row"
-    },
-    {
-      "collapsed": true,
-      "datasource": null,
-      "gridPos": {
-        "h": 1,
-        "w": 24,
-        "x": 0,
-        "y": 4
-      },
-      "id": 32,
-      "panels": [
-        {
-          "aliasColors": {},
-          "bars": false,
-          "dashLength": 10,
-          "dashes": false,
-          "datasource": "Prometheus",
-          "fieldConfig": {
-            "defaults": {
-              "custom": {},
-              "unit": "s"
-            },
-            "overrides": []
-          },
-          "fill": 1,
-          "fillGradient": 0,
-          "gridPos": {
-            "h": 9,
-            "w": 8,
-            "x": 0,
-            "y": 5
-          },
-          "hiddenSeries": false,
-          "id": 30,
-          "legend": {
-            "avg": false,
-            "current": false,
-            "max": false,
-            "min": false,
-            "show": true,
-            "total": false,
-            "values": false
-          },
-          "lines": true,
-          "linewidth": 1,
-          "nullPointMode": "null",
-          "options": {
-            "alertThreshold": true
-          },
-          "percentage": false,
-          "pluginVersion": "7.4.3",
-          "pointradius": 2,
-          "points": false,
-          "renderer": "flot",
-          "seriesOverrides": [],
-          "spaceLength": 10,
-          "stack": false,
-          "steppedLine": false,
-          "targets": [
-            {
-              "expr": "rate(ds_conv_spawnSync_sum[5m])/rate(ds_conv_spawnSync_count[5m])",
-              "interval": "",
-              "legendFormat": "moving average time of converting process (for 5 minutes)",
-              "queryType": "randomWalk",
-              "refId": "A"
-            }
-          ],
-          "thresholds": [],
-          "timeFrom": null,
-          "timeRegions": [],
-          "timeShift": null,
-          "title": "Average time",
-          "tooltip": {
-            "shared": true,
-            "sort": 0,
-            "value_type": "individual"
-          },
-          "type": "graph",
-          "xaxis": {
-            "buckets": null,
-            "mode": "time",
-            "name": null,
-            "show": true,
-            "values": []
-          },
-          "yaxes": [
-            {
-              "format": "s",
-              "label": null,
-              "logBase": 1,
-              "max": null,
-              "min": null,
-              "show": true
-            },
-            {
-              "format": "short",
-              "label": null,
-              "logBase": 1,
-              "max": null,
-              "min": null,
-              "show": true
-            }
-          ],
-          "yaxis": {
-            "align": false,
-            "alignLevel": null
-          }
-        },
-        {
-          "aliasColors": {},
-          "bars": false,
-          "dashLength": 10,
-          "dashes": false,
-          "datasource": "Prometheus",
-          "fieldConfig": {
-            "defaults": {
-              "custom": {},
-              "unit": "s"
-            },
-            "overrides": []
-          },
-          "fill": 1,
-          "fillGradient": 0,
-          "gridPos": {
-            "h": 9,
-            "w": 8,
-            "x": 8,
-            "y": 5
-          },
-          "hiddenSeries": false,
-          "id": 28,
-          "legend": {
-            "avg": false,
-            "current": false,
-            "max": false,
-            "min": false,
-            "show": true,
-            "total": false,
-            "values": false
-          },
-          "lines": true,
-          "linewidth": 1,
-          "nullPointMode": "null",
-          "options": {
-            "alertThreshold": true
-          },
-          "percentage": false,
-          "pluginVersion": "7.4.3",
-          "pointradius": 2,
-          "points": false,
-          "renderer": "flot",
-          "seriesOverrides": [],
-          "spaceLength": 10,
-          "stack": false,
-          "steppedLine": false,
-          "targets": [
-            {
-              "expr": "ds_conv_spawnSync",
-              "interval": "",
-              "legendFormat": "quantile=\"{{quantile}}\"",
-              "queryType": "randomWalk",
-              "refId": "A"
-            }
-          ],
-          "thresholds": [],
-          "timeFrom": null,
-          "timeRegions": [],
-          "timeShift": null,
-          "title": "Quantile (0.5, 0.9, 0.99)",
-          "tooltip": {
-            "shared": true,
-            "sort": 0,
-            "value_type": "individual"
-          },
-          "type": "graph",
-          "xaxis": {
-            "buckets": null,
-            "mode": "time",
-            "name": null,
-            "show": true,
-            "values": []
-          },
-          "yaxes": [
-            {
-              "format": "s",
-              "label": null,
-              "logBase": 1,
-              "max": null,
-              "min": null,
-              "show": true
-            },
-            {
-              "format": "short",
-              "label": null,
-              "logBase": 1,
-              "max": null,
-              "min": null,
-              "show": true
-            }
-          ],
-          "yaxis": {
-            "align": false,
-            "alignLevel": null
-          }
-        },
-        {
-          "aliasColors": {},
-          "bars": false,
-          "dashLength": 10,
-          "dashes": false,
-          "datasource": "Prometheus",
-          "fieldConfig": {
-            "defaults": {
-              "custom": {},
-              "unit": "cpm"
-            },
-            "overrides": []
-          },
-          "fill": 1,
-          "fillGradient": 0,
-          "gridPos": {
-            "h": 9,
-            "w": 8,
-            "x": 16,
-            "y": 5
-          },
-          "hiddenSeries": false,
-          "id": 26,
-          "legend": {
-            "avg": false,
-            "current": false,
-            "max": false,
-            "min": false,
-            "show": true,
-            "total": false,
-            "values": false
-          },
-          "lines": true,
-          "linewidth": 1,
-          "nullPointMode": "null",
-          "options": {
-            "alertThreshold": true
-          },
-          "percentage": false,
-          "pluginVersion": "7.4.3",
-          "pointradius": 2,
-          "points": false,
-          "renderer": "flot",
-          "seriesOverrides": [],
-          "spaceLength": 10,
-          "stack": false,
-          "steppedLine": false,
-          "targets": [
-            {
-              "expr": "ds_conv_spawnSync_count - ds_conv_spawnSync_count offset 1m",
-              "interval": "",
-              "legendFormat": "number of conversion process",
-              "queryType": "randomWalk",
-              "refId": "A"
-            }
-          ],
-          "thresholds": [],
-          "timeFrom": null,
-          "timeRegions": [],
-          "timeShift": null,
-          "title": "Count",
-          "tooltip": {
-            "shared": true,
-            "sort": 0,
-            "value_type": "individual"
-          },
-          "type": "graph",
-          "xaxis": {
-            "buckets": null,
-            "mode": "time",
-            "name": null,
-            "show": true,
-            "values": []
-          },
-          "yaxes": [
-            {
-              "format": "cpm",
-              "label": null,
-              "logBase": 1,
-              "max": null,
-              "min": null,
-              "show": true
-            },
-            {
-              "format": "short",
-              "label": null,
-              "logBase": 1,
-              "max": null,
-              "min": null,
-              "show": true
-            }
-          ],
-          "yaxis": {
-            "align": false,
-            "alignLevel": null
-          }
-        }
-      ],
-      "title": "Converting Process",
-      "type": "row"
-    },
-    {
-      "collapsed": true,
-      "datasource": null,
-      "gridPos": {
-        "h": 1,
-        "w": 24,
-        "x": 0,
-        "y": 5
-      },
-      "id": 48,
-      "panels": [
-        {
-          "aliasColors": {},
-          "bars": false,
-          "dashLength": 10,
-          "dashes": false,
-          "datasource": "Prometheus",
-          "fieldConfig": {
-            "defaults": {
-              "custom": {},
-              "unit": "s"
-            },
-            "overrides": []
-          },
-          "fill": 1,
-          "fillGradient": 0,
-          "gridPos": {
-            "h": 9,
-            "w": 8,
-            "x": 0,
-            "y": 6
-          },
-          "hiddenSeries": false,
-          "id": 44,
-          "legend": {
-            "avg": false,
-            "current": false,
-            "max": false,
-            "min": false,
-            "show": true,
-            "total": false,
-            "values": false
-          },
-          "lines": true,
-          "linewidth": 1,
-          "nullPointMode": "null",
-          "options": {
-            "alertThreshold": true
-          },
-          "percentage": false,
-          "pluginVersion": "7.4.3",
-          "pointradius": 2,
-          "points": false,
-          "renderer": "flot",
-          "seriesOverrides": [],
-          "spaceLength": 10,
-          "stack": false,
-          "steppedLine": false,
-          "targets": [
-            {
-              "expr": "rate(ds_coauth_data_auth_sum[5m])/rate(ds_coauth_data_auth_count[5m])",
-              "interval": "",
-              "legendFormat": "moving average time of completing authorization (for 5 minutes)",
-              "queryType": "randomWalk",
-              "refId": "A"
-            }
-          ],
-          "thresholds": [],
-          "timeFrom": null,
-          "timeRegions": [],
-          "timeShift": null,
-          "title": "Average time",
-          "tooltip": {
-            "shared": true,
-            "sort": 0,
-            "value_type": "individual"
-          },
-          "type": "graph",
-          "xaxis": {
-            "buckets": null,
-            "mode": "time",
-            "name": null,
-            "show": true,
-            "values": []
-          },
-          "yaxes": [
-            {
-              "format": "s",
-              "label": null,
-              "logBase": 1,
-              "max": null,
-              "min": null,
-              "show": true
-            },
-            {
-              "format": "short",
-              "label": null,
-              "logBase": 1,
-              "max": null,
-              "min": null,
-              "show": true
-            }
-          ],
-          "yaxis": {
-            "align": false,
-            "alignLevel": null
-          }
-        },
-        {
-          "aliasColors": {},
-          "bars": false,
-          "dashLength": 10,
-          "dashes": false,
-          "datasource": "Prometheus",
-          "fieldConfig": {
-            "defaults": {
-              "custom": {},
-              "unit": "s"
-            },
-            "overrides": []
-          },
-          "fill": 1,
-          "fillGradient": 0,
-          "gridPos": {
-            "h": 9,
-            "w": 8,
-            "x": 8,
-            "y": 6
-          },
-          "hiddenSeries": false,
-          "id": 46,
-          "legend": {
-            "avg": false,
-            "current": false,
-            "max": false,
-            "min": false,
-            "show": true,
-            "total": false,
-            "values": false
-          },
-          "lines": true,
-          "linewidth": 1,
-          "nullPointMode": "null",
-          "options": {
-            "alertThreshold": true
-          },
-          "percentage": false,
-          "pluginVersion": "7.4.3",
-          "pointradius": 2,
-          "points": false,
-          "renderer": "flot",
-          "seriesOverrides": [],
-          "spaceLength": 10,
-          "stack": false,
-          "steppedLine": false,
-          "targets": [
-            {
-              "expr": "ds_coauth_data_auth",
-              "interval": "",
-              "legendFormat": "quantile=\"{{quantile}}\"",
-              "queryType": "randomWalk",
-              "refId": "A"
-            }
-          ],
-          "thresholds": [],
-          "timeFrom": null,
-          "timeRegions": [],
-          "timeShift": null,
-          "title": "Quantile (0.5, 0.9, 0.99)",
-          "tooltip": {
-            "shared": true,
-            "sort": 0,
-            "value_type": "individual"
-          },
-          "type": "graph",
-          "xaxis": {
-            "buckets": null,
-            "mode": "time",
-            "name": null,
-            "show": true,
-            "values": []
-          },
-          "yaxes": [
-            {
-              "format": "s",
-              "label": null,
-              "logBase": 1,
-              "max": null,
-              "min": null,
-              "show": true
-            },
-            {
-              "format": "short",
-              "label": null,
-              "logBase": 1,
-              "max": null,
-              "min": null,
-              "show": true
-            }
-          ],
-          "yaxis": {
-            "align": false,
-            "alignLevel": null
-          }
-        },
-        {
-          "aliasColors": {},
-          "bars": false,
-          "dashLength": 10,
-          "dashes": false,
-          "datasource": "Prometheus",
-          "fieldConfig": {
-            "defaults": {
-              "custom": {},
-              "unit": "cpm"
-            },
-            "overrides": []
-          },
-          "fill": 1,
-          "fillGradient": 0,
-          "gridPos": {
-            "h": 9,
-            "w": 8,
-            "x": 16,
-            "y": 6
-          },
-          "hiddenSeries": false,
-          "id": 42,
-          "legend": {
-            "avg": false,
-            "current": false,
-            "max": false,
-            "min": false,
-            "show": true,
-            "total": false,
-            "values": false
-          },
-          "lines": true,
-          "linewidth": 1,
-          "nullPointMode": "null",
-          "options": {
-            "alertThreshold": true
-          },
-          "percentage": false,
-          "pluginVersion": "7.4.3",
-          "pointradius": 2,
-          "points": false,
-          "renderer": "flot",
-          "seriesOverrides": [],
-          "spaceLength": 10,
-          "stack": false,
-          "steppedLine": false,
-          "targets": [
-            {
-              "expr": "ds_coauth_data_auth_count - ds_coauth_data_auth_count offset 1m",
-              "interval": "",
-              "legendFormat": "number of authorizations",
-              "queryType": "randomWalk",
-              "refId": "A"
-            }
-          ],
-          "thresholds": [],
-          "timeFrom": null,
-          "timeRegions": [],
-          "timeShift": null,
-          "title": "Count",
-          "tooltip": {
-            "shared": true,
-            "sort": 0,
-            "value_type": "individual"
-          },
-          "type": "graph",
-          "xaxis": {
-            "buckets": null,
-            "mode": "time",
-            "name": null,
-            "show": true,
-            "values": []
-          },
-          "yaxes": [
-            {
-              "format": "cpm",
-              "label": null,
-              "logBase": 1,
-              "max": null,
-              "min": null,
-              "show": true
-            },
-            {
-              "format": "short",
-              "label": null,
-              "logBase": 1,
-              "max": null,
-              "min": null,
-              "show": true
-            }
-          ],
-          "yaxis": {
-            "align": false,
-            "alignLevel": null
-          }
-        }
-      ],
-      "title": "Authorizations",
-      "type": "row"
-    },
-    {
-      "collapsed": true,
-      "datasource": null,
-      "gridPos": {
-        "h": 1,
-        "w": 24,
-        "x": 0,
-        "y": 6
-      },
-      "id": 64,
-      "panels": [
-        {
-          "aliasColors": {},
-          "bars": false,
-          "dashLength": 10,
-          "dashes": false,
-          "datasource": "Prometheus",
-          "fieldConfig": {
-            "defaults": {
-              "custom": {},
-              "unit": "s"
-            },
-            "overrides": []
-          },
-          "fill": 1,
-          "fillGradient": 0,
-          "gridPos": {
-            "h": 9,
-            "w": 8,
-            "x": 0,
-            "y": 7
-          },
-          "hiddenSeries": false,
-          "id": 60,
-          "legend": {
-            "avg": false,
-            "current": false,
-            "max": false,
-            "min": false,
-            "show": true,
-            "total": false,
-            "values": false
-          },
-          "lines": true,
-          "linewidth": 1,
-          "nullPointMode": "null",
-          "options": {
-            "alertThreshold": true
-          },
-          "percentage": false,
-          "pluginVersion": "7.4.3",
-          "pointradius": 2,
-          "points": false,
-          "renderer": "flot",
-          "seriesOverrides": [],
-          "spaceLength": 10,
-          "stack": false,
-          "steppedLine": false,
-          "targets": [
-            {
-              "expr": "rate(ds_coauth_data_getLock_sum[5m])/rate(ds_coauth_data_getLock_count[5m])",
-              "interval": "",
-              "legendFormat": "moving average time of getLock duration (for 5 minutes)",
-              "queryType": "randomWalk",
-              "refId": "A"
-            }
-          ],
-          "thresholds": [],
-          "timeFrom": null,
-          "timeRegions": [],
-          "timeShift": null,
-          "title": "Average time",
-          "tooltip": {
-            "shared": true,
-            "sort": 0,
-            "value_type": "individual"
-          },
-          "type": "graph",
-          "xaxis": {
-            "buckets": null,
-            "mode": "time",
-            "name": null,
-            "show": true,
-            "values": []
-          },
-          "yaxes": [
-            {
-              "format": "s",
-              "label": null,
-              "logBase": 1,
-              "max": null,
-              "min": null,
-              "show": true
-            },
-            {
-              "format": "short",
-              "label": null,
-              "logBase": 1,
-              "max": null,
-              "min": null,
-              "show": true
-            }
-          ],
-          "yaxis": {
-            "align": false,
-            "alignLevel": null
-          }
-        },
-        {
-          "aliasColors": {},
-          "bars": false,
-          "dashLength": 10,
-          "dashes": false,
-          "datasource": "Prometheus",
-          "fieldConfig": {
-            "defaults": {
-              "custom": {},
-              "unit": "s"
-            },
-            "overrides": []
-          },
-          "fill": 1,
-          "fillGradient": 0,
-          "gridPos": {
-            "h": 9,
-            "w": 8,
-            "x": 8,
-            "y": 7
-          },
-          "hiddenSeries": false,
-          "id": 62,
-          "legend": {
-            "avg": false,
-            "current": false,
-            "max": false,
-            "min": false,
-            "show": true,
-            "total": false,
-            "values": false
-          },
-          "lines": true,
-          "linewidth": 1,
-          "nullPointMode": "null",
-          "options": {
-            "alertThreshold": true
-          },
-          "percentage": false,
-          "pluginVersion": "7.4.3",
-          "pointradius": 2,
-          "points": false,
-          "renderer": "flot",
-          "seriesOverrides": [],
-          "spaceLength": 10,
-          "stack": false,
-          "steppedLine": false,
-          "targets": [
-            {
-              "expr": "ds_coauth_data_getLock",
-              "interval": "",
-              "legendFormat": "quantile=\"{{quantile}}\"",
-              "queryType": "randomWalk",
-              "refId": "A"
-            }
-          ],
-          "thresholds": [],
-          "timeFrom": null,
-          "timeRegions": [],
-          "timeShift": null,
-          "title": "Quantile (0.5, 0.9, 0.99)",
-          "tooltip": {
-            "shared": true,
-            "sort": 0,
-            "value_type": "individual"
-          },
-          "type": "graph",
-          "xaxis": {
-            "buckets": null,
-            "mode": "time",
-            "name": null,
-            "show": true,
-            "values": []
-          },
-          "yaxes": [
-            {
-              "format": "s",
-              "label": null,
-              "logBase": 1,
-              "max": null,
-              "min": null,
-              "show": true
-            },
-            {
-              "format": "short",
-              "label": null,
-              "logBase": 1,
-              "max": null,
-              "min": null,
-              "show": true
-            }
-          ],
-          "yaxis": {
-            "align": false,
-            "alignLevel": null
-          }
-        },
-        {
-          "aliasColors": {},
-          "bars": false,
-          "dashLength": 10,
-          "dashes": false,
-          "datasource": "Prometheus",
-          "fieldConfig": {
-            "defaults": {
-              "custom": {},
-              "unit": "cpm"
-            },
-            "overrides": []
-          },
-          "fill": 1,
-          "fillGradient": 0,
-          "gridPos": {
-            "h": 9,
-            "w": 8,
-            "x": 16,
-            "y": 7
-          },
-          "hiddenSeries": false,
-          "id": 58,
-          "legend": {
-            "avg": false,
-            "current": false,
-            "max": false,
-            "min": false,
-            "show": true,
-            "total": false,
-            "values": false
-          },
-          "lines": true,
-          "linewidth": 1,
-          "nullPointMode": "null",
-          "options": {
-            "alertThreshold": true
-          },
-          "percentage": false,
-          "pluginVersion": "7.4.3",
-          "pointradius": 2,
-          "points": false,
-          "renderer": "flot",
-          "seriesOverrides": [],
-          "spaceLength": 10,
-          "stack": false,
-          "steppedLine": false,
-          "targets": [
-            {
-              "expr": "ds_coauth_data_getLock_count - ds_coauth_data_getLock_count offset 1m",
-              "interval": "",
-              "legendFormat": "number of getLocks",
-              "queryType": "randomWalk",
-              "refId": "A"
-            }
-          ],
-          "thresholds": [],
-          "timeFrom": null,
-          "timeRegions": [],
-          "timeShift": null,
-          "title": "Count",
-          "tooltip": {
-            "shared": true,
-            "sort": 0,
-            "value_type": "individual"
-          },
-          "type": "graph",
-          "xaxis": {
-            "buckets": null,
-            "mode": "time",
-            "name": null,
-            "show": true,
-            "values": []
-          },
-          "yaxes": [
-            {
-              "format": "cpm",
-              "label": null,
-              "logBase": 1,
-              "max": null,
-              "min": null,
-              "show": true
-            },
-            {
-              "format": "short",
-              "label": null,
-              "logBase": 1,
-              "max": null,
-              "min": null,
-              "show": true
-            }
-          ],
-          "yaxis": {
-            "align": false,
-            "alignLevel": null
-          }
-        }
-      ],
-      "title": "Get Lock",
-      "type": "row"
-    },
-    {
-      "collapsed": true,
-      "datasource": null,
-      "gridPos": {
-        "h": 1,
-        "w": 24,
-        "x": 0,
-        "y": 7
-      },
-      "id": 40,
-      "panels": [
-        {
-          "aliasColors": {},
-          "bars": false,
-          "dashLength": 10,
-          "dashes": false,
-          "datasource": "Prometheus",
-          "fieldConfig": {
-            "defaults": {
-              "custom": {},
-              "unit": "s"
-            },
-            "overrides": []
-          },
-          "fill": 1,
-          "fillGradient": 0,
-          "gridPos": {
-            "h": 9,
-            "w": 8,
-            "x": 0,
-            "y": 8
-          },
-          "hiddenSeries": false,
-          "id": 36,
-          "legend": {
-            "avg": false,
-            "current": false,
-            "max": false,
-            "min": false,
-            "show": true,
-            "total": false,
-            "values": false
-          },
-          "lines": true,
-          "linewidth": 1,
-          "nullPointMode": "null",
-          "options": {
-            "alertThreshold": true
-          },
-          "percentage": false,
-          "pluginVersion": "7.4.3",
-          "pointradius": 2,
-          "points": false,
-          "renderer": "flot",
-          "seriesOverrides": [],
-          "spaceLength": 10,
-          "stack": false,
-          "steppedLine": false,
-          "targets": [
-            {
-              "expr": "rate(ds_coauth_data_saveChanges_sum[5m])/rate(ds_coauth_data_saveChanges_count[5m])",
-              "interval": "",
-              "legendFormat": "moving average time of saving changes (for 5 minutes)",
-              "queryType": "randomWalk",
-              "refId": "A"
-            }
-          ],
-          "thresholds": [],
-          "timeFrom": null,
-          "timeRegions": [],
-          "timeShift": null,
-          "title": "Average time",
-          "tooltip": {
-            "shared": true,
-            "sort": 0,
-            "value_type": "individual"
-          },
-          "type": "graph",
-          "xaxis": {
-            "buckets": null,
-            "mode": "time",
-            "name": null,
-            "show": true,
-            "values": []
-          },
-          "yaxes": [
-            {
-              "format": "s",
-              "label": null,
-              "logBase": 1,
-              "max": null,
-              "min": null,
-              "show": true
-            },
-            {
-              "format": "short",
-              "label": null,
-              "logBase": 1,
-              "max": null,
-              "min": null,
-              "show": true
-            }
-          ],
-          "yaxis": {
-            "align": false,
-            "alignLevel": null
-          }
-        },
-        {
-          "aliasColors": {},
-          "bars": false,
-          "dashLength": 10,
-          "dashes": false,
-          "datasource": "Prometheus",
-          "fieldConfig": {
-            "defaults": {
-              "custom": {},
-              "unit": "s"
-            },
-            "overrides": []
-          },
-          "fill": 1,
-          "fillGradient": 0,
-          "gridPos": {
-            "h": 9,
-            "w": 8,
-            "x": 8,
-            "y": 8
-          },
-          "hiddenSeries": false,
-          "id": 38,
-          "legend": {
-            "avg": false,
-            "current": false,
-            "max": false,
-            "min": false,
-            "show": true,
-            "total": false,
-            "values": false
-          },
-          "lines": true,
-          "linewidth": 1,
-          "nullPointMode": "null",
-          "options": {
-            "alertThreshold": true
-          },
-          "percentage": false,
-          "pluginVersion": "7.4.3",
-          "pointradius": 2,
-          "points": false,
-          "renderer": "flot",
-          "seriesOverrides": [],
-          "spaceLength": 10,
-          "stack": false,
-          "steppedLine": false,
-          "targets": [
-            {
-              "expr": "ds_coauth_data_saveChanges",
-              "interval": "",
-              "legendFormat": "quantile=\"{{quantile}}\"",
-              "queryType": "randomWalk",
-              "refId": "A"
-            }
-          ],
-          "thresholds": [],
-          "timeFrom": null,
-          "timeRegions": [],
-          "timeShift": null,
-          "title": "Quantile (0.5, 0.9, 0.99)",
-          "tooltip": {
-            "shared": true,
-            "sort": 0,
-            "value_type": "individual"
-          },
-          "type": "graph",
-          "xaxis": {
-            "buckets": null,
-            "mode": "time",
-            "name": null,
-            "show": true,
-            "values": []
-          },
-          "yaxes": [
-            {
-              "format": "s",
-              "label": null,
-              "logBase": 1,
-              "max": null,
-              "min": null,
-              "show": true
-            },
-            {
-              "format": "short",
-              "label": null,
-              "logBase": 1,
-              "max": null,
-              "min": null,
-              "show": true
-            }
-          ],
-          "yaxis": {
-            "align": false,
-            "alignLevel": null
-          }
-        },
-        {
-          "aliasColors": {},
-          "bars": false,
-          "dashLength": 10,
-          "dashes": false,
-          "datasource": "Prometheus",
-          "fieldConfig": {
-            "defaults": {
-              "custom": {},
-              "unit": "cpm"
-            },
-            "overrides": []
-          },
-          "fill": 1,
-          "fillGradient": 0,
-          "gridPos": {
-            "h": 9,
-            "w": 8,
-            "x": 16,
-            "y": 8
-          },
-          "hiddenSeries": false,
-          "id": 34,
-          "legend": {
-            "avg": false,
-            "current": false,
-            "max": false,
-            "min": false,
-            "show": true,
-            "total": false,
-            "values": false
-          },
-          "lines": true,
-          "linewidth": 1,
-          "nullPointMode": "null",
-          "options": {
-            "alertThreshold": true
-          },
-          "percentage": false,
-          "pluginVersion": "7.4.3",
-          "pointradius": 2,
-          "points": false,
-          "renderer": "flot",
-          "seriesOverrides": [],
-          "spaceLength": 10,
-          "stack": false,
-          "steppedLine": false,
-          "targets": [
-            {
-              "expr": "ds_coauth_data_saveChanges_count - ds_coauth_data_saveChanges_count offset 1m",
-              "interval": "",
-              "legendFormat": "number of saved changes ",
-              "queryType": "randomWalk",
-              "refId": "A"
-            }
-          ],
-          "thresholds": [],
-          "timeFrom": null,
-          "timeRegions": [],
-          "timeShift": null,
-          "title": "Count",
-          "tooltip": {
-            "shared": true,
-            "sort": 0,
-            "value_type": "individual"
-          },
-          "type": "graph",
-          "xaxis": {
-            "buckets": null,
-            "mode": "time",
-            "name": null,
-            "show": true,
-            "values": []
-          },
-          "yaxes": [
-            {
-              "format": "cpm",
-              "label": null,
-              "logBase": 1,
-              "max": null,
-              "min": null,
-              "show": true
-            },
-            {
-              "format": "short",
-              "label": null,
-              "logBase": 1,
-              "max": null,
-              "min": null,
-              "show": true
-            }
-          ],
-          "yaxis": {
-            "align": false,
-            "alignLevel": null
-          }
-        }
-      ],
-      "title": "Saving Changes",
-      "type": "row"
-    },
-    {
-      "collapsed": true,
-      "datasource": null,
-      "gridPos": {
-        "h": 1,
-        "w": 24,
-        "x": 0,
-        "y": 8
-      },
-      "id": 72,
-      "panels": [
-        {
-          "aliasColors": {},
-          "bars": false,
-          "dashLength": 10,
-          "dashes": false,
-          "datasource": "Prometheus",
-          "fieldConfig": {
-            "defaults": {
-              "custom": {},
-              "unit": "s"
-            },
-            "overrides": []
-          },
-          "fill": 1,
-          "fillGradient": 0,
-          "gridPos": {
-            "h": 9,
-            "w": 8,
-            "x": 0,
-            "y": 9
-          },
-          "hiddenSeries": false,
-          "id": 70,
-          "legend": {
-            "avg": false,
-            "current": false,
-            "max": false,
-            "min": false,
-            "show": true,
-            "total": false,
-            "values": false
-          },
-          "lines": true,
-          "linewidth": 1,
-          "nullPointMode": "null",
-          "options": {
-            "alertThreshold": true
-          },
-          "percentage": false,
-          "pluginVersion": "7.4.3",
-          "pointradius": 2,
-          "points": false,
-          "renderer": "flot",
-          "seriesOverrides": [],
-          "spaceLength": 10,
-          "stack": false,
-          "steppedLine": false,
-          "targets": [
-            {
-              "expr": "rate(ds_coauth_openDocument_imgurls_sum[5m])/rate(ds_coauth_openDocument_imgurls_count[5m])",
-              "interval": "",
-              "legendFormat": "moving average time to opening documents with uploading images (for 5 minutes)",
-              "queryType": "randomWalk",
-              "refId": "A"
-            }
-          ],
-          "thresholds": [],
-          "timeFrom": null,
-          "timeRegions": [],
-          "timeShift": null,
-          "title": "Average time",
-          "tooltip": {
-            "shared": true,
-            "sort": 0,
-            "value_type": "individual"
-          },
-          "type": "graph",
-          "xaxis": {
-            "buckets": null,
-            "mode": "time",
-            "name": null,
-            "show": true,
-            "values": []
-          },
-          "yaxes": [
-            {
-              "format": "s",
-              "label": null,
-              "logBase": 1,
-              "max": null,
-              "min": null,
-              "show": true
-            },
-            {
-              "format": "short",
-              "label": null,
-              "logBase": 1,
-              "max": null,
-              "min": null,
-              "show": true
-            }
-          ],
-          "yaxis": {
-            "align": false,
-            "alignLevel": null
-          }
-        },
-        {
-          "aliasColors": {},
-          "bars": false,
-          "dashLength": 10,
-          "dashes": false,
-          "datasource": "Prometheus",
-          "fieldConfig": {
-            "defaults": {
-              "custom": {},
-              "unit": "s"
-            },
-            "overrides": []
-          },
-          "fill": 1,
-          "fillGradient": 0,
-          "gridPos": {
-            "h": 9,
-            "w": 8,
-            "x": 8,
-            "y": 9
-          },
-          "hiddenSeries": false,
-          "id": 68,
-          "legend": {
-            "avg": false,
-            "current": false,
-            "max": false,
-            "min": false,
-            "show": true,
-            "total": false,
-            "values": false
-          },
-          "lines": true,
-          "linewidth": 1,
-          "nullPointMode": "null",
-          "options": {
-            "alertThreshold": true
-          },
-          "percentage": false,
-          "pluginVersion": "7.4.3",
-          "pointradius": 2,
-          "points": false,
-          "renderer": "flot",
-          "seriesOverrides": [],
-          "spaceLength": 10,
-          "stack": false,
-          "steppedLine": false,
-          "targets": [
-            {
-              "expr": "ds_coauth_openDocument_imgurls",
-              "interval": "",
-              "legendFormat": "quantile=\"{{quantile}}\"",
-              "queryType": "randomWalk",
-              "refId": "A"
-            }
-          ],
-          "thresholds": [],
-          "timeFrom": null,
-          "timeRegions": [],
-          "timeShift": null,
-          "title": "Quantile (0.5, 0.9, 0.99)",
-          "tooltip": {
-            "shared": true,
-            "sort": 0,
-            "value_type": "individual"
-          },
-          "type": "graph",
-          "xaxis": {
-            "buckets": null,
-            "mode": "time",
-            "name": null,
-            "show": true,
-            "values": []
-          },
-          "yaxes": [
-            {
-              "format": "s",
-              "label": null,
-              "logBase": 1,
-              "max": null,
-              "min": null,
-              "show": true
-            },
-            {
-              "format": "short",
-              "label": null,
-              "logBase": 1,
-              "max": null,
-              "min": null,
-              "show": true
-            }
-          ],
-          "yaxis": {
-            "align": false,
-            "alignLevel": null
-          }
-        },
-        {
-          "aliasColors": {},
-          "bars": false,
-          "dashLength": 10,
-          "dashes": false,
-          "datasource": "Prometheus",
-          "fieldConfig": {
-            "defaults": {
-              "custom": {},
-              "unit": "cpm"
-            },
-            "overrides": []
-          },
-          "fill": 1,
-          "fillGradient": 0,
-          "gridPos": {
-            "h": 9,
-            "w": 8,
-            "x": 16,
-            "y": 9
-          },
-          "hiddenSeries": false,
-          "id": 66,
-          "legend": {
-            "avg": false,
-            "current": false,
-            "max": false,
-            "min": false,
-            "show": true,
-            "total": false,
-            "values": false
-          },
-          "lines": true,
-          "linewidth": 1,
-          "nullPointMode": "null",
-          "options": {
-            "alertThreshold": true
-          },
-          "percentage": false,
-          "pluginVersion": "7.4.3",
-          "pointradius": 2,
-          "points": false,
-          "renderer": "flot",
-          "seriesOverrides": [],
-          "spaceLength": 10,
-          "stack": false,
-          "steppedLine": false,
-          "targets": [
-            {
-              "expr": "ds_coauth_openDocument_imgurls_count - ds_coauth_openDocument_imgurls_count offset 1m",
-              "interval": "",
-              "legendFormat": "the number of opened documents with the uploaded images",
-              "queryType": "randomWalk",
-              "refId": "A"
-            }
-          ],
-          "thresholds": [],
-          "timeFrom": null,
-          "timeRegions": [],
-          "timeShift": null,
-          "title": "Count",
-          "tooltip": {
-            "shared": true,
-            "sort": 0,
-            "value_type": "individual"
-          },
-          "type": "graph",
-          "xaxis": {
-            "buckets": null,
-            "mode": "time",
-            "name": null,
-            "show": true,
-            "values": []
-          },
-          "yaxes": [
-            {
-              "format": "cpm",
-              "label": null,
-              "logBase": 1,
-              "max": null,
-              "min": null,
-              "show": true
-            },
-            {
-              "format": "short",
-              "label": null,
-              "logBase": 1,
-              "max": null,
-              "min": null,
-              "show": true
-            }
-          ],
-          "yaxis": {
-            "align": false,
-            "alignLevel": null
-          }
-        }
-      ],
-      "title": "Uploading Images",
-      "type": "row"
-    }
-  ],
-  "refresh": "30s",
-  "schemaVersion": 27,
-  "style": "dark",
-  "tags": [],
-  "templating": {
-    "list": []
-  },
-  "time": {
-    "from": "now-3h",
-    "to": "now"
-  },
-  "timepicker": {},
-  "timezone": "",
-  "title": "Statsd DS",
-  "uid": "LDjoK2UGz",
-  "version": 24
-}
\ No newline at end of file
diff --git a/tests/prometheus/prometheus-scrape/statsd-exporter.yml b/tests/prometheus/prometheus-scrape/statsd-exporter.yml
deleted file mode 100644
index b3322d0..0000000
--- a/tests/prometheus/prometheus-scrape/statsd-exporter.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-scrape_configs:
-  - job_name: 'statsd'
-    scrape_interval: 30s
-    static_configs:
-      - targets:
-        - onlyoffice-statsd-exporter:9102
diff --git a/tests/rabbitmq-old.yml b/tests/rabbitmq-old.yml
new file mode 100644
index 0000000..ce18691
--- /dev/null
+++ b/tests/rabbitmq-old.yml
@@ -0,0 +1,29 @@
+version: '2.1'
+services:
+  onlyoffice-documentserver:
+    container_name: onlyoffice-documentserver
+    build:
+      context: ../.
+    environment:
+      - AMQP_SERVER_TYPE=${AMQP_SERVER_TYPE:-rabbitmq}
+      - AMQP_SERVER_URL=${AMQP_SERVER_URL:-amqp://guest:guest@onlyoffice-rabbitmq}
+    stdin_open: true
+    restart: always
+    ports:
+      - '80:80'
+      - '443:443'
+    networks:
+      - onlyoffice
+
+  onlyoffice-rabbitmq:
+    container_name: onlyoffice-rabbitmq
+    image: rabbitmq
+    restart: always
+    networks:
+     - onlyoffice
+    expose:
+      - '5672'
+
+networks:
+  onlyoffice:
+    driver: 'bridge'
diff --git a/tests/rabbitmq.yml b/tests/rabbitmq.yml
new file mode 100644
index 0000000..293045c
--- /dev/null
+++ b/tests/rabbitmq.yml
@@ -0,0 +1,29 @@
+version: '2.1'
+services:
+  onlyoffice-documentserver:
+    container_name: onlyoffice-documentserver
+    build:
+      context: ../.
+    environment:
+      - AMQP_TYPE=${AMQP_TYPE:-rabbitmq}
+      - AMQP_URI=${AMQP_URI:-amqp://guest:guest@onlyoffice-rabbitmq}
+    stdin_open: true
+    restart: always
+    ports:
+      - '80:80'
+      - '443:443'
+    networks:
+      - onlyoffice
+
+  onlyoffice-rabbitmq:
+    container_name: onlyoffice-rabbitmq
+    image: rabbitmq:${RABBITMQ_VERSION:-latest}
+    restart: always
+    networks:
+     - onlyoffice
+    expose:
+      - '5672'
+
+networks:
+  onlyoffice:
+    driver: 'bridge'
diff --git a/tests/redis.yml b/tests/redis.yml
new file mode 100644
index 0000000..849be16
--- /dev/null
+++ b/tests/redis.yml
@@ -0,0 +1,31 @@
+version: '2.1'
+services:
+  onlyoffice-documentserver:
+    container_name: onlyoffice-documentserver
+    build:
+      context: ../.
+      args:
+        - PRODUCT_NAME=${PRODUCT_NAME:-documentserver}
+    environment:
+      - REDIS_SERVER_HOST=${REDIS_SERVER_HOST:-onlyoffice-redis}
+      - REDIS_SERVER_PORT=${REDIS_SERVER_PORT:-6379}
+    stdin_open: true
+    restart: always
+    ports:
+      - '80:80'
+      - '443:443'
+    networks:
+      - onlyoffice
+
+  onlyoffice-redis:
+    container_name: onlyoffice-redis
+    image: redis:${REDIS_VERSION:-latest}
+    restart: always
+    networks:
+     - onlyoffice
+    expose:
+      - '6379'
+
+networks:
+  onlyoffice:
+    driver: 'bridge'
diff --git a/tests/standalone.yml b/tests/standalone.yml
new file mode 100644
index 0000000..f3de32f
--- /dev/null
+++ b/tests/standalone.yml
@@ -0,0 +1,12 @@
+version: '2.1'
+services:
+  onlyoffice-documentserver:
+    container_name: onlyoffice-documentserver
+    build:
+      context: ../.
+      args:
+        - PRODUCT_NAME=${PRODUCT_NAME:-documentserver}
+    stdin_open: true
+    restart: always
+    ports:
+      - '80:80'
diff --git a/tests/test.sh b/tests/test.sh
new file mode 100755
index 0000000..535003a
--- /dev/null
+++ b/tests/test.sh
@@ -0,0 +1,54 @@
+#!/bin/bash
+
+ssl=${ssl:-false}
+private_key=${private_key:-tls.key}
+certificate_request=${certificate_request:-tls.csr}
+certificate=${certificate:-tls.crt}
+
+# Generate certificate
+if [[ $ssl == "true" ]]; then
+  url=${url:-"https://localhost"}
+
+  mkdir -p data/certs
+  pushd data/certs
+
+  openssl genrsa -out ${private_key} 2048
+  openssl req \
+    -new \
+    -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com" \
+    -key ${private_key} \
+    -out ${certificate_request}
+  openssl x509 -req -days 365 -in ${certificate_request} -signkey ${private_key} -out ${certificate}
+  openssl dhparam -out dhparam.pem 2048
+  chmod 400 ${private_key}
+
+  popd
+else
+  url=${url:-"http://localhost"}
+fi
+
+# Check if the yml exists
+if [[ ! -f $config ]]; then
+  echo "File $config doesn't exist!"
+  exit 1
+fi
+
+# Run test environment
+docker-compose -p ds -f $config up -d
+
+wakeup_timeout=90
+
+# Get documentserver healthcheck status
+echo "Wait for service wake up"
+sleep $wakeup_timeout
+healthcheck_res=$(wget --no-check-certificate -qO - ${url}/healthcheck)
+
+# Fail if it isn't true
+if [[ $healthcheck_res == "true" ]]; then
+  echo "Healthcheck passed."
+else
+  echo "Healthcheck failed!"
+  exit 1
+fi
+
+docker-compose -p ds -f $config down