OnlyOfficeCS-docker/run-community-server.sh

842 lines
35 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-01-20 10:59:29 +00:00
SERVER_HOST=${SERVER_HOST:-""};
2015-04-17 15:16:43 +00:00
ONLYOFFICE_DIR="/var/www/onlyoffice"
ONLYOFFICE_DATA_DIR="${ONLYOFFICE_DIR}/Data"
2015-07-07 14:13:50 +00:00
ONLYOFFICE_SERVICES_DIR="${ONLYOFFICE_DIR}/Services"
ONLYOFFICE_SQL_DIR="${ONLYOFFICE_DIR}/Sql"
2015-04-17 15:16:43 +00:00
ONLYOFFICE_ROOT_DIR="${ONLYOFFICE_DIR}/WebStudio"
2016-02-08 14:06:17 +00:00
ONLYOFFICE_ROOT_DIR2="${ONLYOFFICE_DIR}/WebStudio2"
2016-06-22 09:47:40 +00:00
ONLYOFFICE_APISYSTEM_DIR="/var/www/onlyoffice/ApiSystem"
ONLYOFFICE_MONOSERVER_PATH="/etc/init.d/monoserve";
ONLYOFFICE_HYPERFASTCGI_PATH="/etc/hyperfastcgi/onlyoffice";
ONLYOFFICE_MONOSERVE_COUNT=${ONLYOFFICE_MONOSERVE_COUNT:-2};
ONLYOFFICE_MODE=${ONLYOFFICE_MODE:-"SERVER"};
ONLYOFFICE_GOD_DIR="/etc/god/conf.d"
2017-04-18 14:24:59 +00:00
ONLYOFFICE_CRON_DIR="/etc/cron.d"
2016-06-22 09:47:40 +00:00
ONLYOFFICE_CRON_PATH="/etc/cron.d/onlyoffice"
2017-04-26 16:36:00 +00:00
DOCKER_ONLYOFFICE_SUBNET=$(ip -o -f inet addr show | awk '/scope global/ {print $4}');
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"
NGINX_WORKER_PROCESSES=${NGINX_WORKER_PROCESSES:-$(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}};
2017-03-22 12:31:10 +00:00
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
2017-03-23 14:17:14 +00:00
if [ ! -d "${ONLYOFFICE_DIR}/DocumentServerData" ]; then
mkdir -p ${ONLYOFFICE_DIR}/DocumentServerData;
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])$";
2015-07-07 14:13:50 +00:00
LOG_DEBUG="DEBUG";
LOG_DIR="/var/log/onlyoffice/"
2015-04-17 15:16:43 +00:00
ONLYOFFICE_HTTPS=${ONLYOFFICE_HTTPS:-false}
SSL_CERTIFICATES_DIR="${ONLYOFFICE_DATA_DIR}/certs"
SSL_CERTIFICATE_PATH=${SSL_CERTIFICATE_PATH:-${SSL_CERTIFICATES_DIR}/onlyoffice.crt}
SSL_KEY_PATH=${SSL_KEY_PATH:-${SSL_CERTIFICATES_DIR}/onlyoffice.key}
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}
2015-04-17 15:16:43 +00:00
ONLYOFFICE_HTTPS_HSTS_ENABLED=${ONLYOFFICE_HTTPS_HSTS_ENABLED:-true}
2017-04-28 13:02:23 +00:00
ONLYOFFICE_HTTPS_HSTS_MAXAGE=${ONLYOFFICE_HTTPS_HSTS_MAXAG:-63072000}
2017-03-29 09:14:42 +00:00
SYSCONF_TEMPLATES_DIR="${DIR}/config"
SYSCONF_TOOLS_DIR="${DIR}/assets/tools"
2016-02-08 14:06:17 +00:00
2016-06-22 09:47:40 +00:00
ONLYOFFICE_SERVICES_INTERNAL_HOST=${ONLYOFFICE_SERVICES_PORT_9865_TCP_ADDR:-${ONLYOFFICE_SERVICES_INTERNAL_HOST}}
ONLYOFFICE_SERVICES_EXTERNAL=false
2015-04-17 15:16:43 +00:00
DOCUMENT_SERVER_ENABLED=false
2016-02-08 14:06:17 +00:00
DOCUMENT_SERVER_HOST=${DOCUMENT_SERVER_HOST:-""};
DOCUMENT_SERVER_PROTOCOL=${DOCUMENT_SERVER_PROTOCOL:-"http"};
2017-04-17 11:21:32 +00:00
DOCUMENT_SERVER_API_URL="\/web-apps\/apps\/api\/documents\/api\.js";
2016-02-08 14:06:17 +00:00
CONTROL_PANEL_ENABLED=false
2015-04-17 15:16:43 +00:00
MAIL_SERVER_ENABLED=false
EXTERNAL_IP=${EXTERNAL_IP:-$(dig +short myip.opendns.com @resolver1.opendns.com)};
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"}
MYSQL_SERVER_PASS=${MYSQL_SERVER_PASS:-""}
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
2016-12-13 14:38:26 +00:00
check_partnerdata(){
PARTNER_DATA_FILE="${ONLYOFFICE_DATA_DIR}/json-data.txt";
if [ -f ${PARTNER_DATA_FILE} ]; then
for serverID in $(seq 1 ${ONLYOFFICE_MONOSERVE_COUNT});
do
index=$serverID;
if [ $index == 1 ]; then
index="";
fi
cp ${PARTNER_DATA_FILE} ${ONLYOFFICE_ROOT_DIR}${index}/App_Data/static/partnerdata/
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]+$'
if ! [[ ${ONLYOFFICE_MONOSERVE_COUNT} =~ $re ]] ; then
echo "error: ONLYOFFICE_MONOSERVE_COUNT not a number";
ONLYOFFICE_MONOSERVE_COUNT=2;
fi
# if [ "${ONLYOFFICE_MONOSERVE_COUNT}" -eq "2" ] ; then
# KERNER_CPU=$(nproc);
# if [ "${KERNER_CPU}" -gt "${ONLYOFFICE_MONOSERVE_COUNT}" ]; then
# ONLYOFFICE_MONOSERVE_COUNT=${KERNER_CPU};
# fi
# fi
cp ${SYSCONF_TEMPLATES_DIR}/nginx/nginx.conf ${NGINX_ROOT_DIR}/nginx.conf
2017-02-14 14:56:09 +00:00
sed 's/^worker_processes.*/'"worker_processes ${NGINX_WORKER_PROCESSES};"'/' -i ${NGINX_ROOT_DIR}/nginx.conf
sed 's/worker_connections.*/'"worker_connections ${NGINX_WORKER_CONNECTIONS};"'/' -i ${NGINX_ROOT_DIR}/nginx.conf
2016-06-22 09:47:40 +00:00
cp ${SYSCONF_TEMPLATES_DIR}/nginx/onlyoffice-init ${NGINX_CONF_DIR}/onlyoffice
2017-02-14 14:56:09 +00:00
rm -f ${NGINX_ROOT_DIR}/conf.d/*.conf
2016-06-22 09:47:40 +00:00
2017-03-22 12:31:10 +00:00
rsyslogd
2017-01-09 12:27:18 +00:00
service nginx restart
2016-06-22 09:47:40 +00:00
if [ ${ONLYOFFICE_SERVICES_INTERNAL_HOST} ]; then
ONLYOFFICE_SERVICES_EXTERNAL=true;
sed '/endpoint/s/http:\/\/localhost:9865\/teamlabJabber/http:\/\/'${ONLYOFFICE_SERVICES_INTERNAL_HOST}':9865\/teamlabJabber/' -i ${ONLYOFFICE_ROOT_DIR}/Web.config
sed '/endpoint/s/http:\/\/localhost:9888\/teamlabSignalr/http:\/\/'${ONLYOFFICE_SERVICES_INTERNAL_HOST}':9888\/teamlabSignalr/' -i ${ONLYOFFICE_ROOT_DIR}/Web.config
sed '/endpoint/s/http:\/\/localhost:9866\/teamlabSearcher/http:\/\/'${ONLYOFFICE_SERVICES_INTERNAL_HOST}':9866\/teamlabSearcher/' -i ${ONLYOFFICE_ROOT_DIR}/Web.config
sed '/endpoint/s/http:\/\/localhost:9871\/teamlabNotify/http:\/\/'${ONLYOFFICE_SERVICES_INTERNAL_HOST}':9871\/teamlabNotify/' -i ${ONLYOFFICE_ROOT_DIR}/Web.config
sed '/endpoint/s/http:\/\/localhost:9882\/teamlabBackup/http:\/\/'${ONLYOFFICE_SERVICES_INTERNAL_HOST}':9882\/teamlabBackup/' -i ${ONLYOFFICE_ROOT_DIR}/Web.config
sed '/BoshPath/s!\(value\s*=\s*\"\)[^\"]*\"!\1http:\/\/'${ONLYOFFICE_SERVICES_INTERNAL_HOST}':5280\/http-poll\/\"!' -i ${ONLYOFFICE_ROOT_DIR}/web.appsettings.config
sed '/<endpoint/s!\"netTcpBinding\"!\"basicHttpBinding\"!' -i ${ONLYOFFICE_ROOT_DIR}/Web.config;
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
while ! bash ${SYSCONF_TOOLS_DIR}/wait-for-it.sh ${ONLYOFFICE_SERVICES_INTERNAL_HOST}:9871 --quiet -s -- echo "ONLYOFFICE SERVICES is up"; do
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}${DOCUMENT_SERVER_API_URL}";
elif [ ${DOCUMENT_SERVER_PORT_80_TCP_ADDR} ]; then
DOCUMENT_SERVER_ENABLED=true;
DOCUMENT_SERVER_HOST=${DOCUMENT_SERVER_PORT_80_TCP_ADDR};
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};
elif [[ $EXTERNAL_IP =~ $VALID_IP_ADDRESS_REGEX ]]; then
MAIL_SERVER_API_HOST=${EXTERNAL_IP};
else
echo "MAIL_SERVER_API_HOST is empty";
exit 502;
fi
fi
2015-04-17 15:16:43 +00:00
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
sed 's/<add\s*host="localhost"\s*cachePort="6379"\s*\/>/<add host="'${REDIS_SERVER_HOST}'" cachePort="'${REDIS_SERVER_CACHEPORT}'" \/>/' -i ${ONLYOFFICE_ROOT_DIR}/Web.config
sed 's/<redisCacheClient\s*ssl="false"\s*connectTimeout="5000"\s*database="0"\s*password="">/<redisCacheClient ssl="'${REDIS_SERVER_SSL}'" connectTimeout="'${REDIS_SERVER_CONNECT_TIMEOUT}'" database="'${REDIS_SERVER_DATABASE}'" password="'${REDIS_SERVER_PASSWORD}'">/' -i ${ONLYOFFICE_ROOT_DIR}/Web.config
sed 's/<add\s*host="localhost"\s*cachePort="6379"\s*\/>/<add host="'${REDIS_SERVER_HOST}'" cachePort="'${REDIS_SERVER_CACHEPORT}'" \/>/' -i ${ONLYOFFICE_SERVICES_DIR}/TeamLabSvc/TeamLabSvc.exe.Config;
sed 's/<redisCacheClient\s*ssl="false"\s*connectTimeout="5000"\s*database="0"\s*password="">/<redisCacheClient ssl="'${REDIS_SERVER_SSL}'" connectTimeout="'${REDIS_SERVER_CONNECT_TIMEOUT}'" database="'${REDIS_SERVER_DATABASE}'" password="'${REDIS_SERVER_PASSWORD}'">/' -i ${ONLYOFFICE_SERVICES_DIR}/TeamLabSvc/TeamLabSvc.exe.Config;
REDIS_SERVER_EXTERNAL=true;
fi
2015-04-17 15:16:43 +00:00
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
}
2015-07-07 14:13:50 +00:00
change_connections(){
if [ ${LOG_DEBUG} ]; then
2017-03-22 15:29:15 +00:00
log_debug "Change connections for ${1} then ${2}";
2015-07-07 14:13:50 +00:00
fi
2016-06-22 09:47:40 +00:00
2015-07-07 14:13:50 +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\"/' -i ${2}
}
if [ "${MYSQL_SERVER_EXTERNAL}" == "true" ]; then
2016-06-22 09:47:40 +00:00
mysql_check_connection;
2015-07-07 14:13:50 +00:00
# create db if not exist
# DB_INFO=$(mysql_list_exec "SELECT SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME FROM information_schema.SCHEMATA WHERE SCHEMA_NAME='${MYSQL_SERVER_DB_NAME}'" "opt_ignore_db_name");
# echo ${DB_INFO};
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_list_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_list_exec "SELECT DEFAULT_COLLATION_NAME FROM information_schema.SCHEMATA WHERE SCHEMA_NAME='${MYSQL_SERVER_DB_NAME}'" "opt_ignore_db_name");
# if [ ${DB_INFO[@]} -nq 0 ]; then
# DB_IS_EXIST="1";
# DB_CHARACTER_SET_NAME=${#DB_INFO[1]};
# DB_COLLATION_NAME=${#DB_INFO[2]};
# fi
2016-06-22 09:47:40 +00:00
DB_TABLES_COUNT=$(mysql_scalar_exec "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema='${MYSQL_SERVER_DB_NAME}'");
2015-07-07 14:13:50 +00:00
if [ ${LOG_DEBUG} ]; then
2017-03-22 15:29:15 +00:00
log_debug "DB_IS_EXIST: ${DB_IS_EXIST}";
log_debug "DB_CHARACTER_SET_NAME: ${DB_CHARACTER_SET_NAME}";
log_debug "DB_COLLATION_NAME: ${DB_COLLATION_NAME}";
log_debug "DB_TABLES_COUNT: ${DB_TABLES_COUNT}";
2015-07-07 14:13:50 +00:00
fi
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";
2017-02-07 16:46:34 +00:00
DB_CHARACTER_SET_NAME="utf8";
2015-07-07 14:13:50 +00:00
DB_COLLATION_NAME="utf8_general_ci";
2017-02-07 16:46:34 +00:00
DB_TABLES_COUNT=0;
2016-06-22 09:47:40 +00:00
if [ ${LOG_DEBUG} ]; then
2017-03-22 15:29:15 +00:00
log_debug "Create db ${MYSQL_SERVER_DB_NAME}";
2016-06-22 09:47:40 +00:00
fi
2015-07-07 14:13:50 +00:00
fi
if [ ${DB_CHARACTER_SET_NAME} != "utf8" ]; then
mysql_scalar_exec "ALTER DATABASE ${MYSQL_SERVER_DB_NAME} CHARACTER SET utf8 COLLATE utf8_general_ci";
2016-06-22 09:47:40 +00:00
if [ ${LOG_DEBUG} ]; then
2017-03-22 15:29:15 +00:00
log_debug "Change characted set name ${MYSQL_SERVER_DB_NAME}";
2016-06-22 09:47:40 +00:00
fi
fi
2015-07-07 14:13:50 +00:00
if [ "${DB_TABLES_COUNT}" -eq "0" ]; then
2016-06-22 09:47:40 +00:00
if [ ${LOG_DEBUG} ]; then
2017-03-22 15:29:15 +00:00
log_debug "Run filling tables...";
2016-06-22 09:47:40 +00:00
fi
mysql_batch_exec ${ONLYOFFICE_SQL_DIR}/onlyoffice.sql
mysql_batch_exec ${ONLYOFFICE_SQL_DIR}/onlyoffice.data.sql
mysql_batch_exec ${ONLYOFFICE_SQL_DIR}/onlyoffice.resources.sql
2015-07-07 14:13:50 +00:00
fi
# change mysql config files
change_connections "default" "${ONLYOFFICE_ROOT_DIR}/web.connections.config";
change_connections "teamlabsite" "${ONLYOFFICE_ROOT_DIR}/web.connections.config";
change_connections "default" "${ONLYOFFICE_SERVICES_DIR}/TeamLabSvc/TeamLabSvc.exe.Config";
change_connections "default" "${ONLYOFFICE_SERVICES_DIR}/MailAggregator/ASC.Mail.Aggregator.CollectionService.exe.config";
change_connections "default" "${ONLYOFFICE_SERVICES_DIR}/MailAggregator/ASC.Mail.EmlDownloader.exe.config";
change_connections "default" "${ONLYOFFICE_SERVICES_DIR}/MailWatchdog/ASC.Mail.Watchdog.Service.exe.config";
2016-06-22 09:47:40 +00:00
change_connections "core" "${ONLYOFFICE_APISYSTEM_DIR}/Web.config";
sed 's!\(sql_host\s*=\s*\)\S*!\1'${MYSQL_SERVER_HOST}'!' -i ${ONLYOFFICE_SERVICES_DIR}/TeamLabSvc/sphinx-min.conf.in;
sed 's!\(sql_pass\s*=\s*\)\S*!\1'${MYSQL_SERVER_PASS}'!' -i ${ONLYOFFICE_SERVICES_DIR}/TeamLabSvc/sphinx-min.conf.in;
sed 's!\(sql_user\s*=\s*\)\S*!\1'${MYSQL_SERVER_USER}'!' -i ${ONLYOFFICE_SERVICES_DIR}/TeamLabSvc/sphinx-min.conf.in;
sed 's!\(sql_db\s*=\s*\)\S*!\1'${MYSQL_SERVER_DB_NAME}'!' -i ${ONLYOFFICE_SERVICES_DIR}/TeamLabSvc/sphinx-min.conf.in;
sed 's!\(sql_port\s*=\s*\)\S*!\1'${MYSQL_SERVER_PORT}'!' -i ${ONLYOFFICE_SERVICES_DIR}/TeamLabSvc/sphinx-min.conf.in;
2017-02-17 11:13:14 +00:00
service mysql stop
2015-07-07 14:13:50 +00:00
else
# create db if not exist
if [ ! -f /var/lib/mysql/ibdata1 ]; then
2016-07-28 08:39:16 +00:00
cp /etc/mysql/my.cnf /usr/share/mysql/my-default.cnf
mysql_install_db || true
2015-07-07 14:13:50 +00:00
service mysql start
echo "CREATE DATABASE onlyoffice CHARACTER SET utf8 COLLATE utf8_general_ci" | mysql;
2016-06-22 09:47:40 +00:00
2015-07-07 14:13:50 +00:00
mysql -D "onlyoffice" < ${ONLYOFFICE_SQL_DIR}/onlyoffice.sql
mysql -D "onlyoffice" < ${ONLYOFFICE_SQL_DIR}/onlyoffice.data.sql
mysql -D "onlyoffice" < ${ONLYOFFICE_SQL_DIR}/onlyoffice.resources.sql
else
2016-06-22 09:47:40 +00:00
chown -R mysql:mysql /var/lib/mysql/
if [ ${LOG_DEBUG} ]; then
2017-03-22 15:29:15 +00:00
log_debug "Fix docker bug volume mapping for mysql";
2016-06-22 09:47:40 +00:00
fi
2016-02-08 14:06:17 +00:00
myisamchk -q -r /var/lib/mysql/mysql/proc || true
2015-07-07 14:13:50 +00:00
service mysql start
2016-06-22 09:47:40 +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}'"
2015-07-07 14:13:50 +00:00
fi
fi
# update mysql db
for i in $(ls ${ONLYOFFICE_SQL_DIR}/onlyoffice.upgrade*); do
mysql_batch_exec ${i};
done
2015-04-17 15:16:43 +00:00
# setup HTTPS
if [ -f "${SSL_CERTIFICATE_PATH}" -a -f "${SSL_KEY_PATH}" ]; then
2016-06-22 09:47:40 +00:00
cp ${SYSCONF_TEMPLATES_DIR}/nginx/onlyoffice-ssl ${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
if [ -r "${SSL_DHPARAM_PATH}" ]; then
2016-06-22 09:47:40 +00:00
sed 's,{{SSL_DHPARAM_PATH}},'"${SSL_DHPARAM_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 '/ssl_dhparam {{SSL_DHPARAM_PATH}};/d' -i ${SYSCONF_TEMPLATES_DIR}/nginx/prepare-onlyoffice
2015-07-07 14:13:50 +00:00
fi
2015-05-12 09:03:34 +00:00
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
2015-07-07 14:13:50 +00:00
if [ "${ONLYOFFICE_HTTPS_HSTS_ENABLED}" == "true" ]; then
2016-06-22 09:47:40 +00:00
sed 's/{{ONLYOFFICE_HTTPS_HSTS_MAXAGE}}/'"${ONLYOFFICE_HTTPS_HSTS_MAXAGE}"'/' -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 '/{{ONLYOFFICE_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 '/mail\.default-api-scheme/s/\(value\s*=\s*\"\).*\"/\1https\"/' -i ${ONLYOFFICE_SERVICES_DIR}/MailAggregator/ASC.Mail.Aggregator.CollectionService.exe.config;
2015-07-07 14:13:50 +00:00
else
2016-06-22 09:47:40 +00:00
cp ${SYSCONF_TEMPLATES_DIR}/nginx/onlyoffice ${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
if [ ${DOCKER_ONLYOFFICE_SUBNET} ]; then
sed 's,{{DOCKER_ONLYOFFICE_SUBNET}},'"${DOCKER_ONLYOFFICE_SUBNET}"',' -i ${SYSCONF_TEMPLATES_DIR}/nginx/prepare-onlyoffice
else
sed '/{{DOCKER_ONLYOFFICE_SUBNET}}/d' -i ${SYSCONF_TEMPLATES_DIR}/nginx/prepare-onlyoffice
fi
2017-02-07 16:46:34 +00:00
if [ ${ONLYOFFICE_SERVICES_INTERNAL_HOST} ]; then
2017-03-31 17:01:16 +00:00
sed "s/localhost/${ONLYOFFICE_SERVICES_INTERNAL_HOST}/" -i ${NGINX_CONF_DIR}/includes/onlyoffice-communityserver-services.conf
2017-02-07 16:46:34 +00:00
fi
2017-03-31 17:01:16 +00:00
echo "Start=No" >> /etc/init.d/sphinxsearch
2015-04-17 15:16:43 +00:00
2015-07-07 14:13:50 +00:00
if ! grep -q "name=\"textindex\"" ${ONLYOFFICE_SERVICES_DIR}/TeamLabSvc/TeamLabSvc.exe.Config; then
sed -i 's/.*<add\s*name="default"\s*connectionString=.*/&\n<add name="textindex" connectionString="Server=localhost;Port=9306;Pooling=True;Character Set=utf8;AutoEnlist=false" providerName="MySql.Data.MySqlClient"\/>/' ${ONLYOFFICE_SERVICES_DIR}/TeamLabSvc/TeamLabSvc.exe.Config;
fi
2015-04-17 15:16:43 +00:00
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
2016-02-08 14:06:17 +00:00
sed '/files\.docservice\.url\.converter/s!\(value\s*=\s*\"\)[^\"]*\"!\1'${DOCUMENT_SERVER_PROTOCOL}':\/\/'${DOCUMENT_SERVER_HOST}'\/ConvertService\.ashx\"!' -i ${ONLYOFFICE_ROOT_DIR}/web.appsettings.config
sed '/files\.docservice\.url\.api/s!\(value\s*=\s*\"\)[^\"]*\"!\1'${DOCUMENT_SERVER_API_URL}'\"!' -i ${ONLYOFFICE_ROOT_DIR}/web.appsettings.config
sed '/files\.docservice\.url\.storage/s!\(value\s*=\s*\"\)[^\"]*\"!\1'${DOCUMENT_SERVER_PROTOCOL}':\/\/'${DOCUMENT_SERVER_HOST}'\/FileUploader\.ashx\"!' -i ${ONLYOFFICE_ROOT_DIR}/web.appsettings.config
sed '/files\.docservice\.url\.command/s!\(value\s*=\s*\"\)[^\"]*\"!\1'${DOCUMENT_SERVER_PROTOCOL}':\/\/'${DOCUMENT_SERVER_HOST}'\/coauthoring\/CommandService\.ashx\"!' -i ${ONLYOFFICE_ROOT_DIR}/web.appsettings.config
if [ -n "${DOCKER_ONLYOFFICE_SUBNET}" ] && [ -n "${SERVER_HOST}" ]; then
sed '/files\.docservice\.url\.portal/s!\(value\s*=\s*\"\)[^\"]*\"!\1http:\/\/'${SERVER_HOST}'\"!' -i ${ONLYOFFICE_ROOT_DIR}/web.appsettings.config
fi
2016-02-08 14:06:17 +00:00
if ! grep -q "files\.docservice\.url\.command" ${ONLYOFFICE_ROOT_DIR}/web.appsettings.config; then
sed '/files\.docservice\.url\.storage/a <add key=\"files\.docservice\.url\.command\" value=\"'${DOCUMENT_SERVER_PROTOCOL}':\/\/'${DOCUMENT_SERVER_HOST}'\/coauthoring\/CommandService\.ashx\" \/>/' -i ${ONLYOFFICE_ROOT_DIR}/web.appsettings.config
else
sed '/files\.docservice\.url\.command/s!\(value\s*=\s*\"\)[^\"]*\"!\1'${DOCUMENT_SERVER_PROTOCOL}':\/\/'${DOCUMENT_SERVER_HOST}'\/coauthoring\/CommandService\.ashx\"!' -i ${ONLYOFFICE_ROOT_DIR}/web.appsettings.config
fi
2015-04-17 15:16:43 +00:00
fi
if [ "${MAIL_SERVER_ENABLED}" == "true" ]; then
2017-03-28 13:48:09 +00:00
if [ "${DOCKER_ENABLED}" == "true" ]; then
2017-03-29 11:11:07 +00:00
while ! bash ${SYSCONF_TOOLS_DIR}/wait-for-it.sh ${MAIL_SERVER_DB_HOST}:25 --quiet -s -- echo "MailServer is up"; do
2017-03-28 13:48:09 +00:00
sleep 1
done
fi
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" ]]; then
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
sed -r '/web\.hide-settings/s/,AdministrationPage//' -i ${ONLYOFFICE_ROOT_DIR}/web.appsettings.config
MYSQL_MAIL_SERVER_ID=$(mysql_scalar_exec "select id from mail_server_server where mx_record='${MAIL_SERVER_HOSTNAME}' limit 1");
echo "MYSQL mail server id '${MYSQL_MAIL_SERVER_ID}'";
if [ -z ${MYSQL_MAIL_SERVER_ID} ]; then
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])$";
if [[ $EXTERNAL_IP =~ $VALID_IP_ADDRESS_REGEX ]]; then
2017-03-22 15:29:15 +00:00
log_debug "External ip $EXTERNAL_IP is valid";
2016-06-22 09:47:40 +00:00
else
2017-03-22 15:29:15 +00:00
log_debug "External ip $EXTERNAL_IP is not valid";
2016-06-22 09:47:40 +00:00
exit 502;
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 "INSERT INTO greylisting_whitelist (Source, Comment, Disabled) VALUES (\"SenderIP:${EXTERNAL_IP}\", '', 0);";
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
sed '/mail\.certificate-permit/s/\(value *= *\"\).*\"/\1true\"/' -i ${ONLYOFFICE_ROOT_DIR}/web.appsettings.config
sed '/mail\.certificate-permit/s/\(value *= *\"\).*\"/\1true\"/' -i ${ONLYOFFICE_DIR}/Services/MailAggregator/ASC.Mail.Aggregator.CollectionService.exe.config
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" ]]; then
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\", \"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
sed '/web\.controlpanel\.url/s/\(value\s*=\s*\"\)[^\"]*\"/\1\/controlpanel\/\"/' -i ${ONLYOFFICE_ROOT_DIR}/web.appsettings.config;
sed '/web\.controlpanel\.url/s/\(value\s*=\s*\"\)[^\"]*\"/\1\/controlpanel\/\"/' -i ${ONLYOFFICE_SERVICES_DIR}/TeamLabSvc/TeamLabSvc.exe.Config;
2016-02-08 14:06:17 +00:00
fi
2016-06-22 09:47:40 +00:00
if [ "${ONLYOFFICE_MODE}" == "SERVER" ]; then
for serverID in $(seq 1 ${ONLYOFFICE_MONOSERVE_COUNT});
do
if [ $serverID == 1 ]; then
sed '/web.warmup.count/s/value=\"\S*\"/value=\"'${ONLYOFFICE_MONOSERVE_COUNT}'\"/g' -i ${ONLYOFFICE_ROOT_DIR}/web.appsettings.config
sed '/web.warmup.domain/s/value=\"\S*\"/value=\"localhost\/warmup\"/g' -i ${ONLYOFFICE_ROOT_DIR}/web.appsettings.config
continue;
fi
2016-12-13 14:49:07 +00:00
rm -rfd ${ONLYOFFICE_ROOT_DIR}$serverID;
if [ -d "${ONLYOFFICE_ROOT_DIR}$serverID" ]; then
rm -rfd ${ONLYOFFICE_ROOT_DIR}$serverID;
fi
2016-06-22 09:47:40 +00:00
cp -R ${ONLYOFFICE_ROOT_DIR} ${ONLYOFFICE_ROOT_DIR}$serverID;
chown -R onlyoffice:onlyoffice ${ONLYOFFICE_ROOT_DIR}$serverID;
sed '/web.warmup.count/s/value=\"\S*\"/value=\"'${ONLYOFFICE_MONOSERVE_COUNT}'\"/g' -i ${ONLYOFFICE_ROOT_DIR}$serverID/web.appsettings.config
sed '/web.warmup.domain/s/value=\"\S*\"/value=\"localhost\/warmup'${serverID}'\"/g' -i ${ONLYOFFICE_ROOT_DIR}$serverID/web.appsettings.config
2017-03-23 14:57:17 +00:00
sed '/conversionPattern\s*value=\"%folder{LogDirectory}/s!web!web'${serverID}'!g' -i ${ONLYOFFICE_ROOT_DIR}$serverID/web.log4net.config;
2017-03-23 14:17:14 +00:00
2016-06-22 09:47:40 +00:00
cp ${ONLYOFFICE_MONOSERVER_PATH} ${ONLYOFFICE_MONOSERVER_PATH}$serverID;
sed 's/monoserve/monoserve'${serverID}'/g' -i ${ONLYOFFICE_MONOSERVER_PATH}$serverID;
sed 's/onlyoffice\.socket/onlyoffice'${serverID}'\.socket/g' -i ${ONLYOFFICE_MONOSERVER_PATH}$serverID;
sed 's/\/etc\/hyperfastcgi\/onlyoffice/\/etc\/hyperfastcgi\/onlyoffice'${serverID}'/g' -i ${ONLYOFFICE_MONOSERVER_PATH}$serverID;
cp ${ONLYOFFICE_HYPERFASTCGI_PATH} ${ONLYOFFICE_HYPERFASTCGI_PATH}$serverID;
sed 's,'${ONLYOFFICE_ROOT_DIR}','${ONLYOFFICE_ROOT_DIR}''${serverID}',g' -i ${ONLYOFFICE_HYPERFASTCGI_PATH}$serverID;
sed 's/onlyoffice\.socket/onlyoffice'${serverID}'\.socket/g' -i ${ONLYOFFICE_HYPERFASTCGI_PATH}$serverID;
cp ${ONLYOFFICE_GOD_DIR}/monoserve.god ${ONLYOFFICE_GOD_DIR}/monoserve$serverID.god;
sed 's/onlyoffice\.socket/onlyoffice'${serverID}'\.socket/g' -i ${ONLYOFFICE_GOD_DIR}/monoserve$serverID.god;
sed 's/monoserve/monoserve'${serverID}'/g' -i ${ONLYOFFICE_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;
sed '/monoserve'${serverID}'/d' -i ${ONLYOFFICE_CRON_PATH};
sed '/warmup'${serverID}'/d' -i ${ONLYOFFICE_CRON_PATH};
grepLine="$(sed -n 's/monoserve\s*restart/monoserve'${serverID}' restart/p' ${ONLYOFFICE_CRON_PATH} | tr -d '\t' | tr -d '\n')";
sed '$a\'"${grepLine}"'' -i ${ONLYOFFICE_CRON_PATH};
grepLine="$(sed -n 's/warmup1/warmup'${serverID}'/p' ${ONLYOFFICE_CRON_PATH} | tr -d '\t' | tr -d '\n')";
sed '$a\'"${grepLine}"'' -i ${ONLYOFFICE_CRON_PATH};
done
fi
sed 's/{{ONLYOFFICE_NIGNX_KEEPLIVE}}/'$((32*${ONLYOFFICE_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
rm -f "${ONLYOFFICE_GOD_DIR}"/redis.god;
2017-02-17 13:16:25 +00:00
sed '/redis-cli/d' -i ${ONLYOFFICE_CRON_PATH}
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
fi
if [ "${MYSQL_SERVER_EXTERNAL}" == "true" ]; then
rm -f "${ONLYOFFICE_GOD_DIR}"/mysql.god;
fi
if [ "${ONLYOFFICE_MODE}" == "SERVICES" ]; then
service nginx stop
2017-02-17 11:13:14 +00:00
2016-06-22 09:47:40 +00:00
rm -f "${ONLYOFFICE_GOD_DIR}"/nginx.god;
2017-02-17 11:13:14 +00:00
rm -f "${ONLYOFFICE_GOD_DIR}"/monoserveApiSystem.god;
service monoserveApiSystem stop
rm -f /etc/init.d/monoserveApiSystem
for serverID in $(seq 1 ${ONLYOFFICE_MONOSERVE_COUNT});
do
index=$serverID;
if [ $index == 1 ]; then
index="";
fi
rm -f "${ONLYOFFICE_GOD_DIR}"/monoserve$index.god;
service monoserve$index stop
rm -f /etc/init.d/monoserve$index
done
sed '/monoserve/d' -i ${ONLYOFFICE_CRON_PATH}
sed '/warmup/d' -i ${ONLYOFFICE_CRON_PATH}
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
2017-03-22 12:31:10 +00:00
chown -R onlyoffice:onlyoffice ${ONLYOFFICE_DIR}/DocumentServerData
2017-02-17 11:13:14 +00:00
2017-03-22 12:31:10 +00:00
if [ "$(ls -alhd ${ONLYOFFICE_DATA_DIR} | awk '{ print $3 }')" != "onlyoffice" ]; then
chown -R onlyoffice:onlyoffice ${ONLYOFFICE_DATA_DIR}
2017-01-09 12:27:18 +00:00
fi
2016-06-22 09:47:40 +00:00
for serverID in $(seq 1 ${ONLYOFFICE_MONOSERVE_COUNT});
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
(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
if [ "${ONLYOFFICE_SERVICES_EXTERNAL}" == "true" ]; then
rm -f "${ONLYOFFICE_GOD_DIR}"/onlyoffice.god;
2017-02-17 11:13:14 +00:00
rm -f "${ONLYOFFICE_GOD_DIR}"/mail.god;
service onlyofficeFeed stop
service onlyofficeIndex stop
service onlyofficeJabber stop
service onlyofficeMailAggregator stop
service onlyofficeMailWatchdog stop
service onlyofficeNotify stop
service onlyofficeBackup stop
2017-02-17 13:16:25 +00:00
service onlyofficeSignalR stop
service onlyofficeAutoreply stop
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
rm -f /etc/init.d/onlyofficeNotify
rm -f /etc/init.d/onlyofficeBackup
2017-02-17 13:16:25 +00:00
rm -f /etc/init.d/onlyofficeSignalR
rm -f /etc/init.d/onlyofficeAutoreply
2017-02-17 11:13:14 +00:00
sed '/onlyoffice/d' -i ${ONLYOFFICE_CRON_PATH}
2016-06-22 09:47:40 +00:00
else
2017-02-17 13:16:25 +00:00
2017-03-22 13:06:45 +00:00
service onlyofficeFeed restart
service onlyofficeIndex restart
service onlyofficeJabber restart
service onlyofficeMailAggregator restart
service onlyofficeMailWatchdog restart
service onlyofficeNotify restart
service onlyofficeBackup restart
2017-02-17 13:16:25 +00:00
service onlyofficeSignalR stop
service onlyofficeAutoreply stop
service onlyofficeHealthCheck stop
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
2016-06-22 09:47:40 +00:00
if [ "${ONLYOFFICE_MODE}" == "SERVER" ]; then
2017-03-22 12:07:15 +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
if [ ! -f ${ONLYOFFICE_CRON_DIR}/letsencrypt ]; then
cp ${SYSCONF_TEMPLATES_DIR}/cron/letsencrypt ${ONLYOFFICE_CRON_DIR}/letsencrypt;
fi
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