2021-06-09 15:48:42 +00:00
#!/bin/bash
#
# (c) Copyright Ascensio System SIA 2021
#
# This program is a free software product. You can redistribute it and/or
# modify it under the terms of the GNU Affero General Public License (AGPL)
# version 3 as published by the Free Software Foundation. In accordance with
# Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
# that Ascensio System SIA expressly excludes the warranty of non-infringement
# of any third-party rights.
#
# This program is distributed WITHOUT ANY WARRANTY; without even the implied
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
# details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
#
# You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha
# street, Riga, Latvia, EU, LV-1050.
#
# The interactive user interfaces in modified source and object code versions
# of the Program must display Appropriate Legal Notices, as required under
# Section 5 of the GNU AGPL version 3.
#
# Pursuant to Section 7(b) of the License you must retain the original Product
# logo when distributing the program. Pursuant to Section 7(e) we decline to
# grant you any rights under trademark law for use of our trademarks.
#
# All the Product's GUI elements, including illustrations and icon sets, as
# well as technical writing content are licensed under the terms of the
# Creative Commons Attribution-ShareAlike 4.0 International. See the License
# terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
#
2021-10-11 09:08:29 +00:00
PACKAGE_SYSNAME = "onlyoffice"
2023-08-07 11:50:53 +00:00
PRODUCT_NAME = "DocSpace"
PRODUCT = $( tr '[:upper:]' '[:lower:]' <<< ${ PRODUCT_NAME } )
2021-10-11 09:08:29 +00:00
BASE_DIR = " /app/ $PACKAGE_SYSNAME " ;
2023-09-04 09:03:36 +00:00
PROXY_YML = " ${ BASE_DIR } /proxy.yml "
2021-06-09 15:48:42 +00:00
STATUS = ""
2021-10-11 09:08:29 +00:00
DOCKER_TAG = ""
2023-05-25 08:30:03 +00:00
GIT_BRANCH = "master"
2023-05-12 09:48:18 +00:00
INSTALLATION_TYPE = "ENTERPRISE"
2023-05-16 13:54:58 +00:00
IMAGE_NAME = " ${ PACKAGE_SYSNAME } / ${ PRODUCT } -api "
CONTAINER_NAME = " ${ PACKAGE_SYSNAME } -api "
2021-06-09 15:48:42 +00:00
2023-06-26 07:21:16 +00:00
NETWORK_NAME = ${ PACKAGE_SYSNAME }
2021-06-09 15:48:42 +00:00
2023-07-27 09:20:50 +00:00
SWAPFILE = " / ${ PRODUCT } _swapfile " ;
MAKESWAP = "true" ;
2021-06-09 15:48:42 +00:00
DISK_REQUIREMENTS = 40960;
2023-08-03 07:44:23 +00:00
MEMORY_REQUIREMENTS = 8192;
CORE_REQUIREMENTS = 4;
2021-06-09 15:48:42 +00:00
DIST = "" ;
REV = "" ;
KERNEL = "" ;
2022-09-26 10:03:36 +00:00
INSTALL_REDIS = "true" ;
INSTALL_RABBITMQ = "true" ;
2021-06-09 15:48:42 +00:00
INSTALL_MYSQL_SERVER = "true" ;
INSTALL_DOCUMENT_SERVER = "true" ;
2023-08-25 12:39:26 +00:00
INSTALL_ELASTICSEARCH = "true" ;
2022-09-01 18:10:34 +00:00
INSTALL_PRODUCT = "true" ;
2021-06-09 15:48:42 +00:00
UPDATE = "false" ;
HUB = "" ;
USERNAME = "" ;
PASSWORD = "" ;
2022-09-26 10:03:36 +00:00
MYSQL_VERSION = ""
2021-06-09 15:48:42 +00:00
MYSQL_DATABASE = ""
MYSQL_USER = ""
MYSQL_PASSWORD = ""
MYSQL_ROOT_PASSWORD = ""
MYSQL_HOST = ""
2023-08-25 12:39:26 +00:00
MYSQL_PORT = ""
2022-06-10 10:11:33 +00:00
DATABASE_MIGRATION = "true"
2021-06-09 15:48:42 +00:00
2022-09-26 10:03:36 +00:00
ELK_VERSION = ""
2023-08-25 12:39:26 +00:00
ELK_SHEME = ""
2021-06-09 15:48:42 +00:00
ELK_HOST = ""
2023-08-25 12:39:26 +00:00
ELK_PORT = ""
REDIS_HOST = ""
REDIS_PORT = ""
REDIS_USER_NAME = ""
REDIS_PASSWORD = ""
RABBIT_HOST = ""
RABBIT_PORT = ""
RABBIT_USER_NAME = ""
RABBIT_PASSWORD = ""
2021-06-09 15:48:42 +00:00
2023-05-16 13:54:58 +00:00
DOCUMENT_SERVER_IMAGE_NAME = ""
DOCUMENT_SERVER_VERSION = ""
2021-06-09 15:48:42 +00:00
DOCUMENT_SERVER_JWT_SECRET = ""
2022-09-26 10:03:36 +00:00
DOCUMENT_SERVER_JWT_HEADER = ""
2023-08-25 12:39:26 +00:00
DOCUMENT_SERVER_URL_EXTERNAL = ""
2021-06-09 15:48:42 +00:00
APP_CORE_BASE_DOMAIN = ""
APP_CORE_MACHINEKEY = ""
2022-09-26 10:03:36 +00:00
ENV_EXTENSION = ""
2023-09-04 09:03:36 +00:00
LETS_ENCRYPT_DOMAIN = ""
LETS_ENCRYPT_MAIL = ""
2021-06-09 15:48:42 +00:00
HELP_TARGET = "install-Docker.sh" ;
SKIP_HARDWARE_CHECK = "false" ;
2022-12-12 11:07:20 +00:00
EXTERNAL_PORT = "80"
2021-06-09 15:48:42 +00:00
while [ " $1 " != "" ] ; do
case $1 in
-u | --update )
if [ " $2 " != "" ] ; then
UPDATE = $2
shift
fi
; ;
-hub | --hub )
if [ " $2 " != "" ] ; then
HUB = $2
shift
fi
; ;
-un | --username )
if [ " $2 " != "" ] ; then
USERNAME = $2
shift
fi
; ;
-p | --password )
if [ " $2 " != "" ] ; then
PASSWORD = $2
shift
fi
; ;
2022-09-01 18:10:34 +00:00
-ids | --installdocspace )
2021-06-09 15:48:42 +00:00
if [ " $2 " != "" ] ; then
2022-09-01 18:10:34 +00:00
INSTALL_PRODUCT = $2
2021-06-09 15:48:42 +00:00
shift
fi
; ;
2023-05-16 13:54:58 +00:00
-idocs | --installdocs )
2021-06-09 15:48:42 +00:00
if [ " $2 " != "" ] ; then
INSTALL_DOCUMENT_SERVER = $2
shift
fi
; ;
-imysql | --installmysql )
if [ " $2 " != "" ] ; then
INSTALL_MYSQL_SERVER = $2
shift
fi
2021-10-11 09:08:29 +00:00
; ;
2023-05-16 13:54:58 +00:00
-irbt | --installrabbitmq )
2022-09-26 10:03:36 +00:00
if [ " $2 " != "" ] ; then
INSTALL_RABBITMQ = $2
shift
fi
; ;
2023-05-16 13:54:58 +00:00
-irds | --installredis )
2021-10-11 09:08:29 +00:00
if [ " $2 " != "" ] ; then
2022-09-26 10:03:36 +00:00
INSTALL_REDIS = $2
2021-10-11 09:08:29 +00:00
shift
fi
2021-06-09 15:48:42 +00:00
; ;
-ht | --helptarget )
if [ " $2 " != "" ] ; then
HELP_TARGET = $2
shift
fi
; ;
-mysqld | --mysqldatabase )
if [ " $2 " != "" ] ; then
MYSQL_DATABASE = $2
shift
fi
; ;
-mysqlrp | --mysqlrootpassword )
if [ " $2 " != "" ] ; then
MYSQL_ROOT_PASSWORD = $2
shift
fi
; ;
-mysqlu | --mysqluser )
if [ " $2 " != "" ] ; then
MYSQL_USER = $2
shift
fi
; ;
-mysqlh | --mysqlhost )
if [ " $2 " != "" ] ; then
MYSQL_HOST = $2
shift
fi
; ;
2023-08-25 12:39:26 +00:00
-mysqlport | --mysqlport )
if [ " $2 " != "" ] ; then
MYSQL_PORT = $2
shift
fi
; ;
2021-06-09 15:48:42 +00:00
-mysqlp | --mysqlpassword )
if [ " $2 " != "" ] ; then
MYSQL_PASSWORD = $2
shift
fi
; ;
2023-08-25 12:39:26 +00:00
-espr | --elasticprotocol )
if [ " $2 " != "" ] ; then
ELK_SHEME = $2
shift
fi
; ;
2023-05-16 13:54:58 +00:00
-esh | --elastichost )
2021-06-09 15:48:42 +00:00
if [ " $2 " != "" ] ; then
ELK_HOST = $2
shift
fi
; ;
2023-08-25 12:39:26 +00:00
-esp | --elasticport )
if [ " $2 " != "" ] ; then
ELK_PORT = $2
shift
fi
; ;
2021-06-09 15:48:42 +00:00
-skiphc | --skiphardwarecheck )
if [ " $2 " != "" ] ; then
SKIP_HARDWARE_CHECK = $2
shift
fi
; ;
-ep | --externalport )
if [ " $2 " != "" ] ; then
EXTERNAL_PORT = $2
shift
fi
; ;
2022-09-01 18:10:34 +00:00
-dsh | --docspacehost )
2021-06-09 15:48:42 +00:00
if [ " $2 " != "" ] ; then
2023-06-28 05:55:48 +00:00
APP_URL_PORTAL = $2
2021-06-09 15:48:42 +00:00
shift
fi
; ;
-mk | --machinekey )
if [ " $2 " != "" ] ; then
APP_CORE_MACHINEKEY = $2
shift
fi
; ;
-env | --environment )
if [ " $2 " != "" ] ; then
2022-09-26 10:03:36 +00:00
ENV_EXTENSION = $2
2021-06-09 15:48:42 +00:00
shift
fi
; ;
-s | --status )
if [ " $2 " != "" ] ; then
STATUS = $2
2023-05-16 13:54:58 +00:00
IMAGE_NAME = " ${ PACKAGE_SYSNAME } / ${ STATUS } ${ PRODUCT } -api "
2021-06-09 15:48:42 +00:00
shift
fi
; ;
2021-09-30 12:05:43 +00:00
-ls | --localscripts )
2021-06-09 15:48:42 +00:00
if [ " $2 " != "" ] ; then
shift
fi
; ;
2021-09-30 12:05:43 +00:00
2023-05-16 13:54:58 +00:00
-dsv | --docspaceversion )
2021-10-11 09:08:29 +00:00
if [ " $2 " != "" ] ; then
DOCKER_TAG = $2
shift
fi
; ;
-gb | --gitbranch )
2021-09-30 12:05:43 +00:00
if [ " $2 " != "" ] ; then
2021-10-11 09:08:29 +00:00
PARAMETERS = " $PARAMETERS ${ 1 } " ;
GIT_BRANCH = $2
2021-09-30 12:05:43 +00:00
shift
fi
; ;
2022-02-10 07:37:09 +00:00
2023-05-16 13:54:58 +00:00
-docsi | --docsimage )
2022-02-10 07:37:09 +00:00
if [ " $2 " != "" ] ; then
DOCUMENT_SERVER_IMAGE_NAME = $2
shift
fi
; ;
2022-06-10 10:11:33 +00:00
2023-05-16 13:54:58 +00:00
-docsv | --docsversion )
if [ " $2 " != "" ] ; then
DOCUMENT_SERVER_VERSION = $2
shift
fi
; ;
2023-08-25 12:39:26 +00:00
-docsurl | --docsurl )
if [ " $2 " != "" ] ; then
DOCUMENT_SERVER_URL_EXTERNAL = $2
shift
fi
; ;
2022-06-10 10:11:33 +00:00
-dbm | --databasemigration )
if [ " $2 " != "" ] ; then
DATABASE_MIGRATION = $2
shift
fi
; ;
2021-06-09 15:48:42 +00:00
2023-04-26 06:57:42 +00:00
-jh | --jwtheader )
if [ " $2 " != "" ] ; then
DOCUMENT_SERVER_JWT_HEADER = $2
shift
fi
; ;
-js | --jwtsecret )
if [ " $2 " != "" ] ; then
DOCUMENT_SERVER_JWT_SECRET = $2
shift
fi
; ;
2023-05-12 09:48:18 +00:00
-it | --installation_type )
if [ " $2 " != "" ] ; then
INSTALLATION_TYPE = $( echo " $2 " | awk '{print toupper($0)}' ) ;
shift
fi
; ;
2023-07-27 09:20:50 +00:00
-ms | --makeswap )
if [ " $2 " != "" ] ; then
MAKESWAP = $2
shift
fi
; ;
2023-08-25 12:39:26 +00:00
-ies | --installelastic )
if [ " $2 " != "" ] ; then
INSTALL_ELASTICSEARCH = $2
shift
fi
; ;
-rdsh | --redishost )
if [ " $2 " != "" ] ; then
REDIS_HOST = $2
shift
fi
; ;
-rdsp | --redisport )
if [ " $2 " != "" ] ; then
REDIS_PORT = $2
shift
fi
; ;
-rdsu | --redisusername )
if [ " $2 " != "" ] ; then
REDIS_USER_NAME = $2
shift
fi
; ;
-rdspass | --redispassword )
if [ " $2 " != "" ] ; then
REDIS_PASSWORD = $2
shift
fi
; ;
-rbth | --rabbitmqhost )
if [ " $2 " != "" ] ; then
RABBIT_HOST = $2
shift
fi
; ;
-rbtp | --rabbitmqport )
if [ " $2 " != "" ] ; then
RABBIT_PORT = $2
shift
fi
; ;
-rbtu | --rabbitmqusername )
if [ " $2 " != "" ] ; then
RABBIT_USER_NAME = $2
shift
fi
; ;
-rbtpass | --rabbitmqpassword )
if [ " $2 " != "" ] ; then
RABBIT_PASSWORD = $2
shift
fi
; ;
-rbtvh | --rabbitmqvirtualhost )
if [ " $2 " != "" ] ; then
RABBIT_VIRTUAL_HOST = $2
shift
fi
; ;
2023-09-04 09:03:36 +00:00
-led | --letsencryptdomain )
if [ " $2 " != "" ] ; then
LETS_ENCRYPT_DOMAIN = $2
shift
fi
; ;
-lem | --letsencryptmail )
if [ " $2 " != "" ] ; then
LETS_ENCRYPT_MAIL = $2
shift
fi
; ;
-cf | --certfile )
if [ " $2 " != "" ] ; then
CERTIFICATE_PATH = $2
shift
fi
; ;
-ckf | --certkeyfile )
if [ " $2 " != "" ] ; then
CERTIFICATE_KEY_PATH = $2
shift
fi
; ;
2021-06-09 15:48:42 +00:00
-? | -h | --help )
echo " Usage: bash $HELP_TARGET [PARAMETER] [[PARAMETER], ...] "
echo
echo " Parameters:"
echo " -hub, --hub dockerhub name"
echo " -un, --username dockerhub username"
echo " -p, --password dockerhub password"
2023-05-16 13:54:58 +00:00
echo " -it, --installation_type installation type (community|enterprise)"
echo " -skiphc, --skiphardwarecheck skip hardware check (true|false)"
2023-04-26 07:00:11 +00:00
echo " -u, --update use to update existing components (true|false)"
2022-09-01 18:10:34 +00:00
echo " -ids, --installdocspace install or update $PRODUCT (true|false) "
2023-05-16 13:54:58 +00:00
echo " -dsv, --docspaceversion select the $PRODUCT version "
echo " -dsh, --docspacehost $PRODUCT host "
echo " -env, --environment $PRODUCT environment "
echo " -mk, --machinekey setting for core.machinekey"
echo " -ep, --externalport external $PRODUCT port (default value 80) "
echo " -idocs, --installdocs install or update document server (true|false)"
echo " -docsi, --docsimage document server image name"
echo " -docsv, --docsversion document server version"
2023-08-25 12:39:26 +00:00
echo " -docsurl, --docsurl $PACKAGE_SYSNAME docs server address (example http:// $PACKAGE_SYSNAME -docs-address:8083) "
2023-04-26 06:57:42 +00:00
echo " -jh, --jwtheader defines the http header that will be used to send the JWT"
2023-05-16 13:54:58 +00:00
echo " -js, --jwtsecret defines the secret key to validate the JWT in the request"
echo " -irbt, --installrabbitmq install or update rabbitmq (true|false)"
echo " -irds, --installredis install or update redis (true|false)"
echo " -imysql, --installmysql install or update mysql (true|false)"
2023-08-25 12:39:26 +00:00
echo " -ies, --installelastic install or update elasticsearch (true|false)"
echo " -espr, --elasticprotocol the protocol for the connection to elasticsearch (default value http)"
echo " -esh, --elastichost the IP address or hostname of the elasticsearch"
echo " -esp, --elasticport elasticsearch port number (default value 6379)"
echo " -rdsh, --redishost the IP address or hostname of the redis server"
echo " -rdsp, --redisport redis server port number (default value 9200)"
echo " -rdsu, --redisusername redis user name"
echo " -rdspass, --redispassword password set for redis account"
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"
echo " -rbtpass, --rabbitmqpassword password set for rabbitmq server account"
echo " -rbtvh, --rabbitmqvirtualhost rabbitmq virtual host (default value \"/\")"
2021-06-09 15:48:42 +00:00
echo " -mysqlrp, --mysqlrootpassword mysql server root password"
2022-09-01 18:10:34 +00:00
echo " -mysqld, --mysqldatabase $PRODUCT database name "
echo " -mysqlu, --mysqluser $PRODUCT database user "
echo " -mysqlp, --mysqlpassword $PRODUCT database password "
2021-06-09 15:48:42 +00:00
echo " -mysqlh, --mysqlhost mysql server host"
2023-08-25 12:39:26 +00:00
echo " -mysqlport, --mysqlport mysql server port number (default value 3306)"
2023-09-04 09:03:36 +00:00
echo " -led, --letsencryptdomain defines the domain for Let's Encrypt certificate"
echo " -lem, --letsencryptmail defines the domain administator mail address for Let's Encrypt certificate"
echo " -cf, --certfile path to the certificate file for the domain"
echo " -ckf, --certkeyfile path to the private key file for the certificate"
2022-06-10 10:11:33 +00:00
echo " -dbm, --databasemigration database migration (true|false)"
2023-07-27 09:20:50 +00:00
echo " -ms, --makeswap make swap file (true|false)"
2021-06-09 15:48:42 +00:00
echo " -?, -h, --help this help"
echo
echo " Install all the components without document server:"
2022-12-22 08:33:56 +00:00
echo " bash $HELP_TARGET -idocs false "
2021-06-09 15:48:42 +00:00
echo
2023-05-16 13:54:58 +00:00
echo " Install Document Server only. Skip the installation of mysql, $PRODUCT , rabbitmq, redis: "
echo " bash $HELP_TARGET -ids false -idocs true -imysql false -irbt false -irds false "
2022-12-22 08:33:56 +00:00
echo
2023-05-16 13:54:58 +00:00
echo " Update all installed components. Stop the containers that need to be updated, remove them and run the latest versions of the corresponding components."
echo " The portal data should be picked up automatically:"
2021-06-09 15:48:42 +00:00
echo " bash $HELP_TARGET -u true "
echo
2022-12-22 08:33:56 +00:00
echo " Update Document Server only to version 7.2.1.34 and skip the update for all other components:"
2023-05-16 13:54:58 +00:00
echo " bash $HELP_TARGET -u true -docsi ${ PACKAGE_SYSNAME } /documentserver-ee -docsv 7.2.1.34 -idocs true -ids false -irbt false -irds false "
2021-06-09 15:48:42 +00:00
echo
2022-12-22 08:33:56 +00:00
echo " Update $PRODUCT only to version 1.2.0 and skip the update for all other components: "
2023-05-16 13:54:58 +00:00
echo " bash $HELP_TARGET -u true -dsv v1.2.0 -idocs false -irbt false -irds false "
2021-06-09 15:48:42 +00:00
echo
exit 0
; ;
* )
echo " Unknown parameter $1 " 1>& 2
exit 1
; ;
esac
shift
done
root_checking ( ) {
if [ ! $( id -u ) -eq 0 ] ; then
echo "To perform this action you must be logged in with root rights"
exit 1;
fi
}
command_exists ( ) {
type " $1 " & > /dev/null;
}
file_exists ( ) {
if [ -z " $1 " ] ; then
echo "file path is empty"
exit 1;
fi
if [ -f " $1 " ] ; then
return 0; #true
else
return 1; #false
fi
}
to_lowercase ( ) {
echo " $1 " | awk '{print tolower($0)}'
}
trim ( ) {
echo -e " $1 " | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//'
}
get_random_str ( ) {
LENGTH = $1 ;
if [ [ -z ${ LENGTH } ] ] ; then
LENGTH = 12;
fi
VALUE = $( cat /dev/urandom | tr -dc A-Za-z0-9 | head -c ${ LENGTH } ) ;
echo " $VALUE "
}
get_os_info ( ) {
OS = ` to_lowercase \` uname\` `
if [ " ${ OS } " = = "windowsnt" ] ; then
echo "Not supported OS" ;
exit 1;
elif [ " ${ OS } " = = "darwin" ] ; then
echo "Not supported OS" ;
exit 1;
else
OS = ` uname`
if [ " ${ OS } " = = "SunOS" ] ; then
echo "Not supported OS" ;
exit 1;
elif [ " ${ OS } " = = "AIX" ] ; then
echo "Not supported OS" ;
exit 1;
elif [ " ${ OS } " = = "Linux" ] ; then
MACH = ` uname -m`
if [ " ${ MACH } " != "x86_64" ] ; then
echo "Currently only supports 64bit OS's" ;
exit 1;
fi
KERNEL = ` uname -r`
if [ -f /etc/redhat-release ] ; then
CONTAINS = $( cat /etc/redhat-release | { grep -sw release || true; } ) ;
if [ [ -n ${ CONTAINS } ] ] ; then
DIST = ` cat /etc/redhat-release | sed s/\ release.*//`
2023-05-31 09:52:58 +00:00
REV = ` cat /etc/redhat-release | grep -oP '(?<=release )\d+' `
2021-06-09 15:48:42 +00:00
else
DIST = ` cat /etc/os-release | grep -sw 'ID' | awk -F= '{ print $2 }' | sed -e 's/^"//' -e 's/"$//' `
REV = ` cat /etc/os-release | grep -sw 'VERSION_ID' | awk -F= '{ print $2 }' | sed -e 's/^"//' -e 's/"$//' `
fi
elif [ -f /etc/SuSE-release ] ; then
REV = ` cat /etc/os-release | grep '^VERSION_ID' | awk -F= '{ print $2 }' | sed -e 's/^"//' -e 's/"$//' `
DIST = 'SuSe'
elif [ -f /etc/debian_version ] ; then
REV = ` cat /etc/debian_version`
DIST = 'Debian'
if [ -f /etc/lsb-release ] ; then
DIST = ` cat /etc/lsb-release | grep '^DISTRIB_ID' | awk -F= '{ print $2 }' `
REV = ` cat /etc/lsb-release | grep '^DISTRIB_RELEASE' | awk -F= '{ print $2 }' `
elif [ -f /etc/lsb_release ] || [ -f /usr/bin/lsb_release ] ; then
DIST = ` lsb_release -a 2>& 1 | grep 'Distributor ID:' | awk -F ":" '{print $2 }' `
REV = ` lsb_release -a 2>& 1 | grep 'Release:' | awk -F ":" '{print $2 }' `
fi
elif [ -f /etc/os-release ] ; then
DIST = ` cat /etc/os-release | grep -sw 'ID' | awk -F= '{ print $2 }' | sed -e 's/^"//' -e 's/"$//' `
REV = ` cat /etc/os-release | grep -sw 'VERSION_ID' | awk -F= '{ print $2 }' | sed -e 's/^"//' -e 's/"$//' `
fi
fi
DIST = $( trim $DIST ) ;
REV = $( trim $REV ) ;
fi
}
check_os_info ( ) {
if [ [ -z ${ KERNEL } || -z ${ DIST } || -z ${ REV } ] ] ; then
echo " $KERNEL , $DIST , $REV " ;
echo "Not supported OS" ;
exit 1;
fi
2023-07-27 09:47:30 +00:00
if [ -f /etc/needrestart/needrestart.conf ] ; then
sed -e "s_#\$nrconf{restart}_\$nrconf{restart}_" -e "s_\(\$nrconf{restart} =\).*_\1 'a';_" -i /etc/needrestart/needrestart.conf
fi
2021-06-09 15:48:42 +00:00
}
check_kernel ( ) {
MIN_NUM_ARR = ( 3 10 0) ;
CUR_NUM_ARR = ( ) ;
CUR_STR_ARR = $( echo $KERNEL | grep -Po "[0-9]+\.[0-9]+\.[0-9]+" | tr "." " " ) ;
for CUR_STR_ITEM in $CUR_STR_ARR
do
CUR_NUM_ARR = ( ${ CUR_NUM_ARR [@] } $CUR_STR_ITEM )
done
INDEX = 0;
while [ [ $INDEX -lt 3 ] ] ; do
if [ ${ CUR_NUM_ARR [INDEX] } -lt ${ MIN_NUM_ARR [INDEX] } ] ; then
echo "Not supported OS Kernel"
exit 1;
elif [ ${ CUR_NUM_ARR [INDEX] } -gt ${ MIN_NUM_ARR [INDEX] } ] ; then
INDEX = 3
fi
( ( INDEX++ ) )
done
}
check_hardware ( ) {
AVAILABLE_DISK_SPACE = $( df -m / | tail -1 | awk '{ print $4 }' ) ;
if [ ${ AVAILABLE_DISK_SPACE } -lt ${ DISK_REQUIREMENTS } ] ; then
echo " Minimal requirements are not met: need at least $DISK_REQUIREMENTS MB of free HDD space "
exit 1;
fi
TOTAL_MEMORY = $( free -m | grep -oP '\d+' | head -n 1) ;
if [ ${ TOTAL_MEMORY } -lt ${ MEMORY_REQUIREMENTS } ] ; then
echo " Minimal requirements are not met: need at least $MEMORY_REQUIREMENTS MB of RAM "
exit 1;
fi
CPU_CORES_NUMBER = $( cat /proc/cpuinfo | grep processor | wc -l) ;
if [ ${ CPU_CORES_NUMBER } -lt ${ CORE_REQUIREMENTS } ] ; then
echo " The system does not meet the minimal hardware requirements. CPU with at least $CORE_REQUIREMENTS cores is required "
exit 1;
fi
}
install_service ( ) {
2022-02-10 07:37:09 +00:00
local COMMAND_NAME = $1
local PACKAGE_NAME = $2
2021-06-09 15:48:42 +00:00
PACKAGE_NAME = ${ PACKAGE_NAME :- " $COMMAND_NAME " }
if command_exists apt-get; then
apt-get -y update -qq
apt-get -y -q install $PACKAGE_NAME
elif command_exists yum; then
yum -y install $PACKAGE_NAME
fi
if ! command_exists $COMMAND_NAME ; then
2023-09-06 12:53:57 +00:00
echo " Command $COMMAND_NAME not found "
2021-06-09 15:48:42 +00:00
exit 1;
fi
}
install_docker_compose ( ) {
2023-06-14 08:00:11 +00:00
curl -L " https://github.com/docker/compose/releases/latest/download/docker-compose- $( uname -s) - $( uname -m) " -o /usr/bin/docker-compose
chmod +x /usr/bin/docker-compose
2021-06-09 15:48:42 +00:00
}
check_ports ( ) {
2023-08-25 12:39:26 +00:00
RESERVED_PORTS = ( ) ;
2021-06-09 15:48:42 +00:00
ARRAY_PORTS = ( ) ;
USED_PORTS = "" ;
if ! command_exists netstat; then
install_service netstat net-tools
fi
if [ " ${ EXTERNAL_PORT //[0-9] } " = "" ] ; then
for RESERVED_PORT in " ${ RESERVED_PORTS [@] } "
do
if [ " $RESERVED_PORT " -eq " $EXTERNAL_PORT " ] ; then
echo " External port $EXTERNAL_PORT is reserved. Select another port "
exit 1;
fi
done
else
echo " Invalid external port $EXTERNAL_PORT "
exit 1;
fi
2022-09-01 18:10:34 +00:00
if [ " $INSTALL_PRODUCT " = = "true" ] ; then
2021-06-09 15:48:42 +00:00
ARRAY_PORTS = ( ${ ARRAY_PORTS [@] } " $EXTERNAL_PORT " ) ;
fi
for PORT in " ${ ARRAY_PORTS [@] } "
do
REGEXP = " : $PORT $"
CHECK_RESULT = $( netstat -lnt | awk '{print $4}' | { grep $REGEXP || true; } )
if [ [ $CHECK_RESULT != "" ] ] ; then
if [ [ $USED_PORTS != "" ] ] ; then
USED_PORTS = " $USED_PORTS , $PORT "
else
USED_PORTS = " $PORT "
fi
fi
done
if [ [ $USED_PORTS != "" ] ] ; then
echo " The following TCP Ports must be available: $USED_PORTS "
exit 1;
fi
}
check_docker_version ( ) {
CUR_FULL_VERSION = $( docker -v | cut -d ' ' -f3 | cut -d ',' -f1) ;
CUR_VERSION = $( echo $CUR_FULL_VERSION | cut -d '-' -f1) ;
CUR_EDITION = $( echo $CUR_FULL_VERSION | cut -d '-' -f2) ;
if [ " ${ CUR_EDITION } " = = "ce" ] || [ " ${ CUR_EDITION } " = = "ee" ] ; then
return 0;
fi
if [ " ${ CUR_VERSION } " != " ${ CUR_EDITION } " ] ; then
echo "Unspecific docker version"
exit 1;
fi
MIN_NUM_ARR = ( 1 10 0) ;
CUR_NUM_ARR = ( ) ;
CUR_STR_ARR = $( echo $CUR_VERSION | grep -Po "[0-9]+\.[0-9]+\.[0-9]+" | tr "." " " ) ;
for CUR_STR_ITEM in $CUR_STR_ARR
do
CUR_NUM_ARR = ( ${ CUR_NUM_ARR [@] } $CUR_STR_ITEM )
done
INDEX = 0;
while [ [ $INDEX -lt 3 ] ] ; do
if [ ${ CUR_NUM_ARR [INDEX] } -lt ${ MIN_NUM_ARR [INDEX] } ] ; then
echo "The outdated Docker version has been found. Please update to the latest version."
exit 1;
elif [ ${ CUR_NUM_ARR [INDEX] } -gt ${ MIN_NUM_ARR [INDEX] } ] ; then
return 0;
fi
( ( INDEX++ ) )
done
}
install_docker_using_script ( ) {
if ! command_exists curl ; then
install_service curl
fi
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
rm get-docker.sh
}
install_docker ( ) {
if [ " ${ DIST } " = = "Ubuntu" ] || [ " ${ DIST } " = = "Debian" ] || [ [ " ${ DIST } " = = CentOS* ] ] || [ " ${ DIST } " = = "Fedora" ] ; then
install_docker_using_script
systemctl start docker
systemctl enable docker
elif [ " ${ DIST } " = = "Red Hat Enterprise Linux Server" ] ; then
echo ""
echo "Your operating system does not allow Docker CE installation."
echo "You can install Docker EE using the manual here - https://docs.docker.com/engine/installation/linux/rhel/"
echo ""
exit 1;
elif [ " ${ DIST } " = = "SuSe" ] ; then
echo ""
echo "Your operating system does not allow Docker CE installation."
echo "You can install Docker EE using the manual here - https://docs.docker.com/engine/installation/linux/suse/"
echo ""
exit 1;
elif [ " ${ DIST } " = = "altlinux" ] ; then
apt-get -y install docker-io
chkconfig docker on
service docker start
systemctl enable docker
else
echo ""
echo "Docker could not be installed automatically."
echo "Please use this official instruction https://docs.docker.com/engine/installation/linux/other/ for its manual installation."
echo ""
exit 1;
fi
if ! command_exists docker ; then
echo "error while installing docker"
exit 1;
fi
}
docker_login ( ) {
if [ [ -n ${ USERNAME } && -n ${ PASSWORD } ] ] ; then
docker login ${ HUB } --username ${ USERNAME } --password ${ PASSWORD }
fi
}
2023-08-25 12:39:26 +00:00
create_network ( ) {
2023-09-06 12:53:57 +00:00
NETWORT_EXIST = $( docker network ls | awk '{print $2;}' | { grep -x ${ NETWORK_NAME } || true; } ) ;
2023-08-25 12:39:26 +00:00
2023-09-06 12:53:57 +00:00
if [ [ -z ${ NETWORT_EXIST } ] ] ; then
2023-08-25 12:39:26 +00:00
docker network create --driver bridge ${ NETWORK_NAME }
fi
}
2023-06-27 13:24:17 +00:00
read_continue_installation ( ) {
read -p "Continue installation [Y/N]? " CHOICE_INSTALLATION
case " $CHOICE_INSTALLATION " in
y| Y )
return 0
; ;
n| N )
exit 0;
; ;
* )
echo "Please, enter Y or N" ;
read_continue_installation
; ;
esac
}
domain_check ( ) {
2023-08-29 11:25:03 +00:00
if ! command_exists dig; then
2023-09-07 06:25:56 +00:00
if command_exists apt-get; then
install_service dig dnsutils
elif command_exists yum; then
install_service dig bind-utils
fi
2023-08-29 11:25:03 +00:00
fi
if ! command_exists ping; then
if command_exists apt-get; then
install_service ping iputils-ping
elif command_exists yum; then
install_service ping iputils
fi
fi
if ! command_exists ip; then
if command_exists apt-get; then
install_service ip iproute2
elif command_exists yum; then
install_service ip iproute
fi
fi
2023-06-27 13:24:17 +00:00
DOMAINS = $( dig +short -x $( curl -s ifconfig.me) | sed 's/\.$//' )
if [ [ -n " $DOMAINS " ] ] ; then
while IFS = read -r DOMAIN; do
2023-07-20 12:01:43 +00:00
IP_ADDRESS = $( ping -c 1 -W 1 $DOMAIN | grep -oP '(\d+\.\d+\.\d+\.\d+)' | head -n 1)
if [ [ -n " $IP_ADDRESS " && " $IP_ADDRESS " = ~ ^( 10\. | 127\. | 172\. ( 1[ 6-9] | 2[ 0-9] | 3[ 0-1] ) \. | 192\. 168\. ) ] ] ; then
2023-06-27 13:24:17 +00:00
LOCAL_RESOLVED_DOMAINS += " $DOMAIN "
2023-06-30 10:31:04 +00:00
elif [ [ -n " $IP_ADDRESS " ] ] ; then
2023-08-30 13:06:10 +00:00
APP_URL_PORTAL = ${ APP_URL_PORTAL :- " http:// ${ DOMAIN } : ${ EXTERNAL_PORT } " }
2023-06-27 13:24:17 +00:00
fi
done <<< " $DOMAINS "
2023-07-05 07:38:26 +00:00
fi
if [ [ -n " $LOCAL_RESOLVED_DOMAINS " ] ] || [ [ $( ip route get 8.8.8.8 | awk '{print $7}' ) != $( curl -s ifconfig.me) ] ] ; then
DOCKER_DAEMON_FILE = "/etc/docker/daemon.json"
if ! grep -q '"dns"' " $DOCKER_DAEMON_FILE " 2>/dev/null; then
echo " A problem was detected for ${ LOCAL_RESOLVED_DOMAINS [@] } domains when using a loopback IP address or when using NAT. "
echo "Select 'Y' to continue installing with configuring the use of external IP in Docker via Google Public DNS."
2023-08-07 11:50:53 +00:00
echo " Select 'N' to cancel ${ PACKAGE_SYSNAME ^^ } ${ PRODUCT_NAME } installation. "
2023-07-05 07:38:26 +00:00
if read_continue_installation; then
if [ [ -f " $DOCKER_DAEMON_FILE " ] ] ; then
sed -i '/{/a\ "dns": ["8.8.8.8", "8.8.4.4"],' " $DOCKER_DAEMON_FILE "
else
echo "{\"dns\": [\"8.8.8.8\", \"8.8.4.4\"]}" | tee " $DOCKER_DAEMON_FILE " >/dev/null
2023-06-27 13:24:17 +00:00
fi
2023-07-05 07:38:26 +00:00
systemctl restart docker
2023-06-27 13:24:17 +00:00
fi
fi
fi
}
2023-08-25 12:39:26 +00:00
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"
}
2023-09-06 12:53:57 +00:00
get_env_parameter ( ) {
local PARAMETER_NAME = $1 ;
local CONTAINER_NAME = $2 ;
2021-06-09 15:48:42 +00:00
if [ [ -z ${ PARAMETER_NAME } ] ] ; then
echo "Empty parameter name"
exit 1;
fi
if command_exists docker ; then
2023-09-06 12:53:57 +00:00
[ -n " $CONTAINER_NAME " ] && CONTAINER_EXIST = $( docker ps -aqf " name= $CONTAINER_NAME " ) ;
2021-06-09 15:48:42 +00:00
if [ [ -n ${ CONTAINER_EXIST } ] ] ; then
VALUE = $( docker inspect --format= '{{range .Config.Env}}{{println .}}{{end}}' ${ CONTAINER_NAME } | grep " ${ PARAMETER_NAME } = " | sed 's/^.*=//' ) ;
fi
2023-09-06 12:53:57 +00:00
fi
2023-05-16 13:54:58 +00:00
2023-09-06 12:53:57 +00:00
if [ -z ${ VALUE } ] && [ -f ${ BASE_DIR } /.env ] ; then
VALUE = $( awk -F= " / ${ PARAMETER_NAME } / {print \$2} " ${ BASE_DIR } /.env | tr -d '\r' )
2021-06-09 15:48:42 +00:00
fi
2023-08-25 12:39:26 +00:00
echo ${ VALUE // \" }
2021-06-09 15:48:42 +00:00
}
2023-05-16 13:54:58 +00:00
get_available_version ( ) {
if [ [ -z " $1 " ] ] ; then
echo "image name is empty" ;
exit 1;
fi
if ! command_exists curl ; then
install_curl;
fi
CREDENTIALS = "" ;
AUTH_HEADER = "" ;
TAGS_RESP = "" ;
if [ [ -n ${ HUB } ] ] ; then
DOCKER_CONFIG = " $HOME /.docker/config.json " ;
if [ [ -f " $DOCKER_CONFIG " ] ] ; then
CREDENTIALS = $( jq -r '.auths."' $HUB '".auth' < " $DOCKER_CONFIG " ) ;
if [ " $CREDENTIALS " = = "null" ] ; then
CREDENTIALS = "" ;
fi
fi
if [ [ -z ${ CREDENTIALS } && -n ${ USERNAME } && -n ${ PASSWORD } ] ] ; then
CREDENTIALS = $( echo -n " $USERNAME : $PASSWORD " | base64) ;
fi
if [ [ -n ${ CREDENTIALS } ] ] ; then
AUTH_HEADER = " Authorization: Basic $CREDENTIALS " ;
fi
REPO = $( echo $1 | sed " s/ $HUB \///g " ) ;
TAGS_RESP = $( curl -s -H " $AUTH_HEADER " -X GET https://$HUB /v2/$REPO /tags/list) ;
TAGS_RESP = $( echo $TAGS_RESP | jq -r '.tags' )
else
if [ [ -n ${ USERNAME } && -n ${ PASSWORD } ] ] ; then
CREDENTIALS = " {\"username\":\" $USERNAME \",\"password\":\" $PASSWORD \"} " ;
fi
if [ [ -n ${ CREDENTIALS } ] ] ; then
LOGIN_RESP = $( curl -s -H "Content-Type: application/json" -X POST -d " $CREDENTIALS " https://hub.docker.com/v2/users/login/) ;
TOKEN = $( echo $LOGIN_RESP | jq -r '.token' ) ;
AUTH_HEADER = " Authorization: JWT $TOKEN " ;
sleep 1;
fi
TAGS_RESP = $( curl -s -H " $AUTH_HEADER " -X GET https://hub.docker.com/v2/repositories/$1 /tags/) ;
TAGS_RESP = $( echo $TAGS_RESP | jq -r '.results[].name' )
fi
2023-07-12 05:56:58 +00:00
VERSION_REGEX = " [0-9]+\.[0-9]+\.[0-9]+(\.[0-9]+)? $"
2023-05-16 13:54:58 +00:00
TAG_LIST = ""
for item in $TAGS_RESP
do
2023-07-12 05:56:58 +00:00
if [ [ $item = ~ $VERSION_REGEX ] ] ; then
2023-05-16 13:54:58 +00:00
TAG_LIST = " $item , $TAG_LIST "
fi
done
LATEST_TAG = $( echo $TAG_LIST | tr ',' '\n' | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n | awk '/./{line=$0} END{print line}' ) ;
echo " $LATEST_TAG " | sed "s/\"//g"
}
2023-09-06 12:53:57 +00:00
set_docs_url_external ( ) {
DOCUMENT_SERVER_URL_EXTERNAL = ${ DOCUMENT_SERVER_URL_EXTERNAL :- $( get_env_parameter "DOCUMENT_SERVER_URL_EXTERNAL" " ${ CONTAINER_NAME } " ) } ;
2023-08-25 12:39:26 +00:00
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_HOST = " ${ BASH_REMATCH [2] } "
DOCUMENT_SERVER_PORT = " ${ BASH_REMATCH [4] :- "80" } "
fi
}
2021-06-09 15:48:42 +00:00
set_jwt_secret ( ) {
2023-09-06 12:53:57 +00:00
DOCUMENT_SERVER_JWT_SECRET = " ${ DOCUMENT_SERVER_JWT_SECRET :- $( get_env_parameter "JWT_SECRET" " ${ PACKAGE_SYSNAME } -document-server " ) } "
DOCUMENT_SERVER_JWT_SECRET = " ${ DOCUMENT_SERVER_JWT_SECRET :- $( get_env_parameter "DOCUMENT_SERVER_JWT_SECRET" " ${ CONTAINER_NAME } " ) } "
DOCUMENT_SERVER_JWT_SECRET = " ${ DOCUMENT_SERVER_JWT_SECRET :- $( get_random_str 32) } "
2021-06-09 15:48:42 +00:00
}
2023-04-26 06:57:42 +00:00
set_jwt_header ( ) {
2023-09-06 12:53:57 +00:00
DOCUMENT_SERVER_JWT_HEADER = " ${ DOCUMENT_SERVER_JWT_HEADER :- $( get_env_parameter "JWT_HEADER" " ${ PACKAGE_SYSNAME } -document-server " ) } "
DOCUMENT_SERVER_JWT_HEADER = " ${ DOCUMENT_SERVER_JWT_HEADER :- $( get_env_parameter "DOCUMENT_SERVER_JWT_HEADER" " ${ CONTAINER_NAME } " ) } "
DOCUMENT_SERVER_JWT_HEADER = " ${ DOCUMENT_SERVER_JWT_HEADER :- "AuthorizationJwt" } "
2023-04-26 06:57:42 +00:00
}
2021-06-09 15:48:42 +00:00
set_core_machinekey ( ) {
2023-09-06 12:53:57 +00:00
APP_CORE_MACHINEKEY = " ${ APP_CORE_MACHINEKEY :- $( get_env_parameter "APP_CORE_MACHINEKEY" " ${ CONTAINER_NAME } " ) } "
[ [ " $UPDATE " != "true" ] ] && APP_CORE_MACHINEKEY = " ${ APP_CORE_MACHINEKEY :- $( get_random_str 12) ) } "
2023-05-16 13:54:58 +00:00
}
2021-06-09 15:48:42 +00:00
2023-05-16 13:54:58 +00:00
set_mysql_params ( ) {
2023-09-06 12:53:57 +00:00
MYSQL_PASSWORD = " ${ MYSQL_PASSWORD :- $( get_env_parameter "MYSQL_PASSWORD" " ${ CONTAINER_NAME } " ) } "
MYSQL_PASSWORD = " ${ MYSQL_PASSWORD :- $( get_random_str 20) } "
2023-05-16 13:54:58 +00:00
2023-09-07 06:25:56 +00:00
MYSQL_ROOT_PASSWORD = " ${ MYSQL_ROOT_PASSWORD :- $( get_env_parameter "MYSQL_ROOT_PASSWORD" " ${ CONTAINER_NAME } " ) } "
2023-09-06 12:53:57 +00:00
MYSQL_ROOT_PASSWORD = " ${ MYSQL_ROOT_PASSWORD :- $( get_random_str 20) } "
2021-06-09 15:48:42 +00:00
2023-09-06 12:53:57 +00:00
MYSQL_DATABASE = " ${ MYSQL_DATABASE :- $( get_env_parameter "MYSQL_DATABASE" " ${ CONTAINER_NAME } " ) } "
MYSQL_USER = " ${ MYSQL_USER :- $( get_env_parameter "MYSQL_USER" " ${ CONTAINER_NAME } " ) } "
MYSQL_HOST = " ${ MYSQL_HOST :- $( get_env_parameter "MYSQL_HOST" " ${ CONTAINER_NAME } " ) } "
MYSQL_PORT = " ${ MYSQL_PORT :- $( get_env_parameter "MYSQL_PORT" " ${ CONTAINER_NAME } " ) } "
2023-05-16 13:54:58 +00:00
}
set_docspace_params( ) {
2023-09-06 12:53:57 +00:00
ENV_EXTENSION = ${ ENV_EXTENSION :- $( get_env_parameter "ENV_EXTENSION" " ${ CONTAINER_NAME } " ) } ;
APP_CORE_BASE_DOMAIN = ${ APP_CORE_BASE_DOMAIN :- $( get_env_parameter "APP_CORE_BASE_DOMAIN" " ${ CONTAINER_NAME } " ) } ;
APP_URL_PORTAL = ${ APP_URL_PORTAL :- $( get_env_parameter "APP_URL_PORTAL" " ${ CONTAINER_NAME } " ) } ;
EXTERNAL_PORT = ${ EXTERNAL_PORT :- $( get_env_parameter "EXTERNAL_PORT" " ${ CONTAINER_NAME } " ) } ;
ELK_SHEME = ${ ELK_SHEME :- $( get_env_parameter "ELK_SHEME" " ${ CONTAINER_NAME } " ) } ;
ELK_HOST = ${ ELK_HOST :- $( get_env_parameter "ELK_HOST" " ${ CONTAINER_NAME } " ) } ;
ELK_PORT = ${ ELK_PORT :- $( get_env_parameter "ELK_PORT" " ${ CONTAINER_NAME } " ) } ;
REDIS_HOST = ${ REDIS_HOST :- $( get_env_parameter "REDIS_HOST" " ${ CONTAINER_NAME } " ) } ;
REDIS_PORT = ${ REDIS_PORT :- $( get_env_parameter "REDIS_PORT" " ${ CONTAINER_NAME } " ) } ;
REDIS_USER_NAME = ${ REDIS_USER_NAME :- $( get_env_parameter "REDIS_USER_NAME" " ${ CONTAINER_NAME } " ) } ;
REDIS_PASSWORD = ${ REDIS_PASSWORD :- $( get_env_parameter "REDIS_PASSWORD" " ${ CONTAINER_NAME } " ) } ;
RABBIT_HOST = ${ RABBIT_HOST :- $( get_env_parameter "RABBIT_HOST" " ${ CONTAINER_NAME } " ) } ;
RABBIT_PORT = ${ RABBIT_PORT :- $( get_env_parameter "RABBIT_PORT" " ${ CONTAINER_NAME } " ) } ;
RABBIT_USER_NAME = ${ RABBIT_USER_NAME :- $( get_env_parameter "RABBIT_USER_NAME" " ${ CONTAINER_NAME } " ) } ;
RABBIT_PASSWORD = ${ RABBIT_PASSWORD :- $( get_env_parameter "RABBIT_PASSWORD" " ${ CONTAINER_NAME } " ) } ;
RABBIT_VIRTUAL_HOST = ${ RABBIT_VIRTUAL_HOST :- $( get_env_parameter "RABBIT_VIRTUAL_HOST" " ${ CONTAINER_NAME } " ) } ;
2023-06-28 05:55:48 +00:00
2023-09-06 12:53:57 +00:00
CERTIFICATE_PATH = ${ CERTIFICATE_PATH :- $( get_env_parameter "CERTIFICATE_PATH" ) } ;
CERTIFICATE_KEY_PATH = ${ CERTIFICATE_KEY_PATH :- $( get_env_parameter "CERTIFICATE_KEY_PATH" ) } ;
DHPARAM_PATH = ${ DHPARAM_PATH :- $( get_env_parameter "DHPARAM_PATH" ) } ;
2023-05-16 13:54:58 +00:00
}
set_installation_type_data ( ) {
2023-05-25 08:57:12 +00:00
if [ " $INSTALLATION_TYPE " = = "COMMUNITY" ] ; then
2023-05-16 13:54:58 +00:00
DOCUMENT_SERVER_IMAGE_NAME = ${ DOCUMENT_SERVER_IMAGE_NAME :- " ${ PACKAGE_SYSNAME } / ${ STATUS } documentserver " }
2023-05-25 08:57:12 +00:00
elif [ " $INSTALLATION_TYPE " = = "ENTERPRISE" ] ; then
2023-05-16 13:54:58 +00:00
DOCUMENT_SERVER_IMAGE_NAME = ${ DOCUMENT_SERVER_IMAGE_NAME :- " ${ PACKAGE_SYSNAME } / ${ STATUS } documentserver-ee " }
2021-06-09 15:48:42 +00:00
fi
}
download_files ( ) {
2022-02-10 07:37:09 +00:00
if ! command_exists svn; then
install_service svn subversion
2021-06-09 15:48:42 +00:00
fi
2022-02-10 07:37:09 +00:00
2023-06-01 13:14:41 +00:00
if ! command_exists jq ; then
if command_exists yum; then
rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-$REV .noarch.rpm
fi
install_service jq
fi
2023-06-06 10:47:46 +00:00
if ! command_exists docker-compose; then
install_docker_compose
fi
2023-08-25 12:39:26 +00:00
HOSTS = ( "ELK_HOST" "REDIS_HOST" "RABBIT_HOST" "MYSQL_HOST" ) ;
for HOST in " ${ HOSTS [@] } " ; do [ [ " ${ !HOST } " = = *CONTAINER_PREFIX* || " ${ !HOST } " = = *$PACKAGE_SYSNAME * ] ] && export " $HOST = " ; done
2023-09-06 12:53:57 +00:00
echo -n " Downloading configuration files to the ${ BASE_DIR } directory... "
svn export --force https://github.com/${ PACKAGE_SYSNAME } /${ PRODUCT } /branches/${ GIT_BRANCH } /build/install/docker/ ${ BASE_DIR } >/dev/null
echo "OK"
2022-02-10 07:37:09 +00:00
reconfigure STATUS ${ STATUS }
2023-05-31 11:37:42 +00:00
reconfigure INSTALLATION_TYPE ${ INSTALLATION_TYPE }
2023-06-26 07:21:16 +00:00
reconfigure NETWORK_NAME ${ NETWORK_NAME }
2021-06-09 15:48:42 +00:00
}
reconfigure ( ) {
2023-06-01 13:14:41 +00:00
local VARIABLE_NAME = " $1 "
local VARIABLE_VALUE = " $2 "
2021-06-09 15:48:42 +00:00
if [ [ -n ${ VARIABLE_VALUE } ] ] ; then
2022-02-10 07:37:09 +00:00
sed -i " s~ ${ VARIABLE_NAME } =.*~ ${ VARIABLE_NAME } = ${ VARIABLE_VALUE } ~g " $BASE_DIR /.env
2021-06-09 15:48:42 +00:00
fi
}
install_mysql_server ( ) {
2023-08-25 12:39:26 +00:00
reconfigure DATABASE_MIGRATION ${ DATABASE_MIGRATION }
reconfigure MYSQL_DATABASE ${ MYSQL_DATABASE }
reconfigure MYSQL_USER ${ MYSQL_USER }
reconfigure MYSQL_PASSWORD ${ MYSQL_PASSWORD }
reconfigure MYSQL_ROOT_PASSWORD ${ MYSQL_ROOT_PASSWORD }
2021-06-09 15:48:42 +00:00
2023-08-25 12:39:26 +00:00
if [ [ -z ${ MYSQL_HOST } ] ] && [ " $INSTALL_MYSQL_SERVER " = = "true" ] ; then
reconfigure MYSQL_VERSION ${ MYSQL_VERSION }
docker-compose -f $BASE_DIR /db.yml up -d
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
2021-06-09 15:48:42 +00:00
}
install_document_server ( ) {
2022-09-26 10:03:36 +00:00
reconfigure DOCUMENT_SERVER_JWT_HEADER ${ DOCUMENT_SERVER_JWT_HEADER }
2021-06-09 15:48:42 +00:00
reconfigure DOCUMENT_SERVER_JWT_SECRET ${ DOCUMENT_SERVER_JWT_SECRET }
2023-08-25 12:39:26 +00:00
if [ [ -z ${ DOCUMENT_SERVER_HOST } ] ] && [ " $INSTALL_DOCUMENT_SERVER " = = "true" ] ; then
reconfigure DOCUMENT_SERVER_IMAGE_NAME " ${ DOCUMENT_SERVER_IMAGE_NAME } : ${ DOCUMENT_SERVER_VERSION :- $( get_available_version " $DOCUMENT_SERVER_IMAGE_NAME " ) } "
docker-compose -f $BASE_DIR /ds.yml up -d
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
2021-06-09 15:48:42 +00:00
}
2022-09-26 10:03:36 +00:00
install_rabbitmq ( ) {
2023-08-25 12:39:26 +00:00
if [ [ -z ${ RABBIT_HOST } ] ] && [ " $INSTALL_RABBITMQ " = = "true" ] ; then
docker-compose -f $BASE_DIR /rabbitmq.yml up -d
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
2022-09-26 10:03:36 +00:00
}
install_redis ( ) {
2023-08-25 12:39:26 +00:00
if [ [ -z ${ REDIS_HOST } ] ] && [ " $INSTALL_REDIS " = = "true" ] ; then
docker-compose -f $BASE_DIR /redis.yml up -d
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
}
install_elasticsearch ( ) {
if [ [ -z ${ ELK_HOST } ] ] && [ " $INSTALL_ELASTICSEARCH " = = "true" ] ; then
if [ $( free -m | grep -oP '\d+' | head -n 1) -gt "12228" ] ; then #RAM ~12Gb
sed -i 's/Xms[0-9]g/Xms4g/g; s/Xmx[0-9]g/Xmx4g/g' $BASE_DIR /elasticsearch.yml
else
sed -i 's/Xms[0-9]g/Xms1g/g; s/Xmx[0-9]g/Xmx1g/g' $BASE_DIR /elasticsearch.yml
fi
reconfigure ELK_VERSION ${ ELK_VERSION }
docker-compose -f $BASE_DIR /elasticsearch.yml up -d
elif [ ! -z " $ELK_HOST " ] ; then
establish_conn ${ ELK_HOST } " ${ ELK_PORT :- "9200" } " "Elasticsearch"
reconfigure ELK_SHEME " ${ ELK_SHEME :- "http" } "
reconfigure ELK_HOST ${ ELK_HOST }
reconfigure ELK_PORT " ${ ELK_PORT :- "9200" } "
fi
2021-10-11 09:08:29 +00:00
}
2022-09-01 18:10:34 +00:00
install_product ( ) {
2023-05-16 13:54:58 +00:00
DOCKER_TAG = " ${ DOCKER_TAG :- $( get_available_version ${ IMAGE_NAME } ) } "
2023-08-29 11:24:36 +00:00
reconfigure DOCKER_TAG ${ DOCKER_TAG }
2023-05-16 13:54:58 +00:00
[ " ${ UPDATE } " = "true" ] && LOCAL_CONTAINER_TAG = " $( docker inspect --format= '{{index .Config.Image}}' ${ CONTAINER_NAME } | awk -F':' '{print $2}' ) "
if [ " ${ UPDATE } " = "true" ] && [ " ${ LOCAL_CONTAINER_TAG } " != " ${ DOCKER_TAG } " ] ; then
docker-compose -f $BASE_DIR /build.yml pull
2023-09-04 09:03:36 +00:00
docker-compose -f $BASE_DIR /migration-runner.yml -f $BASE_DIR /notify.yml -f $BASE_DIR /healthchecks.yml -f ${ PROXY_YML } down
2023-05-16 13:54:58 +00:00
docker-compose -f $BASE_DIR /${ PRODUCT } .yml down --volumes
fi
2022-09-26 10:03:36 +00:00
reconfigure ENV_EXTENSION ${ ENV_EXTENSION }
2021-06-09 15:48:42 +00:00
reconfigure APP_CORE_MACHINEKEY ${ APP_CORE_MACHINEKEY }
reconfigure APP_CORE_BASE_DOMAIN ${ APP_CORE_BASE_DOMAIN }
2023-09-04 09:03:36 +00:00
reconfigure APP_URL_PORTAL " ${ APP_URL_PORTAL :- " http:// ${ PACKAGE_SYSNAME } -router:8092 " } "
reconfigure EXTERNAL_PORT ${ EXTERNAL_PORT }
2022-09-26 10:03:36 +00:00
docker-compose -f $BASE_DIR /migration-runner.yml up -d
2022-12-12 11:07:20 +00:00
docker-compose -f $BASE_DIR /${ PRODUCT } .yml up -d
2023-09-04 09:03:36 +00:00
docker-compose -f ${ PROXY_YML } up -d
2022-02-10 07:37:09 +00:00
docker-compose -f $BASE_DIR /notify.yml up -d
2023-03-21 19:49:46 +00:00
docker-compose -f $BASE_DIR /healthchecks.yml up -d
2023-09-06 12:49:13 +00:00
if [ ! -z " ${ CERTIFICATE_PATH } " ] && [ ! -z " ${ CERTIFICATE_KEY_PATH } " ] ; then
bash $BASE_DIR /config/${ PRODUCT } -ssl-setup -f " ${ CERTIFICATE_PATH } " " ${ CERTIFICATE_KEY_PATH } "
elif [ ! -z " ${ LETS_ENCRYPT_DOMAIN } " ] && [ ! -z " ${ LETS_ENCRYPT_MAIL } " ] ; then
bash $BASE_DIR /config/${ PRODUCT } -ssl-setup " ${ LETS_ENCRYPT_MAIL } " " ${ LETS_ENCRYPT_DOMAIN } "
fi
2022-02-10 07:37:09 +00:00
}
2023-07-27 09:20:50 +00:00
make_swap ( ) {
DISK_REQUIREMENTS = 6144; #6Gb free space
MEMORY_REQUIREMENTS = 11000; #RAM ~12Gb
AVAILABLE_DISK_SPACE = $( df -m / | tail -1 | awk '{ print $4 }' ) ;
TOTAL_MEMORY = $( free -m | grep -oP '\d+' | head -n 1) ;
EXIST = $( swapon -s | awk '{ print $1 }' | { grep -x ${ SWAPFILE } || true; } ) ;
if [ [ -z $EXIST ] ] && [ ${ TOTAL_MEMORY } -lt ${ MEMORY_REQUIREMENTS } ] && [ ${ AVAILABLE_DISK_SPACE } -gt ${ DISK_REQUIREMENTS } ] ; then
if [ " ${ DIST } " = = "Ubuntu" ] || [ " ${ DIST } " = = "Debian" ] ; then
fallocate -l 6G ${ SWAPFILE }
else
dd if = /dev/zero of = ${ SWAPFILE } count = 6144 bs = 1MiB
fi
chmod 600 ${ SWAPFILE }
mkswap ${ SWAPFILE }
swapon ${ SWAPFILE }
echo " $SWAPFILE none swap sw 0 0 " >> /etc/fstab
fi
}
2021-06-09 15:48:42 +00:00
start_installation ( ) {
root_checking
2023-05-12 09:48:18 +00:00
set_installation_type_data
2021-06-09 15:48:42 +00:00
get_os_info
check_os_info
2023-04-26 07:00:11 +00:00
check_kernel
2021-06-09 15:48:42 +00:00
if [ " $UPDATE " != "true" ] ; then
check_ports
fi
if [ " $SKIP_HARDWARE_CHECK " != "true" ] ; then
check_hardware
fi
2023-07-27 09:20:50 +00:00
if [ " $MAKESWAP " = = "true" ] ; then
make_swap
fi
2021-06-09 15:48:42 +00:00
if command_exists docker ; then
check_docker_version
service docker start
else
install_docker
fi
docker_login
2023-08-25 12:39:26 +00:00
create_network
2023-06-27 13:24:17 +00:00
domain_check
2023-06-28 05:55:48 +00:00
if [ " $UPDATE " = "true" ] ; then
set_docspace_params
fi
2021-06-09 15:48:42 +00:00
2023-09-06 12:53:57 +00:00
set_docs_url_external
2021-06-09 15:48:42 +00:00
set_jwt_secret
2023-04-26 06:57:42 +00:00
set_jwt_header
2021-06-09 15:48:42 +00:00
set_core_machinekey
2023-05-16 13:54:58 +00:00
set_mysql_params
download_files
2022-02-10 07:37:09 +00:00
2023-08-25 12:39:26 +00:00
install_mysql_server
2021-06-09 15:48:42 +00:00
2023-08-25 12:39:26 +00:00
install_document_server
2021-06-09 15:48:42 +00:00
2023-08-25 12:39:26 +00:00
install_rabbitmq
2022-09-26 10:03:36 +00:00
2023-08-25 12:39:26 +00:00
install_redis
install_elasticsearch
2021-10-11 09:08:29 +00:00
2022-09-01 18:10:34 +00:00
if [ " $INSTALL_PRODUCT " = = "true" ] ; then
install_product
2021-06-09 15:48:42 +00:00
fi
echo ""
2023-08-07 11:50:53 +00:00
echo " Thank you for installing ${ PACKAGE_SYSNAME ^^ } ${ PRODUCT_NAME } . "
2023-08-07 11:49:23 +00:00
echo " In case you have any questions contact us via http://support. ${ PACKAGE_SYSNAME } .com or visit our forum at http://forum. ${ PACKAGE_SYSNAME } .com "
2021-06-09 15:48:42 +00:00
echo ""
exit 0;
}
start_installation