Compare commits

...

10 Commits

5 changed files with 150 additions and 27 deletions

View File

@ -77,31 +77,36 @@ jobs:
exit 1
fi
echo "editions=$(jq -n -c --arg s "${EDITIONS[*]}" '($s|split(" "))')" >> $GITHUB_OUTPUT
echo "platforms=$(jq -c -n '$ARGS.positional' --args "${PLATFORMS[@]}")" >> $GITHUB_OUTPUT
outputs:
editions: ${{ steps.matrix.outputs.editions }}
platforms: ${{ steps.matrix.outputs.platforms }}
build:
name: "Build ${{ matrix.image }}-${{ matrix.edition }}"
runs-on: ubuntu-latest
name: "Build ${{ matrix.image }}-${{ matrix.edition }}:${{ matrix.platform }}"
runs-on: ${{ matrix.runner }}
needs: prepare
strategy:
fail-fast: false
matrix:
image: ["documentserver"]
edition: ${{ fromJSON(needs.prepare.outputs.editions) }}
platform: ${{ fromJSON(needs.prepare.outputs.platforms) }}
include:
- platform: amd64
runner: ubuntu-latest
- platform: arm64
runner: ubuntu-24.04-arm
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
uses: actions/checkout@v4
- name: Set up Docker Buildx
id: buildx
uses: docker/setup-buildx-action@v2
uses: docker/setup-buildx-action@v3
- name: Login to Docker Hub
uses: docker/login-action@v2
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
@ -126,8 +131,7 @@ jobs:
id: build-ds
env:
BRANCH_NAME: ${{ github.ref_name }}
AMD64: ${{ github.event.inputs.amd64 }}
ARM64: ${{ github.event.inputs.arm64 }}
PLATFORM: linux/${{ matrix.platform }}
BUILD_NUMBER: ${{ github.event.inputs.build }}
EDITION: ${{ matrix.edition }}
IMAGE: ${{ matrix.image }}
@ -149,10 +153,6 @@ jobs:
;;
esac
[ "${AMD64}" = true ] && PLATFORMS+=("amd64")
[ "${ARM64}" = true ] && PLATFORMS+=("arm64")
PLATFORM=$(echo ${PLATFORMS[*]/#/linux/} | tr ' ' ',')
if [ "$BRANCH_NAME" = develop ]; then
BUILD_CHANNEL=nightly
PRODUCT_VERSION=99.99.99
@ -164,10 +164,9 @@ jobs:
export PRODUCT_EDITION
export PACKAGE_VERSION=${PRODUCT_VERSION}-${BUILD_NUMBER}
export BUILD_CHANNEL
export PLATFORM
export DOCKERFILE=Dockerfile
export PREFIX_NAME=4testing-
export TAG=${PRODUCT_VERSION}.${BUILD_NUMBER}
export TAG=${PRODUCT_VERSION}.${BUILD_NUMBER}-${{ matrix.platform }}
### ==>> Build and push images at this step ###
@ -186,6 +185,7 @@ jobs:
- name: Trigger zap manualy
if: >-
matrix.edition == 'community' &&
matrix.platform == 'amd64' &&
(startsWith(steps.build-ds.outputs.branch, 'release/') ||
startsWith(steps.build-ds.outputs.branch, 'hotfix/'))
env:
@ -200,3 +200,120 @@ jobs:
-f version="${VERSION}"
shell: bash
- name: Save build result to file
if: always()
run: |
mkdir -p build-result
cat > build-result/info.json <<EOF
{
"status": "${{ job.status }}"
}
EOF
- name: Upload build result artifact
if: always()
uses: actions/upload-artifact@v4
with:
name: build-result-${{ matrix.edition }}-${{ matrix.platform }}
path: build-result
make-images:
runs-on: ubuntu-latest
needs: [prepare,build]
if: always()
strategy:
fail-fast: false
matrix:
image: ["documentserver"]
edition: ${{ fromJSON(needs.prepare.outputs.editions) }}
steps:
- name: Download all build results
uses: actions/download-artifact@v4
with:
path: build-results
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
- name: "Make images documentserver"
env:
EDITION: ${{ matrix.edition }}
BUILD_NUMBER: ${{ github.event.inputs.build }}
BRANCH_NAME: ${{ github.ref_name }}
run: |
case "${EDITION}" in
community)
PRODUCT_EDITION=""
;;
enterprise)
PRODUCT_EDITION="-ee"
;;
developer)
PRODUCT_EDITION="-de"
;;
esac
AMD64_STATUS=$(cat ./build-results/build-result-${{ matrix.edition }}-amd64/info.json | jq -r .status)
ARM64_STATUS=$(cat ./build-results/build-result-${{ matrix.edition }}-arm64/info.json | jq -r .status)
echo "ARM64 status: ${ARM64_STATUS}"
echo "AMD64 status: ${AMD64_STATUS}"
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
export TAG=${PRODUCT_VERSION}.${BUILD_NUMBER}
FROM_TAGS=()
PUSH_TAGS=()
check_image() {
local img="$1"
local timeout=120
local interval=20
local elapsed=0
echo "Checking for image: $img"
while (( elapsed < timeout )); do
if docker manifest inspect "$img" > /dev/null 2>&1; then
echo "Found image: $img"
FROM_TAGS+=( "$img" )
return 0
fi
echo "Image not found yet, retrying in ${interval}s..."
sleep $interval
elapsed=$(( elapsed + interval ))
done
echo "ERROR: Image not found after ${timeout}s: $img"
return 1
}
if [[ "${AMD64_STATUS}" == "success" ]]; then
check_image "${COMPANY_NAME}/4testing-${PRODUCT_NAME}${PRODUCT_EDITION}:${TAG}-amd64"
fi
if [[ "${ARM64_STATUS}" == "success" ]]; then
check_image "${COMPANY_NAME}/4testing-${PRODUCT_NAME}${PRODUCT_EDITION}:${TAG}-arm64"
fi
PUSH_TAGS=(
-t "${COMPANY_NAME}/4testing-${PRODUCT_NAME}${PRODUCT_EDITION}:${TAG}"
)
if [[ "${BUILD_CHANNEL}" == "nightly" ]]; then
PUSH_TAGS+=( -t "${COMPANY_NAME}/4testing-${PRODUCT_NAME}${PRODUCT_EDITION}:latest" )
fi
docker buildx imagetools create "${PUSH_TAGS[@]}" "${FROM_TAGS[@]}"

View File

@ -214,6 +214,8 @@ Below is the complete list of parameters that can be set using environment varia
- **ALLOW_PRIVATE_IP_ADDRESS**: Defines if it is allowed to connect private IP address or not. Defaults to `false`.
- **USE_UNAUTHORIZED_STORAGE**: Set to `true` if using self-signed certificates for your storage server e.g. Nextcloud. Defaults to `false`
- **GENERATE_FONTS**: When 'true' regenerates fonts list and the fonts thumbnails etc. at each start. Defaults to `true`
- **ADMINPANEL_ENABLED**: Enables admin panel service autostart. Defaults to `false`.
- **EXAMPLE_ENABLED**: Enables example service autostart. Defaults to `false`.
- **METRICS_ENABLED**: Specifies the enabling StatsD for ONLYOFFICE Document Server. Defaults to `false`.
- **METRICS_HOST**: Defines StatsD listening host. Defaults to `localhost`.
- **METRICS_PORT**: Defines StatsD listening port. Defaults to `8125`.

View File

@ -2,7 +2,7 @@
command=/var/www/COMPANY_NAME/documentserver/server/DocService/docservice
directory=/var/www/COMPANY_NAME/documentserver/server/DocService
user=ds
environment=NODE_ENV=production-linux,NODE_CONFIG_DIR=/etc/COMPANY_NAME/documentserver,NODE_DISABLE_COLORS=1,APPLICATION_NAME=COMPANY_NAME
environment=NODE_ENV=production-linux,NODE_CONFIG_DIR=/etc/COMPANY_NAME/documentserver,NODE_DISABLE_COLORS=1,PKG_NATIVE_CACHE_PATH=/tmp/.cache,APPLICATION_NAME=COMPANY_NAME
stdout_logfile=/var/log/COMPANY_NAME/documentserver/docservice/out.log
stdout_logfile_backups=0
stdout_logfile_maxbytes=0

View File

@ -90,8 +90,7 @@ target "documentserver" {
target = "documentserver"
dockerfile = "${DOCKERFILE}"
tags = [
"docker.io/${COMPANY_NAME}/${PREFIX_NAME}${PRODUCT_NAME}${PRODUCT_EDITION}:${TAG}",
equal("nightly",BUILD_CHANNEL) ? "docker.io/${COMPANY_NAME}/${PREFIX_NAME}${PRODUCT_NAME}${PRODUCT_EDITION}:latest": "",
"docker.io/${COMPANY_NAME}/${PREFIX_NAME}${PRODUCT_NAME}${PRODUCT_EDITION}:${TAG}"
]
platforms = ["${PLATFORM}"]
args = {

View File

@ -84,7 +84,7 @@ elif [[ -f ${SSL_CERTIFICATE_PATH} ]]; then
fi
if [[ -n $NODE_EXTRA_ENVIRONMENT ]]; then
sed -i "s|^environment=.*$|&,NODE_EXTRA_CA_CERTS=${NODE_EXTRA_ENVIRONMENT}|" /etc/supervisor/conf.d/*.conf
sed -i "s|^environment=.*$|&,NODE_EXTRA_CA_CERTS=${NODE_EXTRA_ENVIRONMENT}|" ${SUPERVISOR_CONF_DIR}/*.conf
fi
CA_CERTIFICATES_PATH=${CA_CERTIFICATES_PATH:-${SSL_CERTIFICATES_DIR}/ca-certificates.pem}
@ -105,7 +105,7 @@ NGINX_CONFIG_PATH="/etc/nginx/nginx.conf"
NGINX_WORKER_PROCESSES=${NGINX_WORKER_PROCESSES:-1}
NGINX_ACCESS_LOG=${NGINX_ACCESS_LOG:-false}
# Limiting the maximum number of simultaneous connections due to possible memory shortage
LIMIT=$(ulimit -n); [ $LIMIT -gt 1048576 ] && LIMIT=1048576
LIMIT=$(ulimit -n); [ "$LIMIT" = "unlimited" ] || [ "$LIMIT" -gt 524288 ] && LIMIT=524288
NGINX_WORKER_CONNECTIONS=${NGINX_WORKER_CONNECTIONS:-$LIMIT}
RABBIT_CONNECTIONS=${RABBIT_CONNECTIONS:-$LIMIT}
@ -585,16 +585,20 @@ create_oracle_tbl() {
update_welcome_page() {
WELCOME_PAGE="${APP_DIR}-example/welcome/docker.html"
ADMIN_DISABLED_PAGE="${APP_DIR}-example/welcome/admin-disabled.html"
EXAMPLE_DISABLED_PAGE="${APP_DIR}-example/welcome/example-disabled.html"
sed -Ei 's#sudo systemctl start ds-(adminpanel|example)#sudo docker exec $(sudo docker ps -q) supervisorctl start ds:\1#g' "$ADMIN_DISABLED_PAGE" "$EXAMPLE_DISABLED_PAGE"
if [[ -e $WELCOME_PAGE ]]; then
DOCKER_CONTAINER_ID=$(basename $(cat /proc/1/cpuset))
(( ${#DOCKER_CONTAINER_ID} < 12 )) && DOCKER_CONTAINER_ID=$(hostname)
if (( ${#DOCKER_CONTAINER_ID} >= 12 )); then
if [[ -x $(command -v docker) ]]; then
DOCKER_CONTAINER_NAME=$(docker inspect --format="{{.Name}}" $DOCKER_CONTAINER_ID)
sed 's/$(sudo docker ps -q)/'"${DOCKER_CONTAINER_NAME#/}"'/' -i $WELCOME_PAGE
sed 's/$(sudo docker ps -q)/'"${DOCKER_CONTAINER_NAME#/}"'/' -i $WELCOME_PAGE "$ADMIN_DISABLED_PAGE" "$EXAMPLE_DISABLED_PAGE"
JWT_MESSAGE=$(echo $JWT_MESSAGE | sed 's/$(sudo docker ps -q)/'"${DOCKER_CONTAINER_NAME#/}"'/')
else
sed 's/$(sudo docker ps -q)/'"${DOCKER_CONTAINER_ID::12}"'/' -i $WELCOME_PAGE
sed 's/$(sudo docker ps -q)/'"${DOCKER_CONTAINER_ID::12}"'/' -i $WELCOME_PAGE "$ADMIN_DISABLED_PAGE" "$EXAMPLE_DISABLED_PAGE"
JWT_MESSAGE=$(echo $JWT_MESSAGE | sed 's/$(sudo docker ps -q)/'"${DOCKER_CONTAINER_ID::12}"'/')
fi
fi
@ -736,7 +740,8 @@ if [ ${ONLYOFFICE_DATA_CONTAINER_HOST} = "localhost" ]; then
chmod 400 ${RABBITMQ_DATA}/.erlang.cookie
fi
echo "ulimit -n $RABBIT_CONNECTIONS" >> /etc/default/rabbitmq-server
sed -i '/^[[:space:]]*ulimit[[:space:]]\+-n[[:space:]]\+/d' /etc/default/rabbitmq-server
printf 'ulimit -n %s\n' "${RABBIT_CONNECTIONS}" >> /etc/default/rabbitmq-server
LOCAL_SERVICES+=("rabbitmq-server")
# allow Rabbitmq startup after container kill
@ -793,11 +798,11 @@ if [ ${ONLYOFFICE_DATA_CONTAINER} != "true" ]; then
update_nginx_settings
if [ "${PLUGINS_ENABLED}" = "true" ]; then
echo -n Installing plugins, please wait...
start_process documentserver-pluginsmanager.sh -r false --update=\"${APP_DIR}/sdkjs-plugins/plugin-list-default.json\" >/dev/null
echo Done
( documentserver-pluginsmanager.sh -r false --update="${APP_DIR}/sdkjs-plugins/plugin-list-default.json" >/dev/null; echo "[pluginsmanager] Plugins initialization finished" >/proc/1/fd/1 ) &
fi
[ "${ADMINPANEL_ENABLED:-false}" = "true" ] && sed -i 's,autostart=false,autostart=true,' ${SUPERVISOR_CONF_DIR}/ds-adminpanel.conf
[ "${EXAMPLE_ENABLED:-false}" = "true" ] && sed -i 's,autostart=false,autostart=true,' ${SUPERVISOR_CONF_DIR}/ds-example.conf
service supervisor start
# start cron to enable log rotating