#!/bin/bash
SERVER_HOST=${SERVER_HOST:-""};
ONLYOFFICE_DIR="/var/www/onlyoffice"
ONLYOFFICE_DATA_DIR="${ONLYOFFICE_DIR}/Data"
ONLYOFFICE_SERVICES_DIR="${ONLYOFFICE_DIR}/Services"
ONLYOFFICE_SQL_DIR="${ONLYOFFICE_DIR}/Sql"
ONLYOFFICE_ROOT_DIR="${ONLYOFFICE_DIR}/WebStudio"
ONLYOFFICE_ROOT_DIR2="${ONLYOFFICE_DIR}/WebStudio2"
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"
ONLYOFFICE_CRON_DIR="/etc/cron.d"
ONLYOFFICE_CRON_PATH="/etc/cron.d/onlyoffice"
DOCKER_ONLYOFFICE_SUBNET=$(ip -o -f inet addr show | awk '/scope global/ {print $4}');
DOCKER_ENABLED=${DOCKER_ENABLED:-true};
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
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)};
SERVICE_SSO_AUTH_HOST_ADDR=${SERVICE_SSO_AUTH_HOST_ADDR:-${CONTROL_PANEL_PORT_80_TCP_ADDR}};
if [ ! -d "$NGINX_CONF_DIR" ]; then
mkdir -p $NGINX_CONF_DIR;
fi
if [ ! -d "${ONLYOFFICE_DIR}/DocumentServerData" ]; then
mkdir -p ${ONLYOFFICE_DIR}/DocumentServerData;
fi
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="DEBUG";
LOG_DIR="/var/log/onlyoffice/"
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}
SSL_OCSP_CERTIFICATE_PATH=${SSL_OCSP_CERTIFICATE_PATH:-${SSL_CERTIFICATES_DIR}/stapling.trusted.crt}
CA_CERTIFICATES_PATH=${CA_CERTIFICATES_PATH:-${SSL_CERTIFICATES_DIR}/ca.crt}
ONLYOFFICE_HTTPS_HSTS_ENABLED=${ONLYOFFICE_HTTPS_HSTS_ENABLED:-true}
ONLYOFFICE_HTTPS_HSTS_MAXAGE=${ONLYOFFICE_HTTPS_HSTS_MAXAG:-63072000}
SYSCONF_TEMPLATES_DIR="${DIR}/config"
SYSCONF_TOOLS_DIR="${DIR}/assets/tools"
ONLYOFFICE_SERVICES_INTERNAL_HOST=${ONLYOFFICE_SERVICES_PORT_9865_TCP_ADDR:-${ONLYOFFICE_SERVICES_INTERNAL_HOST}}
ONLYOFFICE_SERVICES_EXTERNAL=false
DOCUMENT_SERVER_ENABLED=false
DOCUMENT_SERVER_HOST=${DOCUMENT_SERVER_HOST:-""};
DOCUMENT_SERVER_PROTOCOL=${DOCUMENT_SERVER_PROTOCOL:-"http"};
DOCUMENT_SERVER_API_URL="\/web-apps\/apps\/api\/documents\/api\.js";
CONTROL_PANEL_ENABLED=false
MAIL_SERVER_ENABLED=false
EXTERNAL_IP=${EXTERNAL_IP:-$(dig +short myip.opendns.com @resolver1.opendns.com)};
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:-""}
MYSQL_SERVER_EXTERNAL=${MYSQL_SERVER_EXTERNAL:-false};
mkdir -p "${SSL_CERTIFICATES_DIR}/.well-known/acme-challenge"
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
}
log_debug () {
echo "onlyoffice: [Debug] $1"
}
check_partnerdata
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
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
cp ${SYSCONF_TEMPLATES_DIR}/nginx/onlyoffice-init ${NGINX_CONF_DIR}/onlyoffice
rm -f ${NGINX_ROOT_DIR}/conf.d/*.conf
rsyslogd
service nginx restart
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 '///' -i ${ONLYOFFICE_ROOT_DIR}/Web.config
sed 's///' -i ${ONLYOFFICE_ROOT_DIR}/Web.config
sed 's///' -i ${ONLYOFFICE_SERVICES_DIR}/TeamLabSvc/TeamLabSvc.exe.Config;
sed 's///' -i ${ONLYOFFICE_SERVICES_DIR}/TeamLabSvc/TeamLabSvc.exe.Config;
REDIS_SERVER_EXTERNAL=true;
fi
mysql_scalar_exec(){
local queryResult="";
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;
}
mysql_list_exec(){
local queryResult="";
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";
}
mysql_check_connection() {
if [ ${LOG_DEBUG} ]; then
log_debug "Mysql check connection for ${MYSQL_SERVER_HOST}";
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
}
change_connections(){
if [ ${LOG_DEBUG} ]; then
log_debug "Change connections for ${1} then ${2}";
fi
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
mysql_check_connection;
# 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
DB_TABLES_COUNT=$(mysql_scalar_exec "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema='${MYSQL_SERVER_DB_NAME}'");
if [ ${LOG_DEBUG} ]; then
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}";
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";
DB_CHARACTER_SET_NAME="utf8";
DB_COLLATION_NAME="utf8_general_ci";
DB_TABLES_COUNT=0;
if [ ${LOG_DEBUG} ]; then
log_debug "Create db ${MYSQL_SERVER_DB_NAME}";
fi
fi
if [ ${DB_CHARACTER_SET_NAME} != "utf8" ]; then
mysql_scalar_exec "ALTER DATABASE ${MYSQL_SERVER_DB_NAME} CHARACTER SET utf8 COLLATE utf8_general_ci";
if [ ${LOG_DEBUG} ]; then
log_debug "Change characted set name ${MYSQL_SERVER_DB_NAME}";
fi
fi
if [ "${DB_TABLES_COUNT}" -eq "0" ]; then
if [ ${LOG_DEBUG} ]; then
log_debug "Run filling tables...";
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
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";
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;
service mysql stop
else
# create db if not exist
if [ ! -f /var/lib/mysql/ibdata1 ]; then
cp /etc/mysql/my.cnf /usr/share/mysql/my-default.cnf
mysql_install_db || true
service mysql start
echo "CREATE DATABASE onlyoffice CHARACTER SET utf8 COLLATE utf8_general_ci" | mysql;
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
chown -R mysql:mysql /var/lib/mysql/
if [ ${LOG_DEBUG} ]; then
log_debug "Fix docker bug volume mapping for mysql";
fi
myisamchk -q -r /var/lib/mysql/mysql/proc || true
service mysql start
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}'"
fi
fi
# update mysql db
for i in $(ls ${ONLYOFFICE_SQL_DIR}/onlyoffice.upgrade*); do
mysql_batch_exec ${i};
done
# setup HTTPS
if [ -f "${SSL_CERTIFICATE_PATH}" -a -f "${SSL_KEY_PATH}" ]; then
cp ${SYSCONF_TEMPLATES_DIR}/nginx/onlyoffice-ssl ${SYSCONF_TEMPLATES_DIR}/nginx/prepare-onlyoffice
mkdir -p ${LOG_DIR}/nginx
# configure nginx
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
# if dhparam path is valid, add to the config, otherwise remove the option
if [ -r "${SSL_DHPARAM_PATH}" ]; then
sed 's,{{SSL_DHPARAM_PATH}},'"${SSL_DHPARAM_PATH}"',' -i ${SYSCONF_TEMPLATES_DIR}/nginx/prepare-onlyoffice
else
sed '/ssl_dhparam {{SSL_DHPARAM_PATH}};/d' -i ${SYSCONF_TEMPLATES_DIR}/nginx/prepare-onlyoffice
fi
# 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
sed 's,{{SSL_VERIFY_CLIENT}},'"${SSL_VERIFY_CLIENT}"',' -i ${SYSCONF_TEMPLATES_DIR}/nginx/prepare-onlyoffice
if [ -f "${CA_CERTIFICATES_PATH}" ]; then
sed 's,{{CA_CERTIFICATES_PATH}},'"${CA_CERTIFICATES_PATH}"',' -i ${SYSCONF_TEMPLATES_DIR}/nginx/prepare-onlyoffice
else
sed '/{{CA_CERTIFICATES_PATH}}/d' -i ${SYSCONF_TEMPLATES_DIR}/nginx/prepare-onlyoffice
fi
if [ "${ONLYOFFICE_HTTPS_HSTS_ENABLED}" == "true" ]; then
sed 's/{{ONLYOFFICE_HTTPS_HSTS_MAXAGE}}/'"${ONLYOFFICE_HTTPS_HSTS_MAXAGE}"'/' -i ${SYSCONF_TEMPLATES_DIR}/nginx/prepare-onlyoffice
else
sed '/{{ONLYOFFICE_HTTPS_HSTS_MAXAGE}}/d' -i ${SYSCONF_TEMPLATES_DIR}/nginx/prepare-onlyoffice
fi
sed '/mail\.default-api-scheme/s/\(value\s*=\s*\"\).*\"/\1https\"/' -i ${ONLYOFFICE_SERVICES_DIR}/MailAggregator/ASC.Mail.Aggregator.CollectionService.exe.config;
else
cp ${SYSCONF_TEMPLATES_DIR}/nginx/onlyoffice ${SYSCONF_TEMPLATES_DIR}/nginx/prepare-onlyoffice;
fi
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
if [ ${ONLYOFFICE_SERVICES_INTERNAL_HOST} ]; then
sed "s/localhost/${ONLYOFFICE_SERVICES_INTERNAL_HOST}/" -i ${NGINX_CONF_DIR}/includes/onlyoffice-communityserver-services.conf
fi
echo "Start=No" >> /etc/init.d/sphinxsearch
if ! grep -q "name=\"textindex\"" ${ONLYOFFICE_SERVICES_DIR}/TeamLabSvc/TeamLabSvc.exe.Config; then
sed -i 's/.*/' ${ONLYOFFICE_SERVICES_DIR}/TeamLabSvc/TeamLabSvc.exe.Config;
fi
if [ "${DOCUMENT_SERVER_ENABLED}" == "true" ]; then
cp ${NGINX_ROOT_DIR}/includes/onlyoffice-communityserver-proxy-to-documentserver.conf.template ${NGINX_ROOT_DIR}/includes/onlyoffice-communityserver-proxy-to-documentserver.conf;
sed 's,{{DOCUMENT_SERVER_HOST_ADDR}},'"${DOCUMENT_SERVER_PROTOCOL}:\/\/${DOCUMENT_SERVER_HOST}"',' -i ${NGINX_ROOT_DIR}/includes/onlyoffice-communityserver-proxy-to-documentserver.conf;
# change web.appsettings link to editor
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
if ! grep -q "files\.docservice\.url\.command" ${ONLYOFFICE_ROOT_DIR}/web.appsettings.config; then
sed '/files\.docservice\.url\.storage/a /' -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
fi
if [ "${MAIL_SERVER_ENABLED}" == "true" ]; then
if [ "${DOCKER_ENABLED}" == "true" ]; then
while ! bash ${SYSCONF_TOOLS_DIR}/wait-for-it.sh ${MAIL_SERVER_DB_HOST}:25 --quiet -s -- echo "MailServer is up"; do
sleep 1
done
fi
timeout=120;
interval=10;
while [ "$interval" -lt "$timeout" ] ; do
interval=$((${interval} + 10));
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
sleep 10;
if [ ${LOG_DEBUG} ]; then
log_debug "Waiting MAIL SERVER DB...";
fi
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
log_debug "External ip $EXTERNAL_IP is valid";
else
log_debug "External ip $EXTERNAL_IP is not valid";
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 < /dev/null;
break;
fi
sleep 5s;
done
}
if [ "${REDIS_SERVER_EXTERNAL}" == "true" ]; then
rm -f "${ONLYOFFICE_GOD_DIR}"/redis.god;
sed '/redis-cli/d' -i ${ONLYOFFICE_CRON_PATH}
service redis-server stop
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
rm -f "${ONLYOFFICE_GOD_DIR}"/nginx.god;
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}
else
if [ ${LOG_DEBUG} ]; then
echo "fix docker bug volume mapping for onlyoffice";
fi
chown -R onlyoffice:onlyoffice /var/log/onlyoffice
chown -R onlyoffice:onlyoffice ${ONLYOFFICE_DIR}/DocumentServerData
if [ "$(ls -alhd ${ONLYOFFICE_DATA_DIR} | awk '{ print $3 }')" != "onlyoffice" ]; then
chown -R onlyoffice:onlyoffice ${ONLYOFFICE_DATA_DIR}
fi
for serverID in $(seq 1 ${ONLYOFFICE_MONOSERVE_COUNT});
do
index=$serverID;
if [ $index == 1 ]; then
index="";
fi
service monoserve$index restart
(ping_onlyoffice "http://localhost/warmup${index}/auth.aspx") &
done
service monoserveApiSystem restart
fi
if [ "${ONLYOFFICE_SERVICES_EXTERNAL}" == "true" ]; then
rm -f "${ONLYOFFICE_GOD_DIR}"/onlyoffice.god;
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
service onlyofficeSignalR stop
service onlyofficeAutoreply stop
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
rm -f /etc/init.d/onlyofficeSignalR
rm -f /etc/init.d/onlyofficeAutoreply
sed '/onlyoffice/d' -i ${ONLYOFFICE_CRON_PATH}
else
service onlyofficeFeed restart
service onlyofficeIndex restart
service onlyofficeJabber restart
service onlyofficeMailAggregator restart
service onlyofficeMailWatchdog restart
service onlyofficeNotify restart
service onlyofficeBackup restart
service onlyofficeSignalR stop
service onlyofficeAutoreply stop
service onlyofficeHealthCheck stop
fi
service god restart
if [ "${ONLYOFFICE_MODE}" == "SERVER" ]; then
wait
mv ${SYSCONF_TEMPLATES_DIR}/nginx/prepare-onlyoffice ${NGINX_CONF_DIR}/onlyoffice
service nginx reload
log_debug "reload nginx config";
log_debug "FINISH";
fi
PID=$(ps auxf | grep cron | grep -v grep | awk '{print $2}')
if [ -n "$PID" ]; then
kill -9 $PID
fi
if [ ! -f ${ONLYOFFICE_CRON_DIR}/letsencrypt ]; then
cp ${SYSCONF_TEMPLATES_DIR}/cron/letsencrypt ${ONLYOFFICE_CRON_DIR}/letsencrypt;
fi
cron
if [ "${DOCKER_ENABLED}" == "true" ]; then
exec tail -f /dev/null
fi