From 09839b5667af407361fb9da27d687f87668894eb Mon Sep 17 00:00:00 2001 From: Evgeniy Antonyuk Date: Wed, 21 Aug 2024 17:07:36 +0300 Subject: [PATCH 1/3] Move external dependency connection check to a separate function --- install/OneClickInstall/install-Docker.sh | 84 ++++++++++++----------- 1 file changed, 44 insertions(+), 40 deletions(-) diff --git a/install/OneClickInstall/install-Docker.sh b/install/OneClickInstall/install-Docker.sh index da3f8129ca2..086ab18a4e0 100644 --- a/install/OneClickInstall/install-Docker.sh +++ b/install/OneClickInstall/install-Docker.sh @@ -972,15 +972,8 @@ domain_check () { establish_conn() { echo -n "Trying to establish $3 connection... " - - exec {FD}<> /dev/tcp/$1/$2 && exec {FD}>&- - if [ "$?" != 0 ]; then - echo "FAILURE"; - exit 1; - fi - - echo "OK" + exec {FD}<> /dev/tcp/${1}/${2} && { exec {FD}>&-; echo "OK"; } || { echo "FAILURE"; exit 1; } } get_env_parameter () { @@ -1057,6 +1050,7 @@ set_docs_url_external () { if [[ ! -z ${DOCUMENT_SERVER_URL_EXTERNAL} ]] && [[ $DOCUMENT_SERVER_URL_EXTERNAL =~ ^(https?://)?([^:/]+)(:([0-9]+))?(/.*)?$ ]]; then [[ -z ${BASH_REMATCH[1]} ]] && DOCUMENT_SERVER_URL_EXTERNAL="http://$DOCUMENT_SERVER_URL_EXTERNAL" + DOCUMENT_SERVER_PROTOCOL="${BASH_REMATCH[1]}" DOCUMENT_SERVER_HOST="${BASH_REMATCH[2]}" DOCUMENT_SERVER_PORT="${BASH_REMATCH[4]:-"80"}" fi @@ -1132,11 +1126,6 @@ set_installation_type_data () { } download_files () { - # Fixes issues with variables when upgrading to v1.1.3 - HOSTS=("ELK_HOST" "REDIS_HOST" "RABBIT_HOST" "MYSQL_HOST"); - for HOST in "${HOSTS[@]}"; do [[ "${!HOST}" == *CONTAINER_PREFIX* || "${!HOST}" == *$PACKAGE_SYSNAME* ]] && export "$HOST="; done - [[ "${APP_URL_PORTAL}" == *${PACKAGE_SYSNAME}-proxy* ]] && APP_URL_PORTAL="" - [ "${OFFLINE_INSTALLATION}" = "false" ] && echo -n "Downloading configuration files to ${BASE_DIR}..." || echo "Unzip docker.tar.gz to ${BASE_DIR}..." [ -d "${BASE_DIR}" ] && rm -rf "${BASE_DIR}" @@ -1185,10 +1174,6 @@ install_mysql_server () { docker-compose -f $BASE_DIR/db.yml up -d elif [ "$INSTALL_MYSQL_SERVER" == "pull" ]; then docker-compose -f $BASE_DIR/db.yml pull - elif [ ! -z "$MYSQL_HOST" ]; then - establish_conn ${MYSQL_HOST} "${MYSQL_PORT:-"3306"}" "MySQL" - reconfigure MYSQL_HOST ${MYSQL_HOST} - reconfigure MYSQL_PORT "${MYSQL_PORT:-"3306"}" fi } @@ -1199,11 +1184,6 @@ install_document_server () { docker-compose -f $BASE_DIR/ds.yml up -d elif [ "$INSTALL_DOCUMENT_SERVER" == "pull" ]; then docker-compose -f $BASE_DIR/ds.yml pull - elif [ ! -z "$DOCUMENT_SERVER_HOST" ]; then - APP_URL_PORTAL=${APP_URL_PORTAL:-"http://$(curl -s ifconfig.me):${EXTERNAL_PORT}"} - establish_conn ${DOCUMENT_SERVER_HOST} ${DOCUMENT_SERVER_PORT} "${PACKAGE_SYSNAME^^} Docs" - reconfigure DOCUMENT_SERVER_URL_EXTERNAL ${DOCUMENT_SERVER_URL_EXTERNAL} - reconfigure DOCUMENT_SERVER_URL_PUBLIC ${DOCUMENT_SERVER_URL_EXTERNAL} fi } @@ -1212,13 +1192,6 @@ install_rabbitmq () { docker-compose -f $BASE_DIR/rabbitmq.yml up -d elif [ "$INSTALL_RABBITMQ" == "pull" ]; then docker-compose -f $BASE_DIR/rabbitmq.yml pull - elif [ ! -z "$RABBIT_HOST" ]; then - establish_conn ${RABBIT_HOST} "${RABBIT_PORT:-"5672"}" "RabbitMQ" - reconfigure RABBIT_HOST ${RABBIT_HOST} - reconfigure RABBIT_PORT "${RABBIT_PORT:-"5672"}" - reconfigure RABBIT_USER_NAME ${RABBIT_USER_NAME} - reconfigure RABBIT_PASSWORD ${RABBIT_PASSWORD} - reconfigure RABBIT_VIRTUAL_HOST "${RABBIT_VIRTUAL_HOST:-"/"}" fi } @@ -1227,12 +1200,6 @@ install_redis () { docker-compose -f $BASE_DIR/redis.yml up -d elif [ "$INSTALL_REDIS" == "pull" ]; then docker-compose -f $BASE_DIR/redis.yml pull - elif [ ! -z "$REDIS_HOST" ]; then - establish_conn ${REDIS_HOST} "${REDIS_PORT:-"6379"}" "Redis" - reconfigure REDIS_HOST ${REDIS_HOST} - reconfigure REDIS_PORT "${REDIS_PORT:-"6379"}" - reconfigure REDIS_USER_NAME ${REDIS_USER_NAME} - reconfigure REDIS_PASSWORD ${REDIS_PASSWORD} fi } @@ -1246,11 +1213,6 @@ install_elasticsearch () { docker-compose -f $BASE_DIR/opensearch.yml up -d elif [ "$INSTALL_ELASTICSEARCH" == "pull" ]; then docker-compose -f $BASE_DIR/opensearch.yml pull - elif [ ! -z "$ELK_HOST" ]; then - establish_conn ${ELK_HOST} "${ELK_PORT:-"9200"}" "search engine" - reconfigure ELK_SHEME "${ELK_SHEME:-"http"}" - reconfigure ELK_HOST ${ELK_HOST} - reconfigure ELK_PORT "${ELK_PORT:-"9200"}" fi } @@ -1428,6 +1390,46 @@ check_docker_image () { fi } +services_check_connection () { + # Fixes issues with variables when upgrading to v1.1.3 + HOSTS=("ELK_HOST" "REDIS_HOST" "RABBIT_HOST" "MYSQL_HOST"); + for HOST in "${HOSTS[@]}"; do [[ "${!HOST}" == *CONTAINER_PREFIX* || "${!HOST}" == *$PACKAGE_SYSNAME* ]] && export "$HOST="; done + [[ "${APP_URL_PORTAL}" == *${PACKAGE_SYSNAME}-proxy* ]] && APP_URL_PORTAL="" + + [[ ! -z "$MYSQL_HOST" ]] && { + establish_conn ${MYSQL_HOST} "${MYSQL_PORT:-3306}" "MySQL" + reconfigure MYSQL_HOST ${MYSQL_HOST} + reconfigure MYSQL_PORT "${MYSQL_PORT:-3306}" + } + [[ ! -z "$DOCUMENT_SERVER_HOST" ]] && { + APP_URL_PORTAL=${APP_URL_PORTAL:-"http://$(curl -s ifconfig.me):${EXTERNAL_PORT}"} + establish_conn ${DOCUMENT_SERVER_HOST} ${DOCUMENT_SERVER_PORT} "${PACKAGE_SYSNAME^^} Docs" + reconfigure DOCUMENT_SERVER_URL_EXTERNAL ${DOCUMENT_SERVER_URL_EXTERNAL} + reconfigure DOCUMENT_SERVER_URL_PUBLIC ${DOCUMENT_SERVER_URL_EXTERNAL} + } + [[ ! -z "$RABBIT_HOST" ]] && { + establish_conn ${RABBIT_HOST} "${RABBIT_PORT:-5672}" "RabbitMQ" + reconfigure RABBIT_HOST ${RABBIT_HOST} + reconfigure RABBIT_PORT "${RABBIT_PORT:-5672}" + reconfigure RABBIT_USER_NAME ${RABBIT_USER_NAME} + reconfigure RABBIT_PASSWORD ${RABBIT_PASSWORD} + reconfigure RABBIT_VIRTUAL_HOST "${RABBIT_VIRTUAL_HOST:-/}" + } + [[ ! -z "$REDIS_HOST" ]] && { + establish_conn ${REDIS_HOST} "${REDIS_PORT:-6379}" "Redis" + reconfigure REDIS_HOST ${REDIS_HOST} + reconfigure REDIS_PORT "${REDIS_PORT:-6379}" + reconfigure REDIS_USER_NAME ${REDIS_USER_NAME} + reconfigure REDIS_PASSWORD ${REDIS_PASSWORD} + } + [[ ! -z "$ELK_HOST" ]] && { + establish_conn ${ELK_HOST} "${ELK_PORT:-9200}" "search engine" + reconfigure ELK_SHEME "${ELK_SHEME:-http}" + reconfigure ELK_HOST ${ELK_HOST} + reconfigure ELK_PORT "${ELK_PORT:-9200}" + } +} + start_installation () { root_checking @@ -1475,6 +1477,8 @@ start_installation () { check_docker_image + services_check_connection + install_elasticsearch install_fluent_bit From d84ace4d9dfb0523b821713ab932a6b3c5a5e2c9 Mon Sep 17 00:00:00 2001 From: Evgeniy Antonyuk Date: Thu, 22 Aug 2024 17:24:58 +0300 Subject: [PATCH 2/3] Add the ability to configure the amqps protocol in docker --- install/OneClickInstall/install-Docker.sh | 10 ++++++++++ install/docker/.env | 1 + install/docker/docker-entrypoint.py | 7 ++++++- install/docker/docspace.profiles.yml | 1 + install/docker/docspace.yml | 1 + install/docker/notify.yml | 1 + 6 files changed, 20 insertions(+), 1 deletion(-) diff --git a/install/OneClickInstall/install-Docker.sh b/install/OneClickInstall/install-Docker.sh index 086ab18a4e0..475bba4e24c 100644 --- a/install/OneClickInstall/install-Docker.sh +++ b/install/OneClickInstall/install-Docker.sh @@ -87,6 +87,7 @@ REDIS_PORT="" REDIS_USER_NAME="" REDIS_PASSWORD="" +RABBIT_PROTOCOL="" RABBIT_HOST="" RABBIT_PORT="" RABBIT_USER_NAME="" @@ -409,6 +410,13 @@ while [ "$1" != "" ]; do fi ;; + -rbpr | --rabbitmqprotocol ) + if [ "$2" != "" ]; then + RABBIT_PROTOCOL=$2 + shift + fi + ;; + -rbth | --rabbitmqhost ) if [ "$2" != "" ]; then RABBIT_HOST=$2 @@ -536,6 +544,7 @@ while [ "$1" != "" ]; do echo " -rdsp, --redisport redis server port number (default value 6379)" echo " -rdsu, --redisusername redis user name" echo " -rdspass, --redispassword password set for redis account" + echo " -rbpr, --rabbitmqprotocol the protocol for the connection to rabbitmq server (default value amqp)" echo " -rbth, --rabbitmqhost the IP address or hostname of the rabbitmq server" echo " -rbtp, --rabbitmqport rabbitmq server port number (default value 5672)" echo " -rbtu, --rabbitmqusername username for rabbitmq server account" @@ -1409,6 +1418,7 @@ services_check_connection () { } [[ ! -z "$RABBIT_HOST" ]] && { establish_conn ${RABBIT_HOST} "${RABBIT_PORT:-5672}" "RabbitMQ" + reconfigure RABBIT_PROTOCOL ${RABBIT_PROTOCOL:-amqp} reconfigure RABBIT_HOST ${RABBIT_HOST} reconfigure RABBIT_PORT "${RABBIT_PORT:-5672}" reconfigure RABBIT_USER_NAME ${RABBIT_USER_NAME} diff --git a/install/docker/.env b/install/docker/.env index 651ef0bdf0e..45463627112 100644 --- a/install/docker/.env +++ b/install/docker/.env @@ -75,6 +75,7 @@ # rabbitmq # RABBIT_CONTAINER_NAME=${CONTAINER_PREFIX}rabbitmq + RABBIT_PROTOCOL="" RABBIT_HOST="" RABBIT_PORT=5672 RABBIT_VIRTUAL_HOST=/ diff --git a/install/docker/docker-entrypoint.py b/install/docker/docker-entrypoint.py index e1a35226235..20537e0ddda 100644 --- a/install/docker/docker-entrypoint.py +++ b/install/docker/docker-entrypoint.py @@ -69,13 +69,18 @@ REDIS_CONNECTION_HOST = REDIS_HOST if REDIS_HOST else REDIS_CONTAINER_NAME RABBIT_CONTAINER_NAME = os.environ["RABBIT_CONTAINER_NAME"] if environ.get("RABBIT_CONTAINER_NAME") else "onlyoffice-rabbitmq" +RABBIT_PROTOCOL = os.environ["RABBIT_PROTOCOL"] if environ.get("RABBIT_PROTOCOL") else "amqp" RABBIT_HOST = os.environ["RABBIT_HOST"] if environ.get("RABBIT_HOST") else None RABBIT_USER_NAME = os.environ["RABBIT_USER_NAME"] if environ.get("RABBIT_USER_NAME") else "guest" RABBIT_PASSWORD = os.environ["RABBIT_PASSWORD"] if environ.get("RABBIT_PASSWORD") else "guest" RABBIT_PORT = os.environ["RABBIT_PORT"] if environ.get("RABBIT_PORT") else "5672" RABBIT_VIRTUAL_HOST = os.environ["RABBIT_VIRTUAL_HOST"] if environ.get("RABBIT_VIRTUAL_HOST") else "/" -RABBIT_URI = {"Uri": os.environ["RABBIT_URI"]} if environ.get("RABBIT_URI") else None RABBIT_CONNECTION_HOST = RABBIT_HOST if RABBIT_HOST else RABBIT_CONTAINER_NAME +RABBIT_URI = ( + {"Uri": os.environ["RABBIT_URI"]} if os.environ.get("RABBIT_URI") + else {"Uri": f"{RABBIT_PROTOCOL}://{RABBIT_USER_NAME}:{RABBIT_PASSWORD}@{RABBIT_HOST}:{RABBIT_PORT}{RABBIT_VIRTUAL_HOST}"} + if RABBIT_PROTOCOL == "amqps" and RABBIT_HOST else None +) class RunServices: def __init__(self, SERVICE_PORT, PATH_TO_CONF): diff --git a/install/docker/docspace.profiles.yml b/install/docker/docspace.profiles.yml index b6d0a7b75b8..f6fef1cf080 100644 --- a/install/docker/docspace.profiles.yml +++ b/install/docker/docspace.profiles.yml @@ -45,6 +45,7 @@ x-service: &x-service-base ELK_HOST: ${ELK_HOST} ELK_PORT: ${ELK_PORT} REDIS_CONTAINER_NAME: ${REDIS_CONTAINER_NAME} + RABBIT_PROTOCOL: ${RABBIT_PROTOCOL} REDIS_HOST: ${REDIS_HOST} REDIS_PORT: ${REDIS_PORT} REDIS_USER_NAME: ${REDIS_USER_NAME} diff --git a/install/docker/docspace.yml b/install/docker/docspace.yml index 562b7391aaa..dbb3c2331e1 100644 --- a/install/docker/docspace.yml +++ b/install/docker/docspace.yml @@ -42,6 +42,7 @@ x-service: &x-service-base REDIS_USER_NAME: ${REDIS_USER_NAME} REDIS_PASSWORD: ${REDIS_PASSWORD} RABBIT_CONTAINER_NAME: ${RABBIT_CONTAINER_NAME} + RABBIT_PROTOCOL: ${RABBIT_PROTOCOL} RABBIT_HOST: ${RABBIT_HOST} RABBIT_PORT: ${RABBIT_PORT} RABBIT_VIRTUAL_HOST: ${RABBIT_VIRTUAL_HOST} diff --git a/install/docker/notify.yml b/install/docker/notify.yml index ae5de46949f..945d7eda7bb 100644 --- a/install/docker/notify.yml +++ b/install/docker/notify.yml @@ -43,6 +43,7 @@ x-service: REDIS_USER_NAME: ${REDIS_USER_NAME} REDIS_PASSWORD: ${REDIS_PASSWORD} RABBIT_CONTAINER_NAME: ${RABBIT_CONTAINER_NAME} + RABBIT_PROTOCOL: ${RABBIT_PROTOCOL} RABBIT_HOST: ${RABBIT_HOST} RABBIT_PORT: ${RABBIT_PORT} RABBIT_VIRTUAL_HOST: ${RABBIT_VIRTUAL_HOST} From 534eafa2477a81f1d5946d46672cb0458509ff33 Mon Sep 17 00:00:00 2001 From: Evgeniy Antonyuk Date: Thu, 22 Aug 2024 17:25:06 +0300 Subject: [PATCH 3/3] Add the ability to configure the amqps protocol in packages --- install/common/product-configuration | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/install/common/product-configuration b/install/common/product-configuration index e51196f361f..e670fbc91fa 100644 --- a/install/common/product-configuration +++ b/install/common/product-configuration @@ -28,6 +28,7 @@ ELK_HOST="localhost" ELK_PORT="9200" OPENSEARCH_INDEX="${PACKAGE_SYSNAME}-fluent-bit" +RABBITMQ_PROTOCOL="amqp" RABBITMQ_HOST="localhost" RABBITMQ_USER="guest" RABBITMQ_PASSWORD="guest" @@ -216,6 +217,7 @@ while [ "$1" != "" ]; do echo " -rbp, --rabbitmqport rabbitmq port" echo " -rbu, --rabbitmquser rabbitmq user" echo " -rbpw, --rabbitmqpassword rabbitmq password" + echo " -rbpr, --rabbitmqprotocol rabbitmq protocol" echo " -mysqlh, --mysqlhost mysql server host" echo " -mysqld, --mysqldatabase ${PRODUCT} database name" echo " -mysqlu, --mysqluser ${PRODUCT} database user" @@ -588,7 +590,7 @@ setup_docs() { local DOCUMENT_SERVER_JWT_SECRET=${DOCUMENT_SERVER_JWT_SECRET:-$(json -f ${DS_CONF_DIR}/local.json services.CoAuthoring.secret.inbox.string)} local DOCUMENT_SERVER_JWT_HEADER=${DOCUMENT_SERVER_JWT_HEADER:-$(json -f ${DS_CONF_DIR}/local.json services.CoAuthoring.token.inbox.header)} - $JSON ${DS_CONF_DIR}/local.json -e "this.rabbitmq = { 'url': 'amqp://${RABBITMQ_USER}:${RABBITMQ_PASSWORD}@${RABBITMQ_HOST}:${RABBITMQ_PORT}' }" >/dev/null 2>&1 + $JSON ${DS_CONF_DIR}/local.json -e "this.rabbitmq = { 'url': '${RABBITMQ_PROTOCOL}://${RABBITMQ_USER}:${RABBITMQ_PASSWORD}@${RABBITMQ_HOST}:${RABBITMQ_PORT}' }" >/dev/null 2>&1 $JSON ${DS_CONF_DIR}/local.json -e "this.services.CoAuthoring.redis = { 'host': '$REDIS_HOST' }" >/dev/null 2>&1 sed 's/\(listen .*:\)\([0-9]\{2,5\}\b\)\( default_server\)\?\(;\)/\1'${DOCUMENT_SERVER_PORT}'\3\4/' -i ${DS_CONF_DIR}/nginx/ds.conf @@ -796,6 +798,9 @@ setup_rabbitmq() { save_undefined_param "${APP_DIR}/rabbitmq.${ENVIRONMENT}.json" "RabbitMQ.Password" "${RABBITMQ_PASSWORD}" "$EXTERNAL_RABBITMQ_FLAG" save_undefined_param "${APP_DIR}/rabbitmq.${ENVIRONMENT}.json" "RabbitMQ.Port" "${RABBITMQ_PORT}" "$EXTERNAL_RABBITMQ_FLAG" save_undefined_param "${APP_DIR}/rabbitmq.${ENVIRONMENT}.json" "RabbitMQ.VirtualHost" "/" + if [[ ${RABBITMQ_PROTOCOL} = "amqps" ]] && [[ ${RABBITMQ_HOST} != "localhost" ]]; then + save_undefined_param "${APP_DIR}/rabbitmq.${ENVIRONMENT}.json" "RabbitMQ.Uri" "${RABBITMQ_PROTOCOL}://${RABBITMQ_USER}:${RABBITMQ_PASSWORD}@${RABBITMQ_HOST}:${RABBITMQ_PORT}/" + fi if [ $1 == "LOCAL_RABBITMQ_SERVER" ]; then systemctl enable rabbitmq-server >/dev/null 2>&1