OnlyOfficeCS-docker/run-community-server.sh

1096 lines
43 KiB
Bash
Raw Normal View History

2016-06-22 09:47:40 +00:00
#!/bin/bash
2015-04-17 15:16:43 +00:00
2017-05-30 13:28:29 +00:00
set -x
echo "##########################################################"
echo "######### Start container configuration ################"
echo "##########################################################"
2017-01-20 10:59:29 +00:00
SERVER_HOST=${SERVER_HOST:-""};
2019-02-13 11:45:23 +00:00
APP_DIR="/var/www/onlyoffice"
APP_DATA_DIR="${APP_DIR}/Data"
APP_PRIVATE_DATA_DIR="${APP_DATA_DIR}/.private"
APP_SERVICES_DIR="${APP_DIR}/Services"
APP_SQL_DIR="${APP_DIR}/Sql"
APP_ROOT_DIR="${APP_DIR}/WebStudio"
APP_APISYSTEM_DIR="/var/www/onlyoffice/ApiSystem"
APP_MONOSERVER_PATH="/etc/init.d/monoserve";
APP_HYPERFASTCGI_PATH="/etc/hyperfastcgi/onlyoffice";
APP_MONOSERVE_COUNT=1;
APP_MODE=${APP_MODE:-"SERVER"};
APP_GOD_DIR="/etc/god/conf.d"
APP_CRON_DIR="/etc/cron.d"
APP_CRON_PATH="/etc/cron.d/onlyoffice"
2019-02-13 13:44:43 +00:00
DOCKER_APP_SUBNET=$(ip -o -f inet addr show | awk '/scope global/ {print $4}' | head -1);
2017-06-26 17:58:37 +00:00
DOCKER_CONTAINER_IP=$(ip addr show eth0 | awk '/inet / {gsub(/\/.*/,"",$2); print $2}' | head -1);
2017-08-29 14:10:44 +00:00
DOCKER_CONTAINER_NAME="onlyoffice-community-server";
2017-02-14 14:18:32 +00:00
DOCKER_ENABLED=${DOCKER_ENABLED:-true};
2017-03-29 09:14:42 +00:00
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
2016-06-22 09:47:40 +00:00
NGINX_CONF_DIR="/etc/nginx/sites-enabled"
2019-03-26 14:17:02 +00:00
CPU_PROCESSOR_COUNT=${CPU_PROCESSOR_COUNT:-$(grep processor /proc/cpuinfo | wc -l)};
NGINX_WORKER_CONNECTIONS=${NGINX_WORKER_CONNECTIONS:-$(ulimit -n)};
2017-05-15 11:26:40 +00:00
SERVICE_SSO_AUTH_HOST_ADDR=${SERVICE_SSO_AUTH_HOST_ADDR:-${CONTROL_PANEL_PORT_80_TCP_ADDR}};
2019-02-13 11:45:23 +00:00
DEFAULT_APP_CORE_MACHINEKEY="$(sudo sed -n '/"core.machinekey"/s!.*value\s*=\s*"\([^"]*\)".*!\1!p' ${APP_ROOT_DIR}/web.appsettings.config)";
IS_UPDATE="false"
2017-09-19 13:36:16 +00:00
2019-03-04 15:34:43 +00:00
CreateAuthToken() {
local pkey="$1";
local machinekey=$(echo -n "$2");
local a=1
local LIMIT=10
while [ "$a" -le $LIMIT ]
do
local now=$(date +"%Y%m%d%H%M%S");
2019-05-15 12:04:11 +00:00
local authkey=$(echo -n -e "${now}\n${pkey}" | openssl dgst -sha1 -binary -mac HMAC -macopt key:"$machinekey");
2019-03-04 15:34:43 +00:00
authkey=$(echo -n "${authkey}" | base64);
local result="ASC ${pkey}:${now}:${authkey}";
a=$(($a + 1));
if [ -z "$(echo \"$result\" | grep ==)" ]; then
echo "$result"
exit 0;
fi
sleep 1s;
done
exit 1;
}
2019-02-15 13:06:51 +00:00
if [ ! -e "${APP_PRIVATE_DATA_DIR}/machinekey" ]; then
2019-02-13 11:45:23 +00:00
mkdir -p ${APP_PRIVATE_DATA_DIR};
2019-02-15 13:06:51 +00:00
APP_CORE_MACHINEKEY=${ONLYOFFICE_CORE_MACHINEKEY:-${APP_CORE_MACHINEKEY:-${DEFAULT_APP_CORE_MACHINEKEY}}};
echo "${APP_CORE_MACHINEKEY}" > ${APP_PRIVATE_DATA_DIR}/machinekey
else
APP_CORE_MACHINEKEY=$(head -n 1 ${APP_PRIVATE_DATA_DIR}/machinekey)
fi
2019-05-15 12:04:11 +00:00
RELEASE_DATE="$(sudo sed -n '/"version.release-date"/s!.*value\s*=\s*"\([^"]*\)".*!\1!p' ${APP_ROOT_DIR}/web.appsettings.config)";
RELEASE_DATE_SIGN="$(CreateAuthToken "${RELEASE_DATE}" "${APP_CORE_MACHINEKEY}" )";
sed -i '/version.release-date.sign/s!value="[^"]*"!value=\"'"$RELEASE_DATE_SIGN"'\"!g' ${APP_ROOT_DIR}/web.appsettings.config
PREV_RELEASE_DATE=$(head -n 1 ${APP_PRIVATE_DATA_DIR}/release_date)
if [ "${RELEASE_DATE}" != "${PREV_RELEASE_DATE}" ]; then
echo ${RELEASE_DATE} > ${APP_PRIVATE_DATA_DIR}/release_date
IS_UPDATE="true";
fi
2019-02-13 11:45:23 +00:00
chmod -R 444 ${APP_PRIVATE_DATA_DIR}
if cat /proc/1/cgroup | grep -qE "docker|lxc|kubepods"; then
2017-11-17 15:42:54 +00:00
DOCKER_ENABLED=true;
else
DOCKER_ENABLED=false;
fi
2017-03-22 15:29:15 +00:00
if [ ! -d "$NGINX_CONF_DIR" ]; then
2017-03-22 12:31:10 +00:00
mkdir -p $NGINX_CONF_DIR;
fi
2019-02-13 11:45:23 +00:00
if [ ! -d "${APP_DIR}/DocumentServerData" ]; then
mkdir -p ${APP_DIR}/DocumentServerData;
2017-03-23 14:17:14 +00:00
fi
2016-06-22 09:47:40 +00:00
NGINX_ROOT_DIR="/etc/nginx"
VALID_IP_ADDRESS_REGEX="^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$";
LOG_DEBUG="";
2015-07-07 14:13:50 +00:00
LOG_DIR="/var/log/onlyoffice/"
2015-04-17 15:16:43 +00:00
2019-02-13 13:44:43 +00:00
APP_HTTPS=${APP_HTTPS:-false}
2015-04-17 15:16:43 +00:00
2019-02-13 11:45:23 +00:00
SSL_CERTIFICATES_DIR="${APP_DATA_DIR}/certs"
2015-04-17 15:16:43 +00:00
SSL_CERTIFICATE_PATH=${SSL_CERTIFICATE_PATH:-${SSL_CERTIFICATES_DIR}/onlyoffice.crt}
SSL_KEY_PATH=${SSL_KEY_PATH:-${SSL_CERTIFICATES_DIR}/onlyoffice.key}
2018-02-27 13:41:34 +00:00
SSL_CERTIFICATE_PATH_PFX=${SSL_CERTIFICATE_PATH_PFX:-${SSL_CERTIFICATES_DIR}/onlyoffice.pfx}
SSL_CERTIFICATE_PATH_PFX_PWD="onlyoffice";
2015-04-17 15:16:43 +00:00
SSL_DHPARAM_PATH=${SSL_DHPARAM_PATH:-${SSL_CERTIFICATES_DIR}/dhparam.pem}
SSL_VERIFY_CLIENT=${SSL_VERIFY_CLIENT:-off}
2017-04-28 13:02:23 +00:00
SSL_OCSP_CERTIFICATE_PATH=${SSL_OCSP_CERTIFICATE_PATH:-${SSL_CERTIFICATES_DIR}/stapling.trusted.crt}
2017-04-14 11:44:08 +00:00
CA_CERTIFICATES_PATH=${CA_CERTIFICATES_PATH:-${SSL_CERTIFICATES_DIR}/ca.crt}
2019-02-13 13:44:43 +00:00
APP_HTTPS_HSTS_ENABLED=${APP_HTTPS_HSTS_ENABLED:-true}
2019-02-13 11:45:23 +00:00
APP_HTTPS_HSTS_MAXAGE=${APP_HTTPS_HSTS_MAXAGE:-63072000}
2017-03-29 09:14:42 +00:00
SYSCONF_TEMPLATES_DIR="${DIR}/config"
2017-07-18 12:53:38 +00:00
mkdir -p ${SYSCONF_TEMPLATES_DIR}/nginx;
2017-03-29 09:14:42 +00:00
SYSCONF_TOOLS_DIR="${DIR}/assets/tools"
2016-02-08 14:06:17 +00:00
2019-02-13 13:44:43 +00:00
APP_SERVICES_INTERNAL_HOST=${APP_SERVICES_PORT_9865_TCP_ADDR:-${APP_SERVICES_INTERNAL_HOST}}
APP_SERVICES_EXTERNAL=false
2015-04-17 15:16:43 +00:00
DOCUMENT_SERVER_ENABLED=false
2016-02-08 14:06:17 +00:00
2017-09-04 09:29:43 +00:00
DOCUMENT_SERVER_JWT_ENABLED=${DOCUMENT_SERVER_JWT_ENABLED:-false};
DOCUMENT_SERVER_JWT_SECRET=${DOCUMENT_SERVER_JWT_SECRET:-""};
2017-09-08 09:19:28 +00:00
DOCUMENT_SERVER_JWT_HEADER=${DOCUMENT_SERVER_JWT_HEADER:-""};
2016-02-08 14:06:17 +00:00
DOCUMENT_SERVER_HOST=${DOCUMENT_SERVER_HOST:-""};
2017-10-17 15:36:57 +00:00
DOCUMENT_SERVER_HOST_PROXY=${DOCUMENT_SERVER_HOST};
2016-02-08 14:06:17 +00:00
DOCUMENT_SERVER_PROTOCOL=${DOCUMENT_SERVER_PROTOCOL:-"http"};
DOCUMENT_SERVER_API_URL="";
2017-06-26 17:58:37 +00:00
DOCUMENT_SERVER_HOST_IP="";
2016-02-08 14:06:17 +00:00
CONTROL_PANEL_ENABLED=false
2015-04-17 15:16:43 +00:00
MAIL_SERVER_ENABLED=false
2017-06-13 13:37:16 +00:00
MYSQL_SERVER_ROOT_PASSWORD=${MYSQL_SERVER_ROOT_PASSWORD:-""}
2015-07-07 14:13:50 +00:00
MYSQL_SERVER_HOST=${MYSQL_SERVER_HOST:-"localhost"}
MYSQL_SERVER_PORT=${MYSQL_SERVER_PORT:-"3306"}
MYSQL_SERVER_DB_NAME=${MYSQL_SERVER_DB_NAME:-"onlyoffice"}
MYSQL_SERVER_USER=${MYSQL_SERVER_USER:-"root"}
2017-06-13 13:37:16 +00:00
MYSQL_SERVER_PASS=${MYSQL_SERVER_PASS:-${MYSQL_SERVER_ROOT_PASSWORD}}
2017-02-14 14:18:32 +00:00
MYSQL_SERVER_EXTERNAL=${MYSQL_SERVER_EXTERNAL:-false};
2015-07-07 14:13:50 +00:00
2017-04-14 15:19:25 +00:00
mkdir -p "${SSL_CERTIFICATES_DIR}/.well-known/acme-challenge"
2017-03-22 15:29:15 +00:00
2017-06-26 17:58:37 +00:00
check_ip_is_internal(){
local IPRE='\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)';
local IP=($(echo "$1" | sed -ne 's:^'"$IPRE"'/.*$:\1 \2 \3 \4:p'));
local MASK=($(echo "$1" | sed -ne 's:^[^/]*/'"$IPRE"'$:\1 \2 \3 \4:p'))
if [ ${#MASK[@]} -ne 4 ]; then
local BITCNT=($(echo "$1" | sed -ne 's:^[^/]*/\([0-9]\+\)$:\1:p'))
BITCNT=$(( ((2**${BITCNT})-1) << (32-${BITCNT}) ))
for (( I=0; I<4; I++ )); do
MASK[$I]=$(( ($BITCNT >> (8 * (3 - $I))) & 255 ))
done
fi
local NETWORK=()
for (( I=0; I<4; I++ )); do
NETWORK[$I]=$(( ${IP[$I]} & ${MASK[$I]} ))
done
local INIP=($(echo "$2" | sed -ne 's:^'"$IPRE"'$:\1 \2 \3 \4:p'))
for (( I=0; I<4; I++ )); do
[[ $(( ${INIP[$I]} & ${MASK[$I]} )) -ne ${NETWORK[$I]} ]] && exit 0;
done
echo "true"
}
2019-01-22 12:42:21 +00:00
normalize_subnet(){
local IPRE='\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)';
local IP=($(echo "$1" | sed -ne 's:^'"$IPRE"'/.*$:\1 \2 \3 \4:p'));
local MASK=($(echo "$1" | sed -ne 's:^[^/]*/'"$IPRE"'$:\1 \2 \3 \4:p'))
if [ ${#MASK[@]} -ne 4 ]; then
local BITCNT=($(echo "$1" | sed -ne 's:^[^/]*/\([0-9]\+\)$:\1:p'))
BITCNT=$(( ((2**${BITCNT})-1) << (32-${BITCNT}) ))
for (( I=0; I<4; I++ )); do
MASK[$I]=$(( ($BITCNT >> (8 * (3 - $I))) & 255 ))
done
fi
local NETWORK=()
for (( I=0; I<4; I++ )); do
NETWORK[$I]=$(( ${IP[$I]} & ${MASK[$I]} ))
done
local IP_MASK=$(echo "$1" | sed -ne 's:^[^/]*/\([0-9]\+\)$:\1:p');
echo ${NETWORK[0]}.${NETWORK[1]}.${NETWORK[2]}.${NETWORK[3]}/$IP_MASK
}
2019-02-13 13:44:43 +00:00
if [ ${DOCKER_APP_SUBNET} ]; then
DOCKER_APP_SUBNET=$(normalize_subnet $DOCKER_APP_SUBNET);
2019-01-22 12:42:21 +00:00
fi
2016-12-13 14:38:26 +00:00
check_partnerdata(){
2019-02-13 11:45:23 +00:00
PARTNER_DATA_FILE="${APP_DATA_DIR}/json-data.txt";
2016-12-13 14:38:26 +00:00
if [ -f ${PARTNER_DATA_FILE} ]; then
2019-02-13 11:45:23 +00:00
for serverID in $(seq 1 ${APP_MONOSERVE_COUNT});
2016-12-13 14:38:26 +00:00
do
index=$serverID;
if [ $index == 1 ]; then
index="";
fi
2019-02-13 11:45:23 +00:00
cp ${PARTNER_DATA_FILE} ${APP_ROOT_DIR}${index}/App_Data/static/partnerdata/
2016-12-13 14:38:26 +00:00
done
fi
}
2017-03-22 15:29:15 +00:00
log_debug () {
echo "onlyoffice: [Debug] $1"
}
2016-07-20 12:40:01 +00:00
check_partnerdata
2016-06-22 09:47:40 +00:00
re='^[0-9]+$'
2019-02-13 11:45:23 +00:00
if ! [[ ${APP_MONOSERVE_COUNT} =~ $re ]] ; then
echo "error: APP_MONOSERVE_COUNT not a number";
APP_MONOSERVE_COUNT=2;
2016-06-22 09:47:40 +00:00
fi
2019-02-13 11:45:23 +00:00
# if [ "${APP_MONOSERVE_COUNT}" -eq "2" ] ; then
2016-06-22 09:47:40 +00:00
# KERNER_CPU=$(nproc);
2019-02-13 11:45:23 +00:00
# if [ "${KERNER_CPU}" -gt "${APP_MONOSERVE_COUNT}" ]; then
# APP_MONOSERVE_COUNT=${KERNER_CPU};
2016-06-22 09:47:40 +00:00
# fi
# fi
2019-05-20 16:11:51 +00:00
if [ ! -f /proc/net/if_inet6 ]; then
sed '/listen\s*\[::\]:80/d' -i ${NGINX_ROOT_DIR}/includes/onlyoffice-communityserver-common-ssl.conf.template
sed '/listen\s*\[::\]:443/d' -i ${NGINX_ROOT_DIR}/includes/onlyoffice-communityserver-common-ssl.conf.template
fi
2017-07-18 12:14:45 +00:00
cp ${NGINX_ROOT_DIR}/includes/onlyoffice-communityserver-nginx.conf.template ${NGINX_ROOT_DIR}/nginx.conf
2017-02-14 14:56:09 +00:00
2019-03-26 14:17:02 +00:00
sed 's/^worker_processes.*/'"worker_processes ${CPU_PROCESSOR_COUNT};"'/' -i ${NGINX_ROOT_DIR}/nginx.conf
sed 's/worker_connections.*/'"worker_connections ${NGINX_WORKER_CONNECTIONS};"'/' -i ${NGINX_ROOT_DIR}/nginx.conf
2017-07-18 12:14:45 +00:00
cp ${NGINX_ROOT_DIR}/includes/onlyoffice-communityserver-common-init.conf.template ${NGINX_CONF_DIR}/onlyoffice
if [ -f "${SSL_CERTIFICATE_PATH}" -a -f "${SSL_KEY_PATH}" ]; then
sed 's,{{SSL_CERTIFICATE_PATH}},'"${SSL_CERTIFICATE_PATH}"',' -i ${NGINX_CONF_DIR}/onlyoffice
sed 's,{{SSL_KEY_PATH}},'"${SSL_KEY_PATH}"',' -i ${NGINX_CONF_DIR}/onlyoffice
else
sed '/{{SSL_CERTIFICATE_PATH}}/d' -i ${NGINX_CONF_DIR}/onlyoffice
sed '/{{SSL_KEY_PATH}}/d' -i ${NGINX_CONF_DIR}/onlyoffice
sed '/listen\s*443/d' -i ${NGINX_CONF_DIR}/onlyoffice
fi
2017-02-14 14:56:09 +00:00
rm -f ${NGINX_ROOT_DIR}/conf.d/*.conf
2016-06-22 09:47:40 +00:00
service rsyslog restart || true
2017-01-09 12:27:18 +00:00
service nginx restart
2016-06-22 09:47:40 +00:00
2019-03-26 14:17:02 +00:00
if ! grep -q "thread_pool.index.size" /etc/elasticsearch/elasticsearch.yml; then
echo "thread_pool.index.size: $CPU_PROCESSOR_COUNT" >> /etc/elasticsearch/elasticsearch.yml
else
sed -i "s/thread_pool.index.size.*/thread_pool.index.size: $CPU_PROCESSOR_COUNT/" /etc/elasticsearch/elasticsearch.yml
fi
if ! grep -q "thread_pool.write.size" /etc/elasticsearch/elasticsearch.yml; then
echo "thread_pool.write.size: $CPU_PROCESSOR_COUNT" >> /etc/elasticsearch/elasticsearch.yml
else
sed -i "s/thread_pool.write.size.*/thread_pool.write.size: $CPU_PROCESSOR_COUNT/" /etc/elasticsearch/elasticsearch.yml
fi
2019-02-13 13:44:43 +00:00
if [ ${APP_SERVICES_INTERNAL_HOST} ]; then
APP_SERVICES_EXTERNAL=true;
2016-06-22 09:47:40 +00:00
2019-02-13 13:44:43 +00:00
sed '/endpoint/s/http:\/\/localhost:9865\/teamlabJabber/http:\/\/'${APP_SERVICES_INTERNAL_HOST}':9865\/teamlabJabber/' -i ${APP_ROOT_DIR}/Web.config
sed '/endpoint/s/http:\/\/localhost:9866\/teamlabSearcher/http:\/\/'${APP_SERVICES_INTERNAL_HOST}':9866\/teamlabSearcher/' -i ${APP_ROOT_DIR}/Web.config
sed '/endpoint/s/http:\/\/localhost:9871\/teamlabNotify/http:\/\/'${APP_SERVICES_INTERNAL_HOST}':9871\/teamlabNotify/' -i ${APP_ROOT_DIR}/Web.config
sed '/endpoint/s/http:\/\/localhost:9882\/teamlabBackup/http:\/\/'${APP_SERVICES_INTERNAL_HOST}':9882\/teamlabBackup/' -i ${APP_ROOT_DIR}/Web.config
2016-06-22 09:47:40 +00:00
2019-02-13 13:44:43 +00:00
sed '/BoshPath/s!\(value\s*=\s*\"\)[^\"]*\"!\1http:\/\/'${APP_SERVICES_INTERNAL_HOST}':5280\/http-poll\/\"!' -i ${APP_ROOT_DIR}/web.appsettings.config
2016-06-22 09:47:40 +00:00
2019-02-13 11:45:23 +00:00
sed '/<endpoint/s!\"netTcpBinding\"!\"basicHttpBinding\"!' -i ${APP_ROOT_DIR}/Web.config;
2016-06-22 09:47:40 +00:00
if [ ${LOG_DEBUG} ]; then
2017-03-22 15:29:15 +00:00
log_debug "Change connections for ${1} then ${2}";
2016-06-22 09:47:40 +00:00
fi
2017-02-15 15:02:08 +00:00
if [ "${DOCKER_ENABLED}" == "true" ]; then
2019-02-13 13:44:43 +00:00
while ! bash ${SYSCONF_TOOLS_DIR}/wait-for-it.sh ${APP_SERVICES_INTERNAL_HOST}:9871 --quiet -s -- echo "ONLYOFFICE SERVICES is up"; do
2017-02-15 15:02:08 +00:00
sleep 1
done
fi
2016-06-22 09:47:40 +00:00
fi
2016-02-08 14:06:17 +00:00
if [ ${DOCUMENT_SERVER_HOST} ]; then
DOCUMENT_SERVER_ENABLED=true;
DOCUMENT_SERVER_API_URL="${DOCUMENT_SERVER_PROTOCOL}:\/\/${DOCUMENT_SERVER_HOST}";
2016-02-08 14:06:17 +00:00
elif [ ${DOCUMENT_SERVER_PORT_80_TCP_ADDR} ]; then
DOCUMENT_SERVER_ENABLED=true;
DOCUMENT_SERVER_HOST=${DOCUMENT_SERVER_PORT_80_TCP_ADDR};
2017-10-17 15:36:57 +00:00
DOCUMENT_SERVER_HOST_PROXY="localhost\/ds-vpath";
DOCUMENT_SERVER_API_URL="\/ds-vpath";
2016-02-08 14:06:17 +00:00
fi
2019-02-13 13:44:43 +00:00
if [ "${DOCUMENT_SERVER_ENABLED}" == "true" ] && [ $DOCKER_APP_SUBNET ] && [ -z "$SERVER_HOST" ]; then
2017-06-26 17:58:37 +00:00
DOCUMENT_SERVER_HOST_IP=$(dig +short ${DOCUMENT_SERVER_HOST});
2019-02-13 13:44:43 +00:00
if check_ip_is_internal $DOCKER_APP_SUBNET $DOCUMENT_SERVER_HOST_IP; then
2017-08-29 14:10:44 +00:00
_DOCKER_CONTAINER_IP=$(dig +short ${DOCKER_CONTAINER_NAME});
if [ "${DOCKER_CONTAINER_IP}" == "${_DOCKER_CONTAINER_IP}" ]; then
SERVER_HOST=${DOCKER_CONTAINER_NAME};
else
SERVER_HOST=${DOCKER_CONTAINER_IP};
fi
2017-06-26 17:58:37 +00:00
fi
fi
2015-07-07 14:13:50 +00:00
if [ ${MYSQL_SERVER_HOST} != "localhost" ]; then
MYSQL_SERVER_EXTERNAL=true;
fi
if [ ${MYSQL_SERVER_PORT_3306_TCP} ]; then
MYSQL_SERVER_EXTERNAL=true;
MYSQL_SERVER_HOST=${MYSQL_SERVER_PORT_3306_TCP_ADDR};
MYSQL_SERVER_PORT=${MYSQL_SERVER_PORT_3306_TCP_PORT};
MYSQL_SERVER_DB_NAME=${MYSQL_SERVER_ENV_MYSQL_DATABASE:-${MYSQL_SERVER_DB_NAME}};
MYSQL_SERVER_USER=${MYSQL_SERVER_ENV_MYSQL_USER:-${MYSQL_SERVER_USER}};
MYSQL_SERVER_PASS=${MYSQL_SERVER_ENV_MYSQL_PASSWORD:-${MYSQL_SERVER_ENV_MYSQL_ROOT_PASSWORD:-${MYSQL_SERVER_PASS}}};
if [ ${LOG_DEBUG} ]; then
2017-03-22 15:29:15 +00:00
log_debug "MYSQL_SERVER_HOST: ${MYSQL_SERVER_HOST}";
log_debug "MYSQL_SERVER_PORT: ${MYSQL_SERVER_PORT}";
log_debug "MYSQL_SERVER_DB_NAME: ${MYSQL_SERVER_DB_NAME}";
log_debug "MYSQL_SERVER_USER: ${MYSQL_SERVER_USER}";
log_debug "MYSQL_SERVER_PASS: ${MYSQL_SERVER_PASS}";
2015-07-07 14:13:50 +00:00
fi
fi
2015-04-17 15:16:43 +00:00
2016-02-08 14:06:17 +00:00
if [ ${CONTROL_PANEL_PORT_80_TCP} ]; then
CONTROL_PANEL_ENABLED=true;
2015-04-17 15:16:43 +00:00
fi
2016-06-22 09:47:40 +00:00
MAIL_SERVER_API_PORT=${MAIL_SERVER_API_PORT:-${MAIL_SERVER_PORT_8081_TCP_PORT:-8081}};
MAIL_SERVER_API_HOST=${MAIL_SERVER_API_HOST:-${MAIL_SERVER_PORT_8081_TCP_ADDR}};
2016-02-08 14:06:17 +00:00
MAIL_SERVER_DB_HOST=${MAIL_SERVER_DB_HOST:-${MAIL_SERVER_PORT_3306_TCP_ADDR}};
MAIL_SERVER_DB_PORT=${MAIL_SERVER_DB_PORT:-${MAIL_SERVER_PORT_3306_TCP_PORT:-3306}};
MAIL_SERVER_DB_NAME=${MAIL_SERVER_DB_NAME:-"onlyoffice_mailserver"};
MAIL_SERVER_DB_USER=${MAIL_SERVER_DB_USER:-"mail_admin"};
MAIL_SERVER_DB_PASS=${MAIL_SERVER_DB_PASS:-"Isadmin123"};
2015-07-07 14:13:50 +00:00
2016-02-08 14:06:17 +00:00
if [ ${MAIL_SERVER_DB_HOST} ]; then
MAIL_SERVER_ENABLED=true;
2016-06-22 09:47:40 +00:00
if [ -z "${MAIL_SERVER_API_HOST}" ]; then
if [[ $MAIL_SERVER_DB_HOST =~ $VALID_IP_ADDRESS_REGEX ]]; then
MAIL_SERVER_API_HOST=${MAIL_SERVER_DB_HOST};
2018-02-27 15:58:09 +00:00
elif [[ "$(dig +short $MAIL_SERVER_DB_HOST)" =~ $VALID_IP_ADDRESS_REGEX ]]; then
MAIL_SERVER_API_HOST=$(dig +short ${MAIL_SERVER_DB_HOST});
2016-06-22 09:47:40 +00:00
else
echo "MAIL_SERVER_API_HOST is empty";
exit 502;
fi
2017-08-15 13:07:24 +00:00
else
if [[ ! $MAIL_SERVER_API_HOST =~ $VALID_IP_ADDRESS_REGEX ]]; then
MAIL_SERVER_API_HOST=$(dig +short ${MAIL_SERVER_API_HOST});
fi
if [ -z "${MAIL_SERVER_API_HOST}" ]; then
echo "MAIL_SERVER_API_HOST not correct";
exit 502;
fi
2016-06-22 09:47:40 +00:00
fi
2015-04-17 15:16:43 +00:00
fi
2016-06-22 09:47:40 +00:00
2018-02-27 15:58:09 +00:00
if [ ${MAIL_SERVER_API_HOST} ]; then
if [ ! bash ${SYSCONF_TOOLS_DIR}/wait-for-it.sh ${MAIL_SERVER_API_HOST}:25 --timeout=300 --quiet -s -- echo "MailServer is up" ]; then
unset MAIL_SERVER_DB_HOST;
unset MAIL_SERVER_PORT_3306_TCP_ADDR;
MAIL_SERVER_DB_HOST="";
echo "";
fi
fi
2016-06-22 09:47:40 +00:00
REDIS_SERVER_HOST=${REDIS_SERVER_PORT_3306_TCP_ADDR:-${REDIS_SERVER_HOST}};
REDIS_SERVER_CACHEPORT=${REDIS_SERVER_PORT_3306_TCP_PORT:-${REDIS_SERVER_CACHEPORT:-"6379"}};
REDIS_SERVER_PASSWORD=${REDIS_SERVER_PASSWORD:-""};
REDIS_SERVER_SSL=${REDIS_SERVER_SSL:-"false"};
REDIS_SERVER_DATABASE=${REDIS_SERVER_DATABASE:-"0"};
REDIS_SERVER_CONNECT_TIMEOUT=${REDIS_SERVER_CONNECT_TIMEOUT:-"5000"};
REDIS_SERVER_EXTERNAL=false;
if [ ${REDIS_SERVER_HOST} ]; then
2019-07-02 09:18:29 +00:00
sed 's/<add\s*host=".*"\s*cachePort="[0-9]*"\s*\/>/<add host="'${REDIS_SERVER_HOST}'" cachePort="'${REDIS_SERVER_CACHEPORT}'" \/>/' -i ${APP_ROOT_DIR}/Web.config
sed -E 's/<redisCacheClient\s*ssl="(false|true)"\s*connectTimeout="[0-9]*"\s*database="[0-9]*"\s*password=".*">/<redisCacheClient ssl="'${REDIS_SERVER_SSL}'" connectTimeout="'${REDIS_SERVER_CONNECT_TIMEOUT}'" database="'${REDIS_SERVER_DATABASE}'" password="'${REDIS_SERVER_PASSWORD}'">/' -i ${APP_ROOT_DIR}/Web.config
2016-06-22 09:47:40 +00:00
sed 's/<add\s*host=".*"\s*cachePort="[0-9]*"\s*\/>/<add host="'${REDIS_SERVER_HOST}'" cachePort="'${REDIS_SERVER_CACHEPORT}'" \/>/' -i ${APP_SERVICES_DIR}/TeamLabSvc/TeamLabSvc.exe.config
sed -E 's/<redisCacheClient\s*ssl="(false|true)"\s*connectTimeout="[0-9]*"\s*database="[0-9]*"\s*password=".*">/<redisCacheClient ssl="'${REDIS_SERVER_SSL}'" connectTimeout="'${REDIS_SERVER_CONNECT_TIMEOUT}'" database="'${REDIS_SERVER_DATABASE}'" password="'${REDIS_SERVER_PASSWORD}'">/' -i ${APP_SERVICES_DIR}/TeamLabSvc/TeamLabSvc.exe.config
2016-06-22 09:47:40 +00:00
APP_SERVICES_SOCKET_IO_PATH=${APP_SERVICES_DIR}/ASC.Socket.IO/config/config.json;
jq '.redis |= . + {"host":"'${REDIS_SERVER_HOST}'","port":'${REDIS_SERVER_CACHEPORT}',"db":'${REDIS_SERVER_DATABASE}',"pass":"'${REDIS_SERVER_PASSWORD}'"}'\
${APP_SERVICES_SOCKET_IO_PATH} > ${APP_SERVICES_SOCKET_IO_PATH}.tmp && mv ${APP_SERVICES_SOCKET_IO_PATH}.tmp ${APP_SERVICES_SOCKET_IO_PATH}
2016-06-22 09:47:40 +00:00
REDIS_SERVER_EXTERNAL=true;
fi
2015-04-17 15:16:43 +00:00
2019-07-02 09:18:29 +00:00
if [ "${REDIS_SERVER_EXTERNAL}" == "false" ]; then
if [ -e /etc/redis/redis.conf ]; then
sed -i "s/bind .*/bind 127.0.0.1/g" /etc/redis/redis.conf
fi
2019-01-21 12:34:44 +00:00
fi
2015-07-07 14:13:50 +00:00
mysql_scalar_exec(){
local queryResult="";
2015-04-17 15:16:43 +00:00
2015-07-07 14:13:50 +00:00
if [ "$2" == "opt_ignore_db_name" ]; then
queryResult=$(mysql --silent --skip-column-names -h ${MYSQL_SERVER_HOST} -P ${MYSQL_SERVER_PORT} -u ${MYSQL_SERVER_USER} --password=${MYSQL_SERVER_PASS} -e "$1");
else
queryResult=$(mysql --silent --skip-column-names -h ${MYSQL_SERVER_HOST} -P ${MYSQL_SERVER_PORT} -u ${MYSQL_SERVER_USER} --password=${MYSQL_SERVER_PASS} -D ${MYSQL_SERVER_DB_NAME} -e "$1");
fi
echo $queryResult;
}
2015-04-17 15:16:43 +00:00
2015-07-07 14:13:50 +00:00
mysql_list_exec(){
local queryResult="";
2015-04-17 15:16:43 +00:00
2015-07-07 14:13:50 +00:00
if [ "$2" == "opt_ignore_db_name" ]; then
queryResult=$(mysql --silent --skip-column-names -h ${MYSQL_SERVER_HOST} -P ${MYSQL_SERVER_PORT} -u ${MYSQL_SERVER_USER} --password=${MYSQL_SERVER_PASS} -e "$1");
else
queryResult=$(mysql --silent --skip-column-names -h ${MYSQL_SERVER_HOST} -P ${MYSQL_SERVER_PORT} -u ${MYSQL_SERVER_USER} --password=${MYSQL_SERVER_PASS} -D ${MYSQL_SERVER_DB_NAME} -e "$1");
fi
read -ra vars <<< ${queryResult};
for i in "${vars[0][@]}"; do
echo $i
done
}
mysql_batch_exec(){
mysql --silent --skip-column-names -h ${MYSQL_SERVER_HOST} -P ${MYSQL_SERVER_PORT} -u ${MYSQL_SERVER_USER} --password=${MYSQL_SERVER_PASS} -D ${MYSQL_SERVER_DB_NAME} < "$1";
}
2016-06-22 09:47:40 +00:00
mysql_check_connection() {
if [ ${LOG_DEBUG} ]; then
2017-03-22 15:29:15 +00:00
log_debug "Mysql check connection for ${MYSQL_SERVER_HOST}";
2016-06-22 09:47:40 +00:00
fi
while ! mysqladmin ping -h ${MYSQL_SERVER_HOST} -P ${MYSQL_SERVER_PORT} -u ${MYSQL_SERVER_USER} --password=${MYSQL_SERVER_PASS} --silent; do
sleep 1
done
}
2017-06-13 13:37:16 +00:00
change_connections(){
2019-11-05 11:12:48 +00:00
sed '/'${1}'/s/\(connectionString\s*=\s*\"\)[^\"]*\"/\1Server='${MYSQL_SERVER_HOST}';Port='${MYSQL_SERVER_PORT}';Database='${MYSQL_SERVER_DB_NAME}';User ID='${MYSQL_SERVER_USER}';Password='${MYSQL_SERVER_PASS}';Pooling=true;Character Set=utf8;AutoEnlist=false;SSL Mode=none;AllowPublicKeyRetrieval=true;Connection Timeout=30;Maximum Pool Size=300;\"/' -i ${2}
2015-07-07 14:13:50 +00:00
}
2017-06-13 13:37:16 +00:00
if [ "${MYSQL_SERVER_EXTERNAL}" == "false" ]; then
chown -R mysql:mysql /var/lib/mysql/
chmod -R 755 /var/lib/mysql/
2016-06-22 09:47:40 +00:00
2017-06-13 13:37:16 +00:00
if [ ! -f /var/lib/mysql/ibdata1 ]; then
# cp /etc/mysql/my.cnf /usr/share/mysql/my-default.cnf
mysql_install_db || true
# mysqld --initialize-insecure --user=mysql || true
2017-06-13 13:37:16 +00:00
fi
2016-06-22 09:47:40 +00:00
2015-07-07 14:13:50 +00:00
if [ ${LOG_DEBUG} ]; then
2017-06-13 13:37:16 +00:00
log_debug "Fix docker bug volume mapping for mysql";
2015-07-07 14:13:50 +00:00
fi
2017-06-13 13:37:16 +00:00
myisamchk -q -r /var/lib/mysql/mysql/proc || true
2016-06-22 09:47:40 +00:00
2017-06-13 13:37:16 +00:00
service mysql start
2015-07-07 14:13:50 +00:00
2017-06-14 17:00:58 +00:00
if [ ! -f /var/lib/mysql/mysql_upgrade_info ]; then
if mysqladmin --silent ping -u root | grep -q "mysqld is alive" ; then
mysql_upgrade
else
mysql_upgrade --password=${MYSQL_SERVER_ROOT_PASSWORD};
fi
service mysql restart;
fi
2017-06-13 13:58:31 +00:00
if [ -n "$MYSQL_SERVER_ROOT_PASSWORD" ] && mysqladmin --silent ping -u root | grep -q "mysqld is alive" ; then
2017-06-13 13:37:16 +00:00
mysql <<EOF
SET Password=PASSWORD("$MYSQL_SERVER_ROOT_PASSWORD");
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');
DELETE FROM mysql.user WHERE User='';
DELETE FROM mysql.db WHERE Db='test' OR Db='test_%';
FLUSH PRIVILEGES;
EOF
2015-07-07 14:13:50 +00:00
2017-06-13 13:37:16 +00:00
if [ "$MYSQL_SERVER_USER" != "root" ]; then
mysql "-p${MYSQL_SERVER_ROOT_PASSWORD}" <<EOF
CREATE USER IF NOT EXISTS "$MYSQL_SERVER_USER"@"localhost" IDENTIFIED WITH mysql_native_password BY "$MYSQL_SERVER_PASS";
GRANT ALL PRIVILEGES ON *.* TO "$MYSQL_SERVER_USER"@'localhost';
FLUSH PRIVILEGES;
EOF
2016-06-22 09:47:40 +00:00
2017-06-13 13:37:16 +00:00
fi
2016-06-22 09:47:40 +00:00
fi
2015-07-07 14:13:50 +00:00
DEBIAN_SYS_MAINT_PASS=$(grep "password" /etc/mysql/debian.cnf | head -1 | sed 's/password\s*=\s*//' | tr -d '[[:space:]]');
mysql_scalar_exec "GRANT ALL PRIVILEGES ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY '${DEBIAN_SYS_MAINT_PASS}'"
#mysql_scalar_exec "GRANT ALL PRIVILEGES ON *.* TO 'debian-sys-maint'@'localhost'" "opt_ignore_db_name";
2016-06-22 09:47:40 +00:00
2015-07-07 14:13:50 +00:00
else
2017-06-13 13:37:16 +00:00
service mysql stop
fi
2017-05-30 12:39:51 +00:00
2017-06-13 13:37:16 +00:00
mysql_check_connection;
2017-05-30 12:39:51 +00:00
2017-06-13 13:37:16 +00:00
DB_IS_EXIST=$(mysql_scalar_exec "SELECT SCHEMA_NAME FROM information_schema.SCHEMATA WHERE SCHEMA_NAME='${MYSQL_SERVER_DB_NAME}'" "opt_ignore_db_name");
DB_CHARACTER_SET_NAME=$(mysql_scalar_exec "SELECT DEFAULT_CHARACTER_SET_NAME FROM information_schema.SCHEMATA WHERE SCHEMA_NAME='${MYSQL_SERVER_DB_NAME}'" "opt_ignore_db_name");
DB_COLLATION_NAME=$(mysql_scalar_exec "SELECT DEFAULT_COLLATION_NAME FROM information_schema.SCHEMATA WHERE SCHEMA_NAME='${MYSQL_SERVER_DB_NAME}'" "opt_ignore_db_name");
2017-06-13 13:37:16 +00:00
DB_TABLES_COUNT=$(mysql_scalar_exec "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema='${MYSQL_SERVER_DB_NAME}'");
2016-06-22 09:47:40 +00:00
2017-06-13 13:37:16 +00:00
if [ -z ${DB_IS_EXIST} ]; then
mysql_scalar_exec "CREATE DATABASE ${MYSQL_SERVER_DB_NAME} CHARACTER SET utf8 COLLATE utf8_general_ci" "opt_ignore_db_name";
DB_CHARACTER_SET_NAME="utf8";
DB_COLLATION_NAME="utf8_general_ci";
DB_TABLES_COUNT=0;
2016-06-22 09:47:40 +00:00
2017-06-13 13:37:16 +00:00
fi
2016-06-22 09:47:40 +00:00
2017-06-13 13:37:16 +00:00
if [ ${DB_CHARACTER_SET_NAME} != "utf8" ]; then
mysql_scalar_exec "ALTER DATABASE ${MYSQL_SERVER_DB_NAME} CHARACTER SET utf8 COLLATE utf8_general_ci";
fi
2017-05-30 08:55:40 +00:00
2017-06-13 13:37:16 +00:00
# change mysql config files
2019-02-13 11:45:23 +00:00
change_connections "default" "${APP_ROOT_DIR}/web.connections.config";
change_connections "teamlabsite" "${APP_ROOT_DIR}/web.connections.config";
change_connections "default" "${APP_SERVICES_DIR}/TeamLabSvc/TeamLabSvc.exe.config";
2019-02-13 11:45:23 +00:00
change_connections "default" "${APP_SERVICES_DIR}/MailAggregator/ASC.Mail.Aggregator.CollectionService.exe.config";
change_connections "default" "${APP_SERVICES_DIR}/MailAggregator/ASC.Mail.EmlDownloader.exe.config";
change_connections "default" "${APP_SERVICES_DIR}/MailWatchdog/ASC.Mail.Watchdog.Service.exe.config";
change_connections "default" "${APP_SERVICES_DIR}/MailCleaner/ASC.Mail.StorageCleaner.exe.config";
change_connections "default" "${APP_APISYSTEM_DIR}/Web.config";
sed "s!\"host\":.*,!\"host\":\"${MYSQL_SERVER_HOST}\",!" -i ${APP_SERVICES_DIR}/ASC.UrlShortener/config/config.json
sed "s!\"user\":.*,!\"user\":\"${MYSQL_SERVER_USER}\",!" -i ${APP_SERVICES_DIR}/ASC.UrlShortener/config/config.json
sed "s!\"password\":.*,!\"password\":\"${MYSQL_SERVER_PASS}\",!" -i ${APP_SERVICES_DIR}/ASC.UrlShortener/config/config.json
sed "s!\"database\":.*!\"database\":\"${MYSQL_SERVER_DB_NAME}\"!" -i ${APP_SERVICES_DIR}/ASC.UrlShortener/config/config.json
2019-01-22 11:24:58 +00:00
2018-11-06 12:06:29 +00:00
if [ "${DB_TABLES_COUNT}" -eq "0" ]; then
2019-02-13 11:45:23 +00:00
mysql_batch_exec ${APP_SQL_DIR}/onlyoffice.sql
mysql_batch_exec ${APP_SQL_DIR}/onlyoffice.data.sql
mysql_batch_exec ${APP_SQL_DIR}/onlyoffice.resources.sql
elif [ "${IS_UPDATE}" == "true" ]; then
2018-11-06 12:06:29 +00:00
# update mysql db
2019-02-13 11:45:23 +00:00
for i in $(ls ${APP_SQL_DIR}/onlyoffice.upgrade*); do
2018-11-06 12:06:29 +00:00
mysql_batch_exec ${i};
done
fi
2015-04-17 15:16:43 +00:00
# setup HTTPS
if [ -f "${SSL_CERTIFICATE_PATH}" -a -f "${SSL_KEY_PATH}" ]; then
2017-07-18 12:14:45 +00:00
cp ${NGINX_ROOT_DIR}/includes/onlyoffice-communityserver-common-ssl.conf.template ${SYSCONF_TEMPLATES_DIR}/nginx/prepare-onlyoffice
2015-04-17 15:16:43 +00:00
2015-07-07 14:13:50 +00:00
mkdir -p ${LOG_DIR}/nginx
2015-04-17 15:16:43 +00:00
2015-07-07 14:13:50 +00:00
# configure nginx
2016-06-22 09:47:40 +00:00
sed 's,{{SSL_CERTIFICATE_PATH}},'"${SSL_CERTIFICATE_PATH}"',' -i ${SYSCONF_TEMPLATES_DIR}/nginx/prepare-onlyoffice
sed 's,{{SSL_KEY_PATH}},'"${SSL_KEY_PATH}"',' -i ${SYSCONF_TEMPLATES_DIR}/nginx/prepare-onlyoffice
2015-05-12 09:03:34 +00:00
2015-07-07 14:13:50 +00:00
# if dhparam path is valid, add to the config, otherwise remove the option
2018-02-27 13:41:34 +00:00
if [ ! -f ${SSL_DHPARAM_PATH} ]; then
sudo openssl dhparam -out dhparam.pem 2048
2018-02-27 13:41:34 +00:00
mv dhparam.pem ${SSL_DHPARAM_PATH};
2015-07-07 14:13:50 +00:00
fi
2015-05-12 09:03:34 +00:00
2018-02-27 13:41:34 +00:00
sed 's,{{SSL_DHPARAM_PATH}},'"${SSL_DHPARAM_PATH}"',' -i ${SYSCONF_TEMPLATES_DIR}/nginx/prepare-onlyoffice
if [ ! -f ${SSL_CERTIFICATE_PATH_PFX} ]; then
openssl pkcs12 -export -out ${SSL_CERTIFICATE_PATH_PFX} -inkey ${SSL_KEY_PATH} -in ${SSL_CERTIFICATE_PATH} -password pass:${SSL_CERTIFICATE_PATH_PFX_PWD};
chown onlyoffice:onlyoffice ${SSL_CERTIFICATE_PATH_PFX}
fi
2017-04-28 13:02:23 +00:00
# if dhparam path is valid, add to the config, otherwise remove the option
if [ -r "${SSL_OCSP_CERTIFICATE_PATH}" ]; then
sed 's,{{SSL_OCSP_CERTIFICATE_PATH}},'"${SSL_OCSP_CERTIFICATE_PATH}"',' -i ${SYSCONF_TEMPLATES_DIR}/nginx/prepare-onlyoffice
else
sed '/ssl_stapling/d' -i ${SYSCONF_TEMPLATES_DIR}/nginx/prepare-onlyoffice
sed '/ssl_stapling_verify/d' -i ${SYSCONF_TEMPLATES_DIR}/nginx/prepare-onlyoffice
sed '/ssl_trusted_certificate/d' -i ${SYSCONF_TEMPLATES_DIR}/nginx/prepare-onlyoffice
sed '/resolver/d' -i ${SYSCONF_TEMPLATES_DIR}/nginx/prepare-onlyoffice
sed '/resolver_timeout/d' -i ${SYSCONF_TEMPLATES_DIR}/nginx/prepare-onlyoffice
fi
2016-06-22 09:47:40 +00:00
sed 's,{{SSL_VERIFY_CLIENT}},'"${SSL_VERIFY_CLIENT}"',' -i ${SYSCONF_TEMPLATES_DIR}/nginx/prepare-onlyoffice
2015-04-17 15:16:43 +00:00
2017-04-14 11:44:08 +00:00
if [ -f "${CA_CERTIFICATES_PATH}" ]; then
2016-06-22 09:47:40 +00:00
sed 's,{{CA_CERTIFICATES_PATH}},'"${CA_CERTIFICATES_PATH}"',' -i ${SYSCONF_TEMPLATES_DIR}/nginx/prepare-onlyoffice
2015-07-07 14:13:50 +00:00
else
2016-06-22 09:47:40 +00:00
sed '/{{CA_CERTIFICATES_PATH}}/d' -i ${SYSCONF_TEMPLATES_DIR}/nginx/prepare-onlyoffice
2015-07-07 14:13:50 +00:00
fi
2015-04-17 15:16:43 +00:00
2019-02-13 13:44:43 +00:00
if [ "${APP_HTTPS_HSTS_ENABLED}" == "true" ]; then
2019-02-13 11:45:23 +00:00
sed 's/{{APP_HTTPS_HSTS_MAXAGE}}/'"${APP_HTTPS_HSTS_MAXAGE}"'/' -i ${SYSCONF_TEMPLATES_DIR}/nginx/prepare-onlyoffice
2015-07-07 14:13:50 +00:00
else
2019-02-13 11:45:23 +00:00
sed '/{{APP_HTTPS_HSTS_MAXAGE}}/d' -i ${SYSCONF_TEMPLATES_DIR}/nginx/prepare-onlyoffice
2015-07-07 14:13:50 +00:00
fi
2016-06-22 09:47:40 +00:00
sed '/certificate"/s!\(value\s*=\s*\"\).*\"!\1'${SSL_CERTIFICATE_PATH_PFX}'\"!' -i ${APP_SERVICES_DIR}/TeamLabSvc/TeamLabSvc.exe.config
sed '/certificatePassword/s/\(value\s*=\s*\"\).*\"/\1'${SSL_CERTIFICATE_PATH_PFX_PWD}'\"/' -i ${APP_SERVICES_DIR}/TeamLabSvc/TeamLabSvc.exe.config
sed '/startTls/s/\(value\s*=\s*\"\).*\"/\1optional\"/' -i ${APP_SERVICES_DIR}/TeamLabSvc/TeamLabSvc.exe.config;
2017-06-14 12:15:58 +00:00
2019-02-13 11:45:23 +00:00
sed '/mail\.default-api-scheme/s/\(value\s*=\s*\"\).*\"/\1https\"/' -i ${APP_SERVICES_DIR}/MailAggregator/ASC.Mail.Aggregator.CollectionService.exe.config;
2016-06-22 09:47:40 +00:00
2015-07-07 14:13:50 +00:00
else
2017-07-18 12:14:45 +00:00
cp ${NGINX_ROOT_DIR}/includes/onlyoffice-communityserver-common.conf.template ${SYSCONF_TEMPLATES_DIR}/nginx/prepare-onlyoffice;
2015-07-07 14:13:50 +00:00
fi
2015-04-17 15:16:43 +00:00
2017-03-31 14:08:39 +00:00
sed -i '1d' /etc/logrotate.d/nginx
sed '1 i\/var/log/nginx/*.log /var/log/onlyoffice/nginx.*.log {' -i /etc/logrotate.d/nginx
2019-02-13 13:44:43 +00:00
if [ ${DOCKER_APP_SUBNET} ]; then
sed 's,{{DOCKER_APP_SUBNET}},'"${DOCKER_APP_SUBNET}"',' -i ${SYSCONF_TEMPLATES_DIR}/nginx/prepare-onlyoffice
else
2019-02-13 13:44:43 +00:00
sed '/{{DOCKER_APP_SUBNET}}/d' -i ${SYSCONF_TEMPLATES_DIR}/nginx/prepare-onlyoffice
fi
2019-02-13 13:44:43 +00:00
if [ ${APP_SERVICES_INTERNAL_HOST} ]; then
sed "s/localhost/${APP_SERVICES_INTERNAL_HOST}/" -i ${NGINX_CONF_DIR}/includes/onlyoffice-communityserver-services.conf
2017-02-07 16:46:34 +00:00
fi
if [ "${DOCUMENT_SERVER_JWT_ENABLED}" == "true" ]; then
2019-02-13 11:45:23 +00:00
sed '/files\.docservice\.secret/s!\(value\s*=\s*\"\)[^\"]*\"!\1'${DOCUMENT_SERVER_JWT_SECRET}'\"!' -i ${APP_ROOT_DIR}/web.appsettings.config
sed '/files\.docservice\.secret.header/s!\(value\s*=\s*\"\)[^\"]*\"!\1'${DOCUMENT_SERVER_JWT_HEADER}'\"!' -i ${APP_ROOT_DIR}/web.appsettings.config
sed '/files\.docservice\.secret/s!\(value\s*=\s*\"\)[^\"]*\"!\1'${DOCUMENT_SERVER_JWT_SECRET}'\"!' -i ${APP_SERVICES_DIR}/TeamLabSvc/TeamLabSvc.exe.config
sed '/files\.docservice\.secret.header/s!\(value\s*=\s*\"\)[^\"]*\"!\1'${DOCUMENT_SERVER_JWT_HEADER}'\"!' -i ${APP_SERVICES_DIR}/TeamLabSvc/TeamLabSvc.exe.config
fi
2015-07-07 14:13:50 +00:00
if [ "${DOCUMENT_SERVER_ENABLED}" == "true" ]; then
2017-03-31 14:08:39 +00:00
2017-05-23 11:06:30 +00:00
cp ${NGINX_ROOT_DIR}/includes/onlyoffice-communityserver-proxy-to-documentserver.conf.template ${NGINX_ROOT_DIR}/includes/onlyoffice-communityserver-proxy-to-documentserver.conf;
2017-03-31 14:08:39 +00:00
2017-03-31 18:49:15 +00:00
sed 's,{{DOCUMENT_SERVER_HOST_ADDR}},'"${DOCUMENT_SERVER_PROTOCOL}:\/\/${DOCUMENT_SERVER_HOST}"',' -i ${NGINX_ROOT_DIR}/includes/onlyoffice-communityserver-proxy-to-documentserver.conf;
2015-07-07 14:13:50 +00:00
# change web.appsettings link to editor
2019-02-13 11:45:23 +00:00
sed '/files\.docservice\.url\.internal/s!\(value\s*=\s*\"\)[^\"]*\"!\1'${DOCUMENT_SERVER_PROTOCOL}':\/\/'${DOCUMENT_SERVER_HOST}'\/\"!' -i ${APP_ROOT_DIR}/web.appsettings.config
sed '/files\.docservice\.url\.public/s!\(value\s*=\s*\"\)[^\"]*\"!\1'${DOCUMENT_SERVER_API_URL}'\/\"!' -i ${APP_ROOT_DIR}/web.appsettings.config
2019-08-14 14:51:03 +00:00
sed '/files\.docservice\.url\.internal/s!\(value\s*=\s*\"\)[^\"]*\"!\1'${DOCUMENT_SERVER_PROTOCOL}':\/\/'${DOCUMENT_SERVER_HOST}'\/\"!' -i ${APP_SERVICES_DIR}/TeamLabSvc/TeamLabSvc.exe.config
sed '/files\.docservice\.url\.public/s!\(value\s*=\s*\"\)[^\"]*\"!\1'${DOCUMENT_SERVER_API_URL}'\/\"!' -i ${APP_SERVICES_DIR}/TeamLabSvc/TeamLabSvc.exe.config
2016-02-08 14:06:17 +00:00
2019-02-13 13:44:43 +00:00
if [ -n "${DOCKER_APP_SUBNET}" ] && [ -n "${SERVER_HOST}" ]; then
2019-02-13 11:45:23 +00:00
sed '/files\.docservice\.url\.portal/s!\(value\s*=\s*\"\)[^\"]*\"!\1http:\/\/'${SERVER_HOST}'\"!' -i ${APP_ROOT_DIR}/web.appsettings.config
sed '/files\.docservice\.url\.portal/s!\(value\s*=\s*\"\)[^\"]*\"!\1http:\/\/'${SERVER_HOST}'\"!' -i ${APP_SERVICES_DIR}/TeamLabSvc/TeamLabSvc.exe.config
fi
2015-04-17 15:16:43 +00:00
fi
if [ "${MAIL_SERVER_ENABLED}" == "true" ]; then
2016-06-22 09:47:40 +00:00
timeout=120;
interval=10;
2015-04-17 15:16:43 +00:00
2016-06-22 09:47:40 +00:00
while [ "$interval" -lt "$timeout" ] ; do
interval=$((${interval} + 10));
2015-07-07 14:13:50 +00:00
2016-06-22 09:47:40 +00:00
MAIL_SERVER_HOSTNAME=$(mysql --silent --skip-column-names -h ${MAIL_SERVER_DB_HOST} \
--port=${MAIL_SERVER_DB_PORT} -u "${MAIL_SERVER_DB_USER}" \
--password="${MAIL_SERVER_DB_PASS}" -D "${MAIL_SERVER_DB_NAME}" -e "SELECT Comment from greylisting_whitelist where Source='SenderIP:${MAIL_SERVER_API_HOST}' limit 1;");
if [[ "$?" -eq "0" ]] && [[ -n ${MAIL_SERVER_HOSTNAME} ]]; then
2016-06-22 09:47:40 +00:00
break;
fi
2015-04-17 15:16:43 +00:00
sleep 10;
2016-06-22 09:47:40 +00:00
if [ ${LOG_DEBUG} ]; then
2017-03-22 15:29:15 +00:00
log_debug "Waiting MAIL SERVER DB...";
2016-06-22 09:47:40 +00:00
fi
2015-04-17 15:16:43 +00:00
2016-06-22 09:47:40 +00:00
done
# change web.appsettings
2019-02-13 11:45:23 +00:00
sed -r '/web\.hide-settings/s/,AdministrationPage//' -i ${APP_ROOT_DIR}/web.appsettings.config
2016-06-22 09:47:40 +00:00
MYSQL_MAIL_SERVER_ID=$(mysql_scalar_exec "select id from mail_server_server where mx_record='${MAIL_SERVER_HOSTNAME}' limit 1");
2018-02-27 15:58:09 +00:00
2016-06-22 09:47:40 +00:00
echo "MYSQL mail server id '${MYSQL_MAIL_SERVER_ID}'";
2018-02-27 15:58:09 +00:00
2018-02-28 08:20:56 +00:00
SENDER_IP="";
2018-02-27 15:58:09 +00:00
2019-02-13 13:44:43 +00:00
if check_ip_is_internal $DOCKER_APP_SUBNET $MAIL_SERVER_API_HOST; then
2018-02-27 15:58:09 +00:00
SENDER_IP=$(hostname -i);
elif [[ "$(dig +short myip.opendns.com @resolver1.opendns.com)" =~ $VALID_IP_ADDRESS_REGEX ]]; then
SENDER_IP=$(dig +short myip.opendns.com @resolver1.opendns.com);
log_debug "External ip $SENDER_IP is valid";
2018-02-28 08:20:56 +00:00
else
SENDER_IP=$(hostname -i);
fi
mysql --silent --skip-column-names -h ${MAIL_SERVER_DB_HOST} \
--port=${MAIL_SERVER_DB_PORT} -u "${MAIL_SERVER_DB_USER}" \
--password="${MAIL_SERVER_DB_PASS}" -D "${MAIL_SERVER_DB_NAME}" \
-e "DELETE FROM greylisting_whitelist WHERE Comment='onlyoffice-community-server';";
2016-06-22 09:47:40 +00:00
mysql --silent --skip-column-names -h ${MAIL_SERVER_DB_HOST} \
--port=${MAIL_SERVER_DB_PORT} -u "${MAIL_SERVER_DB_USER}" \
--password="${MAIL_SERVER_DB_PASS}" -D "${MAIL_SERVER_DB_NAME}" \
2018-02-28 08:20:56 +00:00
-e "REPLACE INTO greylisting_whitelist (Source, Comment, Disabled) VALUES (\"SenderIP:${SENDER_IP}\", 'onlyoffice-community-server', 0);";
2018-02-27 15:58:09 +00:00
if [ -z ${MYSQL_MAIL_SERVER_ID} ]; then
2016-06-22 09:47:40 +00:00
mysql_scalar_exec <<END
ALTER TABLE mail_server_server CHANGE COLUMN connection_string connection_string TEXT NOT NULL AFTER mx_record;
ALTER TABLE mail_server_domain ADD COLUMN date_checked DATETIME NOT NULL DEFAULT '1975-01-01 00:00:00' AFTER date_added;
ALTER TABLE mail_server_domain ADD COLUMN is_verified TINYINT(1) UNSIGNED NOT NULL DEFAULT '0' AFTER date_checked;
2015-04-17 15:16:43 +00:00
END
2016-06-22 09:47:40 +00:00
id1=$(mysql_scalar_exec "INSERT INTO mail_mailbox_server (id_provider, type, hostname, port, socket_type, username, authentication, is_user_data) VALUES (-1, 'imap', '${MAIL_SERVER_HOSTNAME}', 143, 'STARTTLS', '%EMAILADDRESS%', '', 0);SELECT LAST_INSERT_ID();");
if [ ${LOG_DEBUG} ]; then
2017-03-22 15:29:15 +00:00
log_debug "id1 is '${id1}'";
2016-06-22 09:47:40 +00:00
fi
2015-04-17 15:16:43 +00:00
2016-06-22 09:47:40 +00:00
id2=$(mysql_scalar_exec "INSERT INTO mail_mailbox_server (id_provider, type, hostname, port, socket_type, username, authentication, is_user_data) VALUES (-1, 'smtp', '${MAIL_SERVER_HOSTNAME}', 587, 'STARTTLS', '%EMAILADDRESS%', '', 0);SELECT LAST_INSERT_ID();");
2015-04-17 15:16:43 +00:00
2016-06-22 09:47:40 +00:00
if [ ${LOG_DEBUG} ]; then
2017-03-22 15:29:15 +00:00
log_debug "id2 is '${id2}'";
2016-06-22 09:47:40 +00:00
fi
else
id1=$(mysql_scalar_exec "select imap_settings_id from mail_server_server where mx_record='${MAIL_SERVER_HOSTNAME}' limit 1");
if [ ${LOG_DEBUG} ]; then
2017-03-22 15:29:15 +00:00
log_debug "id1 is '${id1}'";
2016-06-22 09:47:40 +00:00
fi
id2=$(mysql_scalar_exec "select smtp_settings_id from mail_server_server where mx_record='${MAIL_SERVER_HOSTNAME}' limit 1");
if [ ${LOG_DEBUG} ]; then
2017-03-22 15:29:15 +00:00
log_debug "id2 is '${id2}'";
2016-06-22 09:47:40 +00:00
fi
mysql_scalar_exec <<END
UPDATE mail_mailbox_server SET id_provider=-1, hostname='${MAIL_SERVER_HOSTNAME}' WHERE id in (${id1}, ${id2});
END
fi
2015-04-17 15:16:43 +00:00
2016-06-22 09:47:40 +00:00
interval=10;
while [ "$interval" -lt "$timeout" ] ; do
interval=$((${interval} + 10));
MYSQL_MAIL_SERVER_ACCESS_TOKEN=$(mysql --silent --skip-column-names -h ${MAIL_SERVER_DB_HOST} \
--port=${MAIL_SERVER_DB_PORT} -u "${MAIL_SERVER_DB_USER}" \
--password="${MAIL_SERVER_DB_PASS}" -D "${MAIL_SERVER_DB_NAME}" \
-e "select access_token from api_keys where id=1;");
if [[ "$?" -eq "0" ]] && [[ -n ${MYSQL_MAIL_SERVER_ACCESS_TOKEN} ]]; then
2016-06-22 09:47:40 +00:00
break;
fi
sleep 10;
done
if [ ${LOG_DEBUG} ]; then
echo "mysql mail server access token is ${MYSQL_MAIL_SERVER_ACCESS_TOKEN}";
fi
2015-04-17 15:16:43 +00:00
MAIL_SERVER_API_HOST_ADDRESS=${MAIL_SERVER_API_HOST};
if [[ $MAIL_SERVER_DB_HOST == "onlyoffice-mail-server" ]]; then
2016-08-10 13:18:51 +00:00
MAIL_SERVER_API_HOST_ADDRESS=${MAIL_SERVER_DB_HOST};
fi
2016-06-22 09:47:40 +00:00
mysql_scalar_exec "DELETE FROM mail_server_server;"
mysql_scalar_exec "INSERT INTO mail_server_server (mx_record, connection_string, server_type, smtp_settings_id, imap_settings_id) \
VALUES ('${MAIL_SERVER_HOSTNAME}', '{\"DbConnection\" : \"Server=${MAIL_SERVER_DB_HOST};Database=${MAIL_SERVER_DB_NAME};User ID=${MAIL_SERVER_DB_USER};Password=${MAIL_SERVER_DB_PASS};Pooling=True;Character Set=utf8;AutoEnlist=false;SSL Mode=None;Connection Timeout=30;Maximum Pool Size=300;\", \"Api\":{\"Protocol\":\"http\", \"Server\":\"${MAIL_SERVER_API_HOST_ADDRESS}\", \"Port\":\"${MAIL_SERVER_API_PORT}\", \"Version\":\"v1\",\"Token\":\"${MYSQL_MAIL_SERVER_ACCESS_TOKEN}\"}}', 2, '${id2}', '${id1}');"
2015-04-17 15:16:43 +00:00
fi
2016-02-08 14:06:17 +00:00
if [ "${CONTROL_PANEL_ENABLED}" == "true" ]; then
2017-05-23 11:06:30 +00:00
cp ${NGINX_ROOT_DIR}/includes/onlyoffice-communityserver-proxy-to-controlpanel.conf.template ${NGINX_ROOT_DIR}/includes/onlyoffice-communityserver-proxy-to-controlpanel.conf;
2017-04-14 12:08:01 +00:00
sed 's,{{CONTROL_PANEL_HOST_ADDR}},'"${CONTROL_PANEL_PORT_80_TCP_ADDR}"',' -i ${NGINX_ROOT_DIR}/includes/onlyoffice-communityserver-proxy-to-controlpanel.conf;
2017-05-15 11:26:40 +00:00
sed 's,{{SERVICE_SSO_AUTH_HOST_ADDR}},'"${SERVICE_SSO_AUTH_HOST_ADDR}"',' -i ${NGINX_ROOT_DIR}/includes/onlyoffice-communityserver-proxy-to-controlpanel.conf;
2016-02-08 14:06:17 +00:00
# change web.appsettings link to controlpanel
2019-02-13 11:45:23 +00:00
sed '/web\.controlpanel\.url/s/\(value\s*=\s*\"\)[^\"]*\"/\1\/controlpanel\/\"/' -i ${APP_ROOT_DIR}/web.appsettings.config;
sed '/web\.controlpanel\.url/s/\(value\s*=\s*\"\)[^\"]*\"/\1\/controlpanel\/\"/' -i ${APP_SERVICES_DIR}/TeamLabSvc/TeamLabSvc.exe.config;
2016-02-08 14:06:17 +00:00
fi
2019-02-13 11:45:23 +00:00
if [ "${APP_MODE}" == "SERVER" ]; then
2016-06-22 09:47:40 +00:00
2019-02-13 11:45:23 +00:00
for serverID in $(seq 1 ${APP_MONOSERVE_COUNT});
2016-06-22 09:47:40 +00:00
do
2018-03-02 09:50:11 +00:00
if [ $serverID == 1 ]; then
2019-02-13 11:45:23 +00:00
sed '/web.warmup.count/s/value=\"\S*\"/value=\"'${APP_MONOSERVE_COUNT}'\"/g' -i ${APP_ROOT_DIR}/web.appsettings.config
sed '/web.warmup.domain/s/value=\"\S*\"/value=\"localhost\/warmup\"/g' -i ${APP_ROOT_DIR}/web.appsettings.config
sed "/core.machinekey/s!value=\".*\"!value=\"${APP_CORE_MACHINEKEY}\"!g" -i ${APP_ROOT_DIR}/web.appsettings.config
sed "/core.machinekey/s!value=\".*\"!value=\"${APP_CORE_MACHINEKEY}\"!g" -i ${APP_APISYSTEM_DIR}/Web.config
sed "/core.machinekey/s!value=\".*\"!value=\"${APP_CORE_MACHINEKEY}\"!g" -i ${APP_SERVICES_DIR}/TeamLabSvc/TeamLabSvc.exe.config
2019-02-13 11:45:23 +00:00
sed "/core\.machinekey/s!\"core\.machinekey\".*!\"core\.machinekey\":\"${APP_CORE_MACHINEKEY}\",!" -i ${APP_SERVICES_DIR}/ASC.Socket.IO/config/config.json
sed "s!machine_key\s*=.*!machine_key = ${APP_CORE_MACHINEKEY}!g" -i ${APP_SERVICES_DIR}/TeamLabSvc/radicale.config
sed "s!\"core\.machinekey\":.*,!\"core\.machinekey\":\"${APP_CORE_MACHINEKEY}\",!g" -i ${APP_SERVICES_DIR}/ASC.UrlShortener/config/config.json
sed "/core.machinekey/s!value=\".*\"!value=\"${APP_CORE_MACHINEKEY}\"!g" -i ${APP_SERVICES_DIR}/MailAggregator/ASC.Mail.EmlDownloader.exe.config
sed "/core.machinekey/s!value=\".*\"!value=\"${APP_CORE_MACHINEKEY}\"!g" -i ${APP_SERVICES_DIR}/MailAggregator/ASC.Mail.Aggregator.CollectionService.exe.config
sed "/core.machinekey/s!value=\".*\"!value=\"${APP_CORE_MACHINEKEY}\"!g" -i ${APP_SERVICES_DIR}/MailCleaner/ASC.Mail.StorageCleaner.exe.config
2017-09-19 13:36:16 +00:00
2018-03-02 09:50:11 +00:00
continue;
fi
2016-06-22 09:47:40 +00:00
2019-02-13 11:45:23 +00:00
rm -rfd ${APP_ROOT_DIR}$serverID;
2016-12-13 14:49:07 +00:00
2019-02-13 11:45:23 +00:00
if [ -d "${APP_ROOT_DIR}$serverID" ]; then
rm -rfd ${APP_ROOT_DIR}$serverID;
2016-12-13 14:49:07 +00:00
fi
2019-02-13 11:45:23 +00:00
cp -R ${APP_ROOT_DIR} ${APP_ROOT_DIR}$serverID;
chown -R onlyoffice:onlyoffice ${APP_ROOT_DIR}$serverID;
2016-06-22 09:47:40 +00:00
2019-02-13 11:45:23 +00:00
sed '/web.warmup.count/s/value=\"\S*\"/value=\"'${APP_MONOSERVE_COUNT}'\"/g' -i ${APP_ROOT_DIR}$serverID/web.appsettings.config
sed '/web.warmup.domain/s/value=\"\S*\"/value=\"localhost\/warmup'${serverID}'\"/g' -i ${APP_ROOT_DIR}$serverID/web.appsettings.config
2016-06-22 09:47:40 +00:00
2019-02-13 11:45:23 +00:00
sed '/conversionPattern\s*value=\"%folder{LogDirectory}/s!web!web'${serverID}'!g' -i ${APP_ROOT_DIR}$serverID/web.log4net.config;
2017-03-23 14:17:14 +00:00
2019-02-13 11:45:23 +00:00
cp ${APP_MONOSERVER_PATH} ${APP_MONOSERVER_PATH}$serverID;
2016-06-22 09:47:40 +00:00
2019-02-13 11:45:23 +00:00
sed 's/monoserve/monoserve'${serverID}'/g' -i ${APP_MONOSERVER_PATH}$serverID;
sed 's/onlyoffice\.socket/onlyoffice'${serverID}'\.socket/g' -i ${APP_MONOSERVER_PATH}$serverID;
sed 's/\/etc\/hyperfastcgi\/onlyoffice/\/etc\/hyperfastcgi\/onlyoffice'${serverID}'/g' -i ${APP_MONOSERVER_PATH}$serverID;
2016-06-22 09:47:40 +00:00
2019-02-13 11:45:23 +00:00
cp ${APP_HYPERFASTCGI_PATH} ${APP_HYPERFASTCGI_PATH}$serverID;
2016-06-22 09:47:40 +00:00
2019-02-13 11:45:23 +00:00
sed 's,'${APP_ROOT_DIR}','${APP_ROOT_DIR}''${serverID}',g' -i ${APP_HYPERFASTCGI_PATH}$serverID;
sed 's/onlyoffice\.socket/onlyoffice'${serverID}'\.socket/g' -i ${APP_HYPERFASTCGI_PATH}$serverID;
2016-06-22 09:47:40 +00:00
2019-02-13 11:45:23 +00:00
cp ${APP_GOD_DIR}/monoserve.god ${APP_GOD_DIR}/monoserve$serverID.god;
sed 's/onlyoffice\.socket/onlyoffice'${serverID}'\.socket/g' -i ${APP_GOD_DIR}/monoserve$serverID.god;
sed 's/monoserve/monoserve'${serverID}'/g' -i ${APP_GOD_DIR}/monoserve$serverID.god;
2016-02-08 14:06:17 +00:00
2016-06-22 09:47:40 +00:00
sed '/onlyoffice'${serverID}'.socket/d' -i ${SYSCONF_TEMPLATES_DIR}/nginx/prepare-onlyoffice;
sed '/onlyoffice'${serverID}'.socket/d' -i ${NGINX_CONF_DIR}/onlyoffice;
grepLine="$(sed -n 's/onlyoffice\.socket/onlyoffice'${serverID}'.socket/p' ${SYSCONF_TEMPLATES_DIR}/nginx/prepare-onlyoffice | tr -d '\t' | tr -d '\n')";
sed '/fastcgi_backend\s*{/ a '"${grepLine}"'' -i ${SYSCONF_TEMPLATES_DIR}/nginx/prepare-onlyoffice;
sed '/fastcgi_backend\s*{/ a '"${grepLine}"'' -i ${NGINX_CONF_DIR}/onlyoffice;
2019-02-13 11:45:23 +00:00
sed '/monoserve'${serverID}'/d' -i ${APP_CRON_PATH};
sed '/warmup'${serverID}'/d' -i ${APP_CRON_PATH};
2016-06-22 09:47:40 +00:00
2019-02-13 11:45:23 +00:00
grepLine="$(sed -n 's/monoserve\s*restart/monoserve'${serverID}' restart/p' ${APP_CRON_PATH} | tr -d '\t' | tr -d '\n')";
2016-06-22 09:47:40 +00:00
2019-02-13 11:45:23 +00:00
sed '$a\'"${grepLine}"'' -i ${APP_CRON_PATH};
2016-06-22 09:47:40 +00:00
2019-02-13 11:45:23 +00:00
grepLine="$(sed -n 's/warmup1/warmup'${serverID}'/p' ${APP_CRON_PATH} | tr -d '\t' | tr -d '\n')";
2016-06-22 09:47:40 +00:00
2019-02-13 11:45:23 +00:00
sed '$a\'"${grepLine}"'' -i ${APP_CRON_PATH};
2016-06-22 09:47:40 +00:00
done
fi
2019-02-13 11:45:23 +00:00
sed 's/{{APP_NIGNX_KEEPLIVE}}/'$((32*${APP_MONOSERVE_COUNT}))'/g' -i ${SYSCONF_TEMPLATES_DIR}/nginx/prepare-onlyoffice;
2016-02-08 14:06:17 +00:00
bash -c 'echo "onlyoffice ALL=(ALL) NOPASSWD: /usr/sbin/service" | (EDITOR="tee -a" visudo)'
2016-06-22 09:47:40 +00:00
2017-03-22 12:07:15 +00:00
ping_onlyoffice() {
timeout=6;
interval=1;
while [ "$interval" -le "$timeout" ] ; do
interval=$((${interval} + 1));
status_code=$(curl -LI $1 -o /dev/null -w '%{http_code}\n' -s);
2017-03-29 11:11:07 +00:00
echo "ping monoserve get status_code: $status_code";
2017-03-22 12:07:15 +00:00
2017-03-29 11:11:07 +00:00
if [ "$status_code" == "200" ]; then
wget -qO- --retry-connrefused --no-check-certificate --waitretry=15 -t 0 --continue $1 &> /dev/null;
2016-06-22 09:47:40 +00:00
break;
fi
2017-03-22 12:07:15 +00:00
2017-03-29 11:11:07 +00:00
sleep 5s;
2016-06-22 09:47:40 +00:00
done
2017-03-22 12:07:15 +00:00
2016-06-22 09:47:40 +00:00
}
if [ "${REDIS_SERVER_EXTERNAL}" == "true" ]; then
2019-02-13 11:45:23 +00:00
rm -f "${APP_GOD_DIR}"/redis.god;
sed '/redis-cli/d' -i ${APP_CRON_PATH}
2017-02-17 13:16:25 +00:00
2017-02-17 11:13:14 +00:00
service redis-server stop
2016-06-22 09:47:40 +00:00
else
service redis-server start
2019-07-02 09:18:29 +00:00
redis-cli config set save ""
redis-cli config rewrite
redis-cli flushall
2016-06-22 09:47:40 +00:00
fi
if [ "${MYSQL_SERVER_EXTERNAL}" == "true" ]; then
2019-02-13 11:45:23 +00:00
rm -f "${APP_GOD_DIR}"/mysql.god;
2016-06-22 09:47:40 +00:00
fi
2018-01-19 15:52:22 +00:00
2019-02-13 11:45:23 +00:00
if [ "${APP_MODE}" == "SERVICES" ]; then
2016-06-22 09:47:40 +00:00
service nginx stop
2017-02-17 11:13:14 +00:00
2019-02-13 11:45:23 +00:00
rm -f "${APP_GOD_DIR}"/nginx.god;
rm -f "${APP_GOD_DIR}"/monoserveApiSystem.god;
2017-02-17 11:13:14 +00:00
service monoserveApiSystem stop
rm -f /etc/init.d/monoserveApiSystem
2019-02-13 11:45:23 +00:00
for serverID in $(seq 1 ${APP_MONOSERVE_COUNT});
2017-02-17 11:13:14 +00:00
do
index=$serverID;
if [ $index == 1 ]; then
index="";
fi
2019-02-13 11:45:23 +00:00
rm -f "${APP_GOD_DIR}"/monoserve$index.god;
2017-02-17 11:13:14 +00:00
service monoserve$index stop
rm -f /etc/init.d/monoserve$index
done
2019-02-13 11:45:23 +00:00
sed '/monoserve/d' -i ${APP_CRON_PATH}
sed '/warmup/d' -i ${APP_CRON_PATH}
2017-02-17 11:13:14 +00:00
2016-06-22 09:47:40 +00:00
else
if [ ${LOG_DEBUG} ]; then
echo "fix docker bug volume mapping for onlyoffice";
fi
2017-02-17 11:13:14 +00:00
chown -R onlyoffice:onlyoffice /var/log/onlyoffice
2019-02-13 11:45:23 +00:00
chown -R onlyoffice:onlyoffice ${APP_DIR}/DocumentServerData
2017-02-17 11:13:14 +00:00
2019-02-13 11:45:23 +00:00
if [ "$(ls -alhd ${APP_DATA_DIR} | awk '{ print $3 }')" != "onlyoffice" ]; then
chown -R onlyoffice:onlyoffice ${APP_DATA_DIR}
2017-01-09 12:27:18 +00:00
fi
2018-04-04 09:25:50 +00:00
mkdir -p "$LOG_DIR/Index"
2019-02-13 11:45:23 +00:00
mkdir -p "$APP_DATA_DIR/Index"
2018-04-04 09:25:50 +00:00
2019-02-13 11:45:23 +00:00
if [ "$(ls -alhd $APP_DATA_DIR/Index | awk '{ print $3 }')" != "elasticsearch" ]; then
chown -R elasticsearch:elasticsearch "$APP_DATA_DIR/Index"
2018-04-04 09:25:50 +00:00
fi
chown -R elasticsearch:elasticsearch "$LOG_DIR/Index"
2019-02-13 11:45:23 +00:00
for serverID in $(seq 1 ${APP_MONOSERVE_COUNT});
2016-06-22 09:47:40 +00:00
do
index=$serverID;
if [ $index == 1 ]; then
index="";
fi
2017-02-17 11:13:14 +00:00
2017-03-22 13:06:45 +00:00
service monoserve$index restart
2017-03-29 11:11:07 +00:00
2017-09-18 12:12:39 +00:00
# (ping_onlyoffice "http://localhost/warmup${index}/auth.aspx") &
2016-06-22 09:47:40 +00:00
done
2017-03-22 13:06:45 +00:00
service monoserveApiSystem restart
2016-06-22 09:47:40 +00:00
fi
2019-02-13 13:44:43 +00:00
if [ "${APP_SERVICES_EXTERNAL}" == "true" ]; then
2019-02-13 11:45:23 +00:00
rm -f "${APP_GOD_DIR}"/onlyoffice.god;
rm -f "${APP_GOD_DIR}"/elasticsearch.god;
rm -f "${APP_GOD_DIR}"/redis.god;
rm -f "${APP_GOD_DIR}"/mail.god;
2017-02-17 11:13:14 +00:00
2018-04-04 14:09:54 +00:00
service onlyofficeRadicale stop
2018-11-06 12:06:29 +00:00
service onlyofficeSocketIO stop
service onlyofficeThumb stop
2017-02-17 11:13:14 +00:00
service onlyofficeFeed stop
service onlyofficeIndex stop
service onlyofficeJabber stop
service onlyofficeMailAggregator stop
service onlyofficeMailWatchdog stop
2018-11-06 12:06:29 +00:00
service onlyofficeMailCleaner stop
2017-02-17 11:13:14 +00:00
service onlyofficeNotify stop
service onlyofficeBackup stop
service onlyofficeStorageMigrate stop
2019-01-23 12:15:15 +00:00
service onlyofficeUrlShortener stop
2018-04-02 11:09:09 +00:00
service elasticsearch stop
2017-02-17 11:13:14 +00:00
2018-04-02 12:21:16 +00:00
rm -f /etc/init.d/elasticsearch
2018-04-04 14:09:54 +00:00
rm -f /etc/init.d/onlyofficeRadicale
2018-11-06 12:06:29 +00:00
rm -f /etc/init.d/onlyofficeSocketIO
rm -f /etc/init.d/onlyofficeThumb
2017-02-17 11:13:14 +00:00
rm -f /etc/init.d/onlyofficeFeed
rm -f /etc/init.d/onlyofficeIndex
rm -f /etc/init.d/onlyofficeJabber
rm -f /etc/init.d/onlyofficeMailAggregator
rm -f /etc/init.d/onlyofficeMailWatchdog
2018-11-06 12:06:29 +00:00
rm -f /etc/init.d/onlyofficeMailCleaner
2017-02-17 11:13:14 +00:00
rm -f /etc/init.d/onlyofficeNotify
rm -f /etc/init.d/onlyofficeBackup
rm -f /etc/init.d/onlyofficeStorageMigrate
2019-01-23 12:15:15 +00:00
rm -f /etc/init.d/onlyofficeUrlShortener
2017-02-17 11:13:14 +00:00
2019-02-13 11:45:23 +00:00
sed '/onlyoffice/d' -i ${APP_CRON_PATH}
2017-02-17 11:13:14 +00:00
2016-06-22 09:47:40 +00:00
else
2017-02-17 13:16:25 +00:00
2018-04-04 14:09:54 +00:00
service onlyofficeRadicale restart
2017-10-05 14:19:41 +00:00
service onlyofficeSocketIO restart
2018-09-11 09:17:07 +00:00
service onlyofficeThumb restart
2017-03-22 13:06:45 +00:00
service onlyofficeFeed restart
service onlyofficeIndex restart
service onlyofficeJabber restart
service onlyofficeMailAggregator restart
service onlyofficeMailWatchdog restart
2018-11-06 12:06:29 +00:00
service onlyofficeMailCleaner restart
2017-03-22 13:06:45 +00:00
service onlyofficeNotify restart
service onlyofficeBackup restart
service onlyofficeStorageMigrate restart
2019-01-23 12:15:15 +00:00
service onlyofficeUrlShortener restart
2018-04-02 11:09:09 +00:00
service elasticsearch restart
2016-06-22 09:47:40 +00:00
fi
2017-02-17 11:13:14 +00:00
service god restart
2016-02-08 14:06:17 +00:00
2019-02-13 11:45:23 +00:00
if [ "${APP_MODE}" == "SERVER" ]; then
2016-06-22 09:47:40 +00:00
2017-09-18 12:12:39 +00:00
# wait
2016-06-22 09:47:40 +00:00
2017-03-22 12:07:15 +00:00
mv ${SYSCONF_TEMPLATES_DIR}/nginx/prepare-onlyoffice ${NGINX_CONF_DIR}/onlyoffice
2016-06-22 09:47:40 +00:00
2017-03-22 12:07:15 +00:00
service nginx reload
2016-06-22 09:47:40 +00:00
2017-03-22 15:29:15 +00:00
log_debug "reload nginx config";
log_debug "FINISH";
2016-06-22 09:47:40 +00:00
2017-03-22 12:07:15 +00:00
fi
2016-06-22 09:47:40 +00:00
2017-02-17 13:16:25 +00:00
PID=$(ps auxf | grep cron | grep -v grep | awk '{print $2}')
2017-03-22 15:29:15 +00:00
2017-03-29 11:11:07 +00:00
if [ -n "$PID" ]; then
kill -9 $PID
2017-03-22 15:29:15 +00:00
fi
2017-02-17 13:16:25 +00:00
2017-04-18 14:24:59 +00:00
cron
2017-02-17 11:13:14 +00:00
2017-02-14 14:18:32 +00:00
if [ "${DOCKER_ENABLED}" == "true" ]; then
exec tail -f /dev/null
fi