#!/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