diff --git a/.github/workflows/stable-build.yml b/.github/workflows/stable-build.yml index 01e80f7..b89b847 100644 --- a/.github/workflows/stable-build.yml +++ b/.github/workflows/stable-build.yml @@ -14,12 +14,18 @@ on: type: string required: true default: '1' + latest: + description: 'Push latest tag?' + type: boolean + required: true + default: true env: COMPANY_NAME: "onlyoffice" PRODUCT_NAME: "documentserver" VERSION: ${{ github.event.inputs.tag }} RELEASE_NUMBER: ${{ github.event.inputs.release_number }} + LATEST: ${{ github.event.inputs.latest }} jobs: build: diff --git a/Dockerfile b/Dockerfile index 63f140c..6e9a8d3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,13 +9,13 @@ ARG BASE_VERSION ARG PG_VERSION=16 ARG PACKAGE_SUFFIX=t64 -ENV OC_RELEASE_NUM=21 -ENV OC_RU_VER=12 +ENV OC_RELEASE_NUM=23 +ENV OC_RU_VER=7 ENV OC_RU_REVISION_VER=0 -ENV OC_RESERVED_NUM=0 -ENV OC_RU_DATE=0 -ENV OC_PATH=${OC_RELEASE_NUM}${OC_RU_VER}000 -ENV OC_FILE_SUFFIX=${OC_RELEASE_NUM}.${OC_RU_VER}.${OC_RU_REVISION_VER}.${OC_RESERVED_NUM}.${OC_RU_DATE}${OC_FILE_SUFFIX}dbru +ENV OC_RESERVED_NUM=25 +ENV OC_RU_DATE=01 +ENV OC_PATH=${OC_RELEASE_NUM}${OC_RU_VER}0000 +ENV OC_FILE_SUFFIX=${OC_RELEASE_NUM}.${OC_RU_VER}.${OC_RU_REVISION_VER}.${OC_RESERVED_NUM}.${OC_RU_DATE} ENV OC_VER_DIR=${OC_RELEASE_NUM}_${OC_RU_VER} ENV OC_DOWNLOAD_URL=https://download.oracle.com/otn_software/linux/instantclient/${OC_PATH} @@ -83,11 +83,12 @@ RUN echo "#!/bin/sh\nexit 0" > /usr/sbin/policy-rc.d && \ service postgresql restart && \ 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;" && \ - wget -O basic.zip ${OC_DOWNLOAD_URL}/instantclient-basic-linux.x64-${OC_FILE_SUFFIX}.zip && \ - wget -O sqlplus.zip ${OC_DOWNLOAD_URL}/instantclient-sqlplus-linux.x64-${OC_FILE_SUFFIX}.zip && \ - unzip -d /usr/share basic.zip && \ - unzip -d /usr/share sqlplus.zip && \ + wget -O basic.zip ${OC_DOWNLOAD_URL}/instantclient-basic-linux.$(dpkg --print-architecture | sed 's/amd64/x64/')-${OC_FILE_SUFFIX}.zip && \ + wget -O sqlplus.zip ${OC_DOWNLOAD_URL}/instantclient-sqlplus-linux.$(dpkg --print-architecture | sed 's/amd64/x64/')-${OC_FILE_SUFFIX}.zip && \ + unzip -o basic.zip -d /usr/share && \ + unzip -o sqlplus.zip -d /usr/share && \ mv /usr/share/instantclient_${OC_VER_DIR} /usr/share/instantclient && \ + find /usr/lib /lib -name "libaio.so.1$PACKAGE_SUFFIX" -exec bash -c 'ln -sf "$0" "$(dirname "$0")/libaio.so.1"' {} \; && \ service postgresql stop && \ service redis-server stop && \ service rabbitmq-server stop && \ diff --git a/README.md b/README.md index 298fe09..eef78e5 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ ## Overview -ONLYOFFICE Document Server is an online office suite comprising viewers and editors for texts, spreadsheets and presentations, fully compatible with Office Open XML formats: .docx, .xlsx, .pptx and enabling collaborative editing in real time. +ONLYOFFICE Document Server is an open-source office suite that comprises all the tools you need to work with documents, spreadsheets, presentations, PDFs, and PDF forms. The suite supports office files of all popular formats (DOCX, ODT, XLSX, ODS, CSV, PPTX, ODP, etc.) and enables collaborative editing in real time. Starting from version 6.0, Document Server is distributed as ONLYOFFICE Docs. It has [three editions](https://github.com/ONLYOFFICE/DocumentServer#onlyoffice-document-server-editions). With this image, you will install the free Community version. diff --git a/docker-bake.hcl b/docker-bake.hcl index 7db339c..9eab0de 100644 --- a/docker-bake.hcl +++ b/docker-bake.hcl @@ -110,7 +110,7 @@ target "documentserver-stable" { 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("true",LATEST) ? "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 = { diff --git a/docker-compose.yml b/docker-compose.yml index af3c028..276f8cc 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2,6 +2,7 @@ services: onlyoffice-documentserver: build: context: . + image: onlyoffice/documentserver #[-de,-ee] container_name: onlyoffice-documentserver depends_on: - onlyoffice-postgresql @@ -21,6 +22,12 @@ services: ports: - '80:80' - '443:443' + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:8000/info/info.json"] + interval: 30s + retries: 5 + start_period: 60s + timeout: 10s stdin_open: true restart: always stop_grace_period: 60s @@ -33,14 +40,20 @@ services: onlyoffice-rabbitmq: container_name: onlyoffice-rabbitmq - image: rabbitmq + image: rabbitmq:3 restart: always expose: - '5672' + healthcheck: + test: ["CMD", "rabbitmq-diagnostics", "status"] + interval: 10s + retries: 3 + start_period: 10s + timeout: 10s onlyoffice-postgresql: container_name: onlyoffice-postgresql - image: postgres:12 + image: postgres:15 environment: - POSTGRES_DB=onlyoffice - POSTGRES_USER=onlyoffice @@ -50,6 +63,12 @@ services: - '5432' volumes: - postgresql_data:/var/lib/postgresql + healthcheck: + test: ["CMD-SHELL", "pg_isready -U onlyoffice"] + interval: 10s + retries: 3 + start_period: 10s + timeout: 10s volumes: postgresql_data: diff --git a/run-document-server.sh b/run-document-server.sh index f751b3c..d338512 100644 --- a/run-document-server.sh +++ b/run-document-server.sh @@ -51,12 +51,11 @@ if [ "${RELEASE_DATE}" != "${PREV_RELEASE_DATE}" ]; then fi fi -SSL_CERTIFICATES_DIR="/usr/share/ca-certificates/ds" -mkdir -p ${SSL_CERTIFICATES_DIR} -if find "${DATA_DIR}/certs" -type f \( -name "*.crt" -o -name "*.pem" \) -print -quit >/dev/null 2>&1; then - cp -f ${DATA_DIR}/certs/* ${SSL_CERTIFICATES_DIR} - chmod 644 ${SSL_CERTIFICATES_DIR}/*.{crt,pem} 2>/dev/null - chmod 400 ${SSL_CERTIFICATES_DIR}/*.key 2>/dev/null +SSL_CERTIFICATES_DIR="/usr/share/ca-certificates/ds"; mkdir -p ${SSL_CERTIFICATES_DIR} +find "${DATA_DIR}/certs" -type f \( -iname '*.crt' -o -iname '*.pem' -o -iname '*.key' \) -exec cp -f {} "${SSL_CERTIFICATES_DIR}"/ \; +if find "${SSL_CERTIFICATES_DIR}" -maxdepth 1 -type f | read _; then + find "${SSL_CERTIFICATES_DIR}" -type f \( -iname '*.crt' -o -iname '*.pem' \) -exec chmod 644 {} \; + find "${SSL_CERTIFICATES_DIR}" -type f -iname '*.key' -exec chmod 400 {} \; fi if [[ -z $SSL_CERTIFICATE_PATH ]] && [[ -f ${SSL_CERTIFICATES_DIR}/${COMPANY_NAME}.crt ]]; then @@ -274,8 +273,7 @@ waiting_for_connection(){ waiting_for_db_ready(){ case $DB_TYPE in "oracle") - PDB="XEPDB1" - ORACLE_SQL="sqlplus $DB_USER/$DB_PWD@//$DB_HOST:$DB_PORT/$PDB" + ORACLE_SQL="sqlplus $DB_USER/$DB_PWD@//$DB_HOST:$DB_PORT/${DB_NAME}" DB_TEST="echo \"SELECT version FROM V\$INSTANCE;\" | $ORACLE_SQL 2>/dev/null | grep \"Connected\" | wc -l" ;; *) @@ -510,7 +508,7 @@ upgrade_mysql_tbl() { } upgrade_mssql_tbl() { - CONN_PARAMS="-U $DB_USER -P "$DB_PWD" -C" + CONN_PARAMS="-d $DB_NAME -U $DB_USER -P "$DB_PWD" -C" MSSQL="/opt/mssql-tools18/bin/sqlcmd -S $DB_HOST,$DB_PORT $CONN_PARAMS" $MSSQL < "$APP_DIR/server/schema/mssql/removetbl.sql" >/dev/null 2>&1 @@ -518,8 +516,7 @@ upgrade_mssql_tbl() { } upgrade_oracle_tbl() { - PDB="XEPDB1" - ORACLE_SQL="sqlplus $DB_USER/$DB_PWD@//$DB_HOST:$DB_PORT/$PDB" + ORACLE_SQL="sqlplus $DB_USER/$DB_PWD@//$DB_HOST:$DB_PORT/${DB_NAME}" $ORACLE_SQL @$APP_DIR/server/schema/oracle/removetbl.sql >/dev/null 2>&1 $ORACLE_SQL @$APP_DIR/server/schema/oracle/createdb.sql >/dev/null 2>&1 @@ -547,15 +544,14 @@ create_mysql_tbl() { create_mssql_tbl() { create_mssql_db - CONN_PARAMS="-U $DB_USER -P "$DB_PWD" -C" + CONN_PARAMS="-d $DB_NAME -U $DB_USER -P "$DB_PWD" -C" MSSQL="/opt/mssql-tools18/bin/sqlcmd -S $DB_HOST,$DB_PORT $CONN_PARAMS" $MSSQL < "$APP_DIR/server/schema/mssql/createdb.sql" >/dev/null 2>&1 } create_oracle_tbl() { - PDB="XEPDB1" - ORACLE_SQL="sqlplus $DB_USER/$DB_PWD@//$DB_HOST:$DB_PORT/$PDB" + ORACLE_SQL="sqlplus $DB_USER/$DB_PWD@//$DB_HOST:$DB_PORT/${DB_NAME}" $ORACLE_SQL @$APP_DIR/server/schema/oracle/createdb.sql >/dev/null 2>&1 } @@ -655,6 +651,7 @@ for i in ${DS_LIB_DIR}/App_Data/cache/files ${DS_LIB_DIR}/App_Data/docbuilder ${ done # change folder rights +chown ds:ds "${DATA_DIR}" for i in ${DS_LOG_DIR} ${DS_LOG_DIR}-example ${LIB_DIR}; do chown -R ds:ds "$i" chmod -R 755 "$i" @@ -792,4 +789,4 @@ start_process documentserver-static-gzip.sh ${ONLYOFFICE_DATA_CONTAINER} echo "${JWT_MESSAGE}" -start_process tail -f /var/log/${COMPANY_NAME}/**/*.log +start_process find "$DS_LOG_DIR" "$DS_LOG_DIR-example" -type f -name "*.log" | xargs tail -f