DocSpace-buildtools/install/OneClickInstall/install-Docker.sh

1393 lines
38 KiB
Bash
Raw Normal View History

#!/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
#
PACKAGE_SYSNAME="onlyoffice"
PRODUCT_NAME="DocSpace"
PRODUCT=$(tr '[:upper:]' '[:lower:]' <<< ${PRODUCT_NAME})
BASE_DIR="/app/$PACKAGE_SYSNAME";
PROXY_YML="${BASE_DIR}/proxy.yml"
STATUS=""
DOCKER_TAG=""
INSTALLATION_TYPE="ENTERPRISE"
IMAGE_NAME="${PACKAGE_SYSNAME}/${PRODUCT}-api"
CONTAINER_NAME="${PACKAGE_SYSNAME}-api"
2023-06-26 07:21:16 +00:00
NETWORK_NAME=${PACKAGE_SYSNAME}
SWAPFILE="/${PRODUCT}_swapfile";
MAKESWAP="true";
DISK_REQUIREMENTS=40960;
MEMORY_REQUIREMENTS=8192;
CORE_REQUIREMENTS=4;
DIST="";
REV="";
KERNEL="";
INSTALL_REDIS="true";
INSTALL_RABBITMQ="true";
INSTALL_MYSQL_SERVER="true";
INSTALL_DOCUMENT_SERVER="true";
INSTALL_ELASTICSEARCH="true";
INSTALL_PRODUCT="true";
UPDATE="false";
HUB="";
USERNAME="";
PASSWORD="";
MYSQL_VERSION=""
MYSQL_DATABASE=""
MYSQL_USER=""
MYSQL_PASSWORD=""
MYSQL_ROOT_PASSWORD=""
MYSQL_HOST=""
MYSQL_PORT=""
DATABASE_MIGRATION="true"
ELK_VERSION=""
ELK_SHEME=""
ELK_HOST=""
ELK_PORT=""
REDIS_HOST=""
REDIS_PORT=""
REDIS_USER_NAME=""
REDIS_PASSWORD=""
RABBIT_HOST=""
RABBIT_PORT=""
RABBIT_USER_NAME=""
RABBIT_PASSWORD=""
DOCUMENT_SERVER_IMAGE_NAME=""
DOCUMENT_SERVER_VERSION=""
DOCUMENT_SERVER_JWT_SECRET=""
DOCUMENT_SERVER_JWT_HEADER=""
DOCUMENT_SERVER_URL_EXTERNAL=""
APP_CORE_BASE_DOMAIN=""
APP_CORE_MACHINEKEY=""
ENV_EXTENSION=""
LETS_ENCRYPT_DOMAIN=""
LETS_ENCRYPT_MAIL=""
HELP_TARGET="install-Docker.sh";
SKIP_HARDWARE_CHECK="false";
2022-12-12 11:07:20 +00:00
EXTERNAL_PORT="80"
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
;;
-ids | --installdocspace )
if [ "$2" != "" ]; then
INSTALL_PRODUCT=$2
shift
fi
;;
-idocs | --installdocs )
if [ "$2" != "" ]; then
INSTALL_DOCUMENT_SERVER=$2
shift
fi
;;
-imysql | --installmysql )
if [ "$2" != "" ]; then
INSTALL_MYSQL_SERVER=$2
shift
fi
;;
-irbt | --installrabbitmq )
if [ "$2" != "" ]; then
INSTALL_RABBITMQ=$2
shift
fi
;;
-irds | --installredis )
if [ "$2" != "" ]; then
INSTALL_REDIS=$2
shift
fi
;;
-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
;;
-mysqlport | --mysqlport )
if [ "$2" != "" ]; then
MYSQL_PORT=$2
shift
fi
;;
-mysqlp | --mysqlpassword )
if [ "$2" != "" ]; then
MYSQL_PASSWORD=$2
shift
fi
;;
-espr | --elasticprotocol )
if [ "$2" != "" ]; then
ELK_SHEME=$2
shift
fi
;;
-esh | --elastichost )
if [ "$2" != "" ]; then
ELK_HOST=$2
shift
fi
;;
-esp | --elasticport )
if [ "$2" != "" ]; then
ELK_PORT=$2
shift
fi
;;
-skiphc | --skiphardwarecheck )
if [ "$2" != "" ]; then
SKIP_HARDWARE_CHECK=$2
shift
fi
;;
-ep | --externalport )
if [ "$2" != "" ]; then
EXTERNAL_PORT=$2
shift
fi
;;
-dsh | --docspacehost )
if [ "$2" != "" ]; then
APP_URL_PORTAL=$2
shift
fi
;;
-mk | --machinekey )
if [ "$2" != "" ]; then
APP_CORE_MACHINEKEY=$2
shift
fi
;;
-env | --environment )
if [ "$2" != "" ]; then
ENV_EXTENSION=$2
shift
fi
;;
-s | --status )
if [ "$2" != "" ]; then
STATUS=$2
IMAGE_NAME="${PACKAGE_SYSNAME}/${STATUS}${PRODUCT}-api"
shift
fi
;;
2021-09-30 12:05:43 +00:00
-ls | --localscripts )
if [ "$2" != "" ]; then
shift
fi
;;
2021-09-30 12:05:43 +00:00
-dsv | --docspaceversion )
if [ "$2" != "" ]; then
DOCKER_TAG=$2
shift
fi
;;
-gb | --gitbranch )
2021-09-30 12:05:43 +00:00
if [ "$2" != "" ]; then
PARAMETERS="$PARAMETERS ${1}";
GIT_BRANCH=$2
2021-09-30 12:05:43 +00:00
shift
fi
;;
-docsi | --docsimage )
if [ "$2" != "" ]; then
DOCUMENT_SERVER_IMAGE_NAME=$2
shift
fi
;;
-docsv | --docsversion )
if [ "$2" != "" ]; then
DOCUMENT_SERVER_VERSION=$2
shift
fi
;;
-docsurl | --docsurl )
if [ "$2" != "" ]; then
DOCUMENT_SERVER_URL_EXTERNAL=$2
shift
fi
;;
-dbm | --databasemigration )
if [ "$2" != "" ]; then
DATABASE_MIGRATION=$2
shift
fi
;;
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
;;
-it | --installation_type )
if [ "$2" != "" ]; then
INSTALLATION_TYPE=$(echo "$2" | awk '{print toupper($0)}');
shift
fi
;;
-ms | --makeswap )
if [ "$2" != "" ]; then
MAKESWAP=$2
shift
fi
;;
-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
;;
-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
;;
-? | -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"
echo " -it, --installation_type installation type (community|enterprise)"
echo " -skiphc, --skiphardwarecheck skip hardware check (true|false)"
echo " -u, --update use to update existing components (true|false)"
echo " -ids, --installdocspace install or update $PRODUCT (true|false)"
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"
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"
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)"
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 9200)"
echo " -rdsh, --redishost the IP address or hostname of the redis server"
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 " -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 \"/\")"
echo " -mysqlrp, --mysqlrootpassword mysql server root password"
echo " -mysqld, --mysqldatabase $PRODUCT database name"
echo " -mysqlu, --mysqluser $PRODUCT database user"
echo " -mysqlp, --mysqlpassword $PRODUCT database password"
echo " -mysqlh, --mysqlhost mysql server host"
echo " -mysqlport, --mysqlport mysql server port number (default value 3306)"
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"
echo " -dbm, --databasemigration database migration (true|false)"
echo " -ms, --makeswap make swap file (true|false)"
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"
echo
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
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:"
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:"
echo " bash $HELP_TARGET -u true -docsi ${PACKAGE_SYSNAME}/documentserver-ee -docsv 7.2.1.34 -idocs true -ids false -irbt false -irds false"
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:"
echo " bash $HELP_TARGET -u true -dsv v1.2.0 -idocs false -irbt false -irds false"
echo
exit 0
;;
* )
echo "Unknown parameter $1" 1>&2
exit 1
;;
esac
shift
done
root_checking () {
PID=$$
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+'`
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
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
}
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 () {
local COMMAND_NAME=$1
local PACKAGE_NAME=$2
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
echo "Command $COMMAND_NAME not found"
exit 1;
fi
}
install_docker_compose () {
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
}
check_ports () {
RESERVED_PORTS=();
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
if [ "$INSTALL_PRODUCT" == "true" ]; then
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
}
create_network () {
NETWORT_EXIST=$(docker network ls | awk '{print $2;}' | { grep -x ${NETWORK_NAME} || true; });
if [[ -z ${NETWORT_EXIST} ]]; then
docker network create --driver bridge ${NETWORK_NAME}
fi
}
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 () {
if ! command_exists dig; then
if command_exists apt-get; then
install_service dig dnsutils
elif command_exists yum; then
install_service dig bind-utils
fi
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
DOMAINS=$(dig +short -x $(curl -s ifconfig.me) | sed 's/\.$//')
if [[ -n "$DOMAINS" ]]; then
while IFS= read -r DOMAIN; do
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
LOCAL_RESOLVED_DOMAINS+="$DOMAIN"
elif [[ -n "$IP_ADDRESS" ]]; then
APP_URL_PORTAL=${APP_URL_PORTAL:-"http://${DOMAIN}:${EXTERNAL_PORT}"}
fi
done <<< "$DOMAINS"
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."
echo "Select 'N' to cancel ${PACKAGE_SYSNAME^^} ${PRODUCT_NAME} installation."
if read_continue_installation; then
if [[ -f "$DOCKER_DAEMON_FILE" ]]; then
2023-10-27 09:09:56 +00:00
sed -i 's!{!& "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
fi
systemctl restart docker
fi
fi
fi
}
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"
}
get_env_parameter () {
local PARAMETER_NAME=$1;
local CONTAINER_NAME=$2;
if [[ -z ${PARAMETER_NAME} ]]; then
echo "Empty parameter name"
exit 1;
fi
if command_exists docker ; then
[ -n "$CONTAINER_NAME" ] && CONTAINER_EXIST=$(docker ps -aqf "name=$CONTAINER_NAME");
if [[ -n ${CONTAINER_EXIST} ]]; then
VALUE=$(docker inspect --format='{{range .Config.Env}}{{println .}}{{end}}' ${CONTAINER_NAME} | grep "${PARAMETER_NAME}=" | sed 's/^.*=//');
fi
fi
if [ -z ${VALUE} ] && [ -f ${BASE_DIR}/.env ]; then
VALUE=$(awk -F= "/${PARAMETER_NAME}/ {print \$2}" ${BASE_DIR}/.env | tr -d '\r')
fi
echo ${VALUE//\"}
}
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]+)?$"
TAG_LIST=""
for item in $TAGS_RESP
do
2023-07-12 05:56:58 +00:00
if [[ $item =~ $VERSION_REGEX ]]; then
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}');
if [ ! -z "${LATEST_TAG}" ]; then
echo "${LATEST_TAG}" | sed "s/\"//g"
else
echo "Unable to retrieve tag from ${1} repository" >&2
kill -s TERM $PID
fi
}
set_docs_url_external () {
DOCUMENT_SERVER_URL_EXTERNAL=${DOCUMENT_SERVER_URL_EXTERNAL:-$(get_env_parameter "DOCUMENT_SERVER_URL_EXTERNAL" "${CONTAINER_NAME}")};
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
}
set_jwt_secret () {
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)}"
}
2023-04-26 06:57:42 +00:00
set_jwt_header () {
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
}
set_core_machinekey () {
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))}"
}
set_mysql_params () {
MYSQL_PASSWORD="${MYSQL_PASSWORD:-$(get_env_parameter "MYSQL_PASSWORD" "${CONTAINER_NAME}")}"
MYSQL_PASSWORD="${MYSQL_PASSWORD:-$(get_random_str 20)}"
MYSQL_ROOT_PASSWORD="${MYSQL_ROOT_PASSWORD:-$(get_env_parameter "MYSQL_ROOT_PASSWORD" "${CONTAINER_NAME}")}"
MYSQL_ROOT_PASSWORD="${MYSQL_ROOT_PASSWORD:-$(get_random_str 20)}"
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}")}"
}
set_docspace_params() {
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}")};
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")};
}
set_installation_type_data () {
2023-05-25 08:57:12 +00:00
if [ "$INSTALLATION_TYPE" == "COMMUNITY" ]; then
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
DOCUMENT_SERVER_IMAGE_NAME=${DOCUMENT_SERVER_IMAGE_NAME:-"${PACKAGE_SYSNAME}/${STATUS}documentserver-ee"}
fi
}
download_files () {
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
# 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=""
echo -n "Downloading configuration files to the ${BASE_DIR} directory..."
if [ -z "${GIT_BRANCH}" ]; then
if ! command_exists tar; then
install_service tar
fi
[ -d "${BASE_DIR}" ] && rm -rf "${BASE_DIR}"
mkdir -p ${BASE_DIR}
curl -s -O https://download.onlyoffice.com/${PRODUCT}/docker.tar.gz
tar -xzvf docker.tar.gz -C ${BASE_DIR} >/dev/null
rm -rf docker.tar.gz
else
if ! command_exists svn; then
install_service svn subversion
fi
svn export --force https://github.com/${PACKAGE_SYSNAME}/${PRODUCT}-buildtools/branches/${GIT_BRANCH}/install/docker/ ${BASE_DIR} >/dev/null
fi
echo "OK"
reconfigure STATUS ${STATUS}
reconfigure INSTALLATION_TYPE ${INSTALLATION_TYPE}
2023-06-26 07:21:16 +00:00
reconfigure NETWORK_NAME ${NETWORK_NAME}
}
reconfigure () {
local VARIABLE_NAME="$1"
local VARIABLE_VALUE="$2"
if [[ -n ${VARIABLE_VALUE} ]]; then
sed -i "s~${VARIABLE_NAME}=.*~${VARIABLE_NAME}=${VARIABLE_VALUE}~g" $BASE_DIR/.env
fi
}
install_mysql_server () {
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}
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
}
install_document_server () {
reconfigure DOCUMENT_SERVER_JWT_HEADER ${DOCUMENT_SERVER_JWT_HEADER}
reconfigure DOCUMENT_SERVER_JWT_SECRET ${DOCUMENT_SERVER_JWT_SECRET}
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
}
install_rabbitmq () {
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
}
install_redis () {
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
}
install_product () {
DOCKER_TAG="${DOCKER_TAG:-$(get_available_version ${IMAGE_NAME})}"
reconfigure DOCKER_TAG ${DOCKER_TAG}
[ "${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
docker-compose -f $BASE_DIR/migration-runner.yml -f $BASE_DIR/notify.yml -f $BASE_DIR/healthchecks.yml -f ${PROXY_YML} down
docker-compose -f $BASE_DIR/${PRODUCT}.yml down --volumes
fi
reconfigure ENV_EXTENSION ${ENV_EXTENSION}
reconfigure APP_CORE_MACHINEKEY ${APP_CORE_MACHINEKEY}
reconfigure APP_CORE_BASE_DOMAIN ${APP_CORE_BASE_DOMAIN}
reconfigure APP_URL_PORTAL "${APP_URL_PORTAL:-"http://${PACKAGE_SYSNAME}-router:8092"}"
reconfigure EXTERNAL_PORT ${EXTERNAL_PORT}
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
docker-compose -f ${PROXY_YML} up -d
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
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
}
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
}
start_installation () {
root_checking
set_installation_type_data
get_os_info
check_os_info
check_kernel
if [ "$UPDATE" != "true" ]; then
check_ports
fi
if [ "$SKIP_HARDWARE_CHECK" != "true" ]; then
check_hardware
fi
if [ "$MAKESWAP" == "true" ]; then
make_swap
fi
if command_exists docker ; then
check_docker_version
service docker start
else
install_docker
fi
docker_login
create_network
domain_check
if [ "$UPDATE" = "true" ]; then
set_docspace_params
fi
set_docs_url_external
set_jwt_secret
2023-04-26 06:57:42 +00:00
set_jwt_header
set_core_machinekey
set_mysql_params
download_files
install_mysql_server
install_document_server
install_rabbitmq
install_redis
install_elasticsearch
if [ "$INSTALL_PRODUCT" == "true" ]; then
install_product
fi
echo ""
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"
echo ""
exit 0;
}
2023-10-02 15:09:10 +00:00
start_installation