2015-04-17 15:25:41 +00:00
#!/bin/bash
2022-08-31 12:13:30 +03:00
umask 0022
2020-09-10 16:02:20 +02:00
function clean_exit {
2023-10-27 15:08:30 +03:00
if [ ${ ONLYOFFICE_DATA_CONTAINER } = = "false" ] && \
[ ${ ONLYOFFICE_DATA_CONTAINER_HOST } = = "localhost" ] ; then
/usr/bin/documentserver-prepare4shutdown.sh
fi
2020-09-10 16:02:20 +02:00
}
trap clean_exit SIGTERM
2018-04-21 12:14:26 +03:00
# Define '**' behavior explicitly
shopt -s globstar
2019-10-21 11:51:06 +03:00
APP_DIR = " /var/www/ ${ COMPANY_NAME } /documentserver "
DATA_DIR = " /var/www/ ${ COMPANY_NAME } /Data "
2021-04-14 17:10:38 +03:00
PRIVATE_DATA_DIR = " ${ DATA_DIR } /.private "
DS_RELEASE_DATE = " ${ PRIVATE_DATA_DIR } /ds_release_date "
2019-10-21 11:51:06 +03:00
LOG_DIR = " /var/log/ ${ COMPANY_NAME } "
2017-11-10 15:10:52 +03:00
DS_LOG_DIR = " ${ LOG_DIR } /documentserver "
2019-10-21 11:51:06 +03:00
LIB_DIR = " /var/lib/ ${ COMPANY_NAME } "
2019-05-29 16:26:22 +03:00
DS_LIB_DIR = " ${ LIB_DIR } /documentserver "
2019-10-21 11:51:06 +03:00
CONF_DIR = " /etc/ ${ COMPANY_NAME } /documentserver "
2021-04-14 17:10:38 +03:00
IS_UPGRADE = "false"
2015-04-17 15:25:41 +00:00
2016-07-11 11:47:22 +03:00
ONLYOFFICE_DATA_CONTAINER = ${ ONLYOFFICE_DATA_CONTAINER :- false }
2016-07-20 18:56:20 +03:00
ONLYOFFICE_DATA_CONTAINER_HOST = ${ ONLYOFFICE_DATA_CONTAINER_HOST :- localhost }
ONLYOFFICE_DATA_CONTAINER_PORT = 80
2015-04-17 15:25:41 +00:00
2021-04-14 17:10:38 +03:00
RELEASE_DATE = " $( stat -c= "%y" ${ APP_DIR } /server/DocService/docservice | sed -r 's/=([0-9]+)-([0-9]+)-([0-9]+) ([0-9:.+ ]+)/\1-\2-\3/' ) " ;
if [ -f ${ DS_RELEASE_DATE } ] ; then
PREV_RELEASE_DATE = $( head -n 1 ${ DS_RELEASE_DATE } )
else
PREV_RELEASE_DATE = "0"
fi
if [ " ${ RELEASE_DATE } " != " ${ PREV_RELEASE_DATE } " ] ; then
if [ ${ ONLYOFFICE_DATA_CONTAINER } != "true" ] ; then
IS_UPGRADE = "true" ;
fi
fi
2022-07-05 14:56:42 +03:00
SSL_CERTIFICATES_DIR = "/usr/share/ca-certificates/ds"
mkdir -p ${ SSL_CERTIFICATES_DIR }
2022-07-19 15:51:46 +03:00
if [ [ -d ${ DATA_DIR } /certs ] ] && [ -e ${ DATA_DIR } /certs/*.crt ] ; then
cp -f ${ DATA_DIR } /certs/* ${ SSL_CERTIFICATES_DIR }
chmod 644 ${ SSL_CERTIFICATES_DIR } /*.crt ${ SSL_CERTIFICATES_DIR } /*.pem
chmod 400 ${ SSL_CERTIFICATES_DIR } /*.key
fi
2022-07-05 14:56:42 +03:00
2022-04-25 17:25:19 +03:00
if [ [ -z $SSL_CERTIFICATE_PATH ] ] && [ [ -f ${ SSL_CERTIFICATES_DIR } /${ COMPANY_NAME } .crt ] ] ; then
SSL_CERTIFICATE_PATH = ${ SSL_CERTIFICATES_DIR } /${ COMPANY_NAME } .crt
2020-04-29 19:48:33 +03:00
else
SSL_CERTIFICATE_PATH = ${ SSL_CERTIFICATE_PATH :- ${ SSL_CERTIFICATES_DIR } /tls.crt }
fi
2022-04-25 17:25:19 +03:00
if [ [ -z $SSL_KEY_PATH ] ] && [ [ -f ${ SSL_CERTIFICATES_DIR } /${ COMPANY_NAME } .key ] ] ; then
SSL_KEY_PATH = ${ SSL_CERTIFICATES_DIR } /${ COMPANY_NAME } .key
2020-04-29 19:48:33 +03:00
else
SSL_KEY_PATH = ${ SSL_KEY_PATH :- ${ SSL_CERTIFICATES_DIR } /tls.key }
fi
2016-06-30 12:41:52 +03:00
CA_CERTIFICATES_PATH = ${ CA_CERTIFICATES_PATH :- ${ SSL_CERTIFICATES_DIR } /ca-certificates.pem }
2015-04-17 15:25:41 +00:00
SSL_DHPARAM_PATH = ${ SSL_DHPARAM_PATH :- ${ SSL_CERTIFICATES_DIR } /dhparam.pem }
SSL_VERIFY_CLIENT = ${ SSL_VERIFY_CLIENT :- off }
2019-12-26 13:13:13 +03:00
USE_UNAUTHORIZED_STORAGE = ${ USE_UNAUTHORIZED_STORAGE :- false }
2015-04-17 15:25:41 +00:00
ONLYOFFICE_HTTPS_HSTS_ENABLED = ${ ONLYOFFICE_HTTPS_HSTS_ENABLED :- true }
2017-05-12 16:51:22 +03:00
ONLYOFFICE_HTTPS_HSTS_MAXAGE = ${ ONLYOFFICE_HTTPS_HSTS_MAXAGE :- 31536000 }
2019-10-21 11:51:06 +03:00
SYSCONF_TEMPLATES_DIR = "/app/ds/setup/config"
2015-04-17 15:25:41 +00:00
2017-01-24 19:34:20 +03:00
NGINX_CONFD_PATH = "/etc/nginx/conf.d" ;
2017-11-29 12:52:57 +03:00
NGINX_ONLYOFFICE_PATH = " ${ CONF_DIR } /nginx "
2018-10-16 12:22:18 +03:00
NGINX_ONLYOFFICE_CONF = " ${ NGINX_ONLYOFFICE_PATH } /ds.conf "
2017-11-29 14:37:21 +03:00
NGINX_ONLYOFFICE_EXAMPLE_PATH = " ${ CONF_DIR } -example/nginx "
2018-10-16 12:22:18 +03:00
NGINX_ONLYOFFICE_EXAMPLE_CONF = " ${ NGINX_ONLYOFFICE_EXAMPLE_PATH } /includes/ds-example.conf "
2017-11-29 12:52:57 +03:00
2016-06-30 12:41:52 +03:00
NGINX_CONFIG_PATH = "/etc/nginx/nginx.conf"
2017-09-20 17:25:38 +03:00
NGINX_WORKER_PROCESSES = ${ NGINX_WORKER_PROCESSES :- 1 }
2022-10-31 16:34:42 +03:00
# Limiting the maximum number of simultaneous connections due to possible memory shortage
[ $( ulimit -n) -gt 1048576 ] && NGINX_WORKER_CONNECTIONS = ${ NGINX_WORKER_CONNECTIONS :- 1048576 } || NGINX_WORKER_CONNECTIONS = ${ NGINX_WORKER_CONNECTIONS :- $( ulimit -n) }
2016-06-30 12:41:52 +03:00
2022-08-22 20:27:10 +03:00
JWT_ENABLED = ${ JWT_ENABLED :- true }
2022-04-12 19:00:46 +03:00
# validate user's vars before usinig in json
if [ " ${ JWT_ENABLED } " = = "true" ] ; then
JWT_ENABLED = "true"
else
JWT_ENABLED = "false"
fi
2022-09-13 11:08:04 +03:00
[ -z $JWT_SECRET ] && JWT_MESSAGE = 'JWT is enabled by default. A random secret is generated automatically. Run the command "docker exec $(sudo docker ps -q) sudo documentserver-jwt-status.sh" to get information about JWT.'
2022-08-22 20:27:10 +03:00
2023-02-07 07:02:40 +01:00
JWT_SECRET = ${ JWT_SECRET :- $( pwgen -s 32) }
2017-09-01 16:59:34 +03:00
JWT_HEADER = ${ JWT_HEADER :- Authorization }
2019-11-27 11:35:08 +03:00
JWT_IN_BODY = ${ JWT_IN_BODY :- false }
2017-09-01 16:59:34 +03:00
2021-09-14 17:53:37 +03:00
WOPI_ENABLED = ${ WOPI_ENABLED :- false }
2023-05-26 18:59:54 +05:00
ALLOW_META_IP_ADDRESS = ${ ALLOW_META_IP_ADDRESS :- false }
ALLOW_PRIVATE_IP_ADDRESS = ${ ALLOW_PRIVATE_IP_ADDRESS :- false }
2021-09-14 17:53:37 +03:00
2020-10-20 16:14:55 +03:00
GENERATE_FONTS = ${ GENERATE_FONTS :- true }
2022-06-15 10:30:18 +03:00
if [ [ ${ PRODUCT_NAME } ${ PRODUCT_EDITION } = = "documentserver" ] ] ; then
2020-06-04 15:15:34 +03:00
REDIS_ENABLED = false
else
REDIS_ENABLED = true
fi
2018-05-04 11:56:18 +03:00
ONLYOFFICE_DEFAULT_CONFIG = ${ CONF_DIR } /local.json
2017-05-17 17:41:13 +03:00
ONLYOFFICE_LOG4JS_CONFIG = ${ CONF_DIR } /log4js/production.json
2018-05-04 11:56:18 +03:00
ONLYOFFICE_EXAMPLE_CONFIG = ${ CONF_DIR } -example/local.json
2016-06-30 12:41:52 +03:00
2020-02-21 14:58:20 +03:00
JSON_BIN = ${ APP_DIR } /npm/json
2019-02-15 15:10:19 +03:00
JSON = " ${ JSON_BIN } -q -f ${ ONLYOFFICE_DEFAULT_CONFIG } "
JSON_LOG = " ${ JSON_BIN } -q -f ${ ONLYOFFICE_LOG4JS_CONFIG } "
JSON_EXAMPLE = " ${ JSON_BIN } -q -f ${ ONLYOFFICE_EXAMPLE_CONFIG } "
2016-07-11 11:47:22 +03:00
2016-07-20 18:56:20 +03:00
LOCAL_SERVICES = ( )
2016-07-11 11:47:22 +03:00
2018-04-03 19:39:11 +03:00
PG_ROOT = /var/lib/postgresql
2017-04-24 20:02:01 +03:00
PG_NAME = main
2018-04-03 19:39:11 +03:00
PGDATA = ${ PG_ROOT } /${ PG_VERSION } /${ PG_NAME }
2017-04-24 20:02:01 +03:00
PG_NEW_CLUSTER = false
2019-12-20 13:15:59 +03:00
RABBITMQ_DATA = /var/lib/rabbitmq
REDIS_DATA = /var/lib/redis
2017-04-24 20:02:01 +03:00
2020-11-18 10:46:19 +03:00
if [ " ${ LETS_ENCRYPT_DOMAIN } " != "" -a " ${ LETS_ENCRYPT_MAIL } " != "" ] ; then
2020-10-22 13:47:51 +03:00
LETSENCRYPT_ROOT_DIR = "/etc/letsencrypt/live"
SSL_CERTIFICATE_PATH = ${ LETSENCRYPT_ROOT_DIR } /${ LETS_ENCRYPT_DOMAIN } /fullchain.pem
SSL_KEY_PATH = ${ LETSENCRYPT_ROOT_DIR } /${ LETS_ENCRYPT_DOMAIN } /privkey.pem
fi
2016-07-20 18:56:20 +03:00
read_setting( ) {
2019-10-29 12:42:43 +03:00
deprecated_var POSTGRESQL_SERVER_HOST DB_HOST
deprecated_var POSTGRESQL_SERVER_PORT DB_PORT
deprecated_var POSTGRESQL_SERVER_DB_NAME DB_NAME
deprecated_var POSTGRESQL_SERVER_USER DB_USER
deprecated_var POSTGRESQL_SERVER_PASS DB_PWD
2019-12-23 12:27:47 +03:00
deprecated_var RABBITMQ_SERVER_URL AMQP_URI
deprecated_var AMQP_SERVER_URL AMQP_URI
deprecated_var AMQP_SERVER_TYPE AMQP_TYPE
2019-10-29 12:42:43 +03:00
2020-07-23 15:42:17 +03:00
METRICS_ENABLED = " ${ METRICS_ENABLED :- false } "
METRICS_HOST = " ${ METRICS_HOST :- localhost } "
METRICS_PORT = " ${ METRICS_PORT :- 8125 } "
METRICS_PREFIX = " ${ METRICS_PREFIX :- .ds } "
2019-10-29 12:42:43 +03:00
DB_HOST = ${ DB_HOST :- ${ POSTGRESQL_SERVER_HOST :- $( ${ JSON } services.CoAuthoring.sql.dbHost) } }
2021-03-19 14:20:52 +01:00
DB_TYPE = ${ DB_TYPE :- $( ${ JSON } services.CoAuthoring.sql.type) }
2019-10-29 12:42:43 +03:00
case $DB_TYPE in
"postgres" )
DB_PORT = ${ DB_PORT :- "5432" }
; ;
"mariadb" | "mysql" )
DB_PORT = ${ DB_PORT :- "3306" }
; ;
"" )
DB_PORT = ${ DB_PORT :- ${ POSTGRESQL_SERVER_PORT :- $( ${ JSON } services.CoAuthoring.sql.dbPort) } }
; ;
*)
echo "ERROR: unknown database type"
exit 1
; ;
esac
DB_NAME = ${ DB_NAME :- ${ POSTGRESQL_SERVER_DB_NAME :- $( ${ JSON } services.CoAuthoring.sql.dbName) } }
DB_USER = ${ DB_USER :- ${ POSTGRESQL_SERVER_USER :- $( ${ JSON } services.CoAuthoring.sql.dbUser) } }
DB_PWD = ${ DB_PWD :- ${ POSTGRESQL_SERVER_PASS :- $( ${ JSON } services.CoAuthoring.sql.dbPass) } }
2016-07-11 11:47:22 +03:00
2016-12-09 15:50:07 +03:00
RABBITMQ_SERVER_URL = ${ RABBITMQ_SERVER_URL :- $( ${ JSON } rabbitmq.url) }
2019-12-23 12:27:47 +03:00
AMQP_URI = ${ AMQP_URI :- ${ AMQP_SERVER_URL :- ${ RABBITMQ_SERVER_URL } } }
AMQP_TYPE = ${ AMQP_TYPE :- ${ AMQP_SERVER_TYPE :- rabbitmq } }
parse_rabbitmq_url ${ AMQP_URI }
2016-07-20 18:56:20 +03:00
REDIS_SERVER_HOST = ${ REDIS_SERVER_HOST :- $( ${ JSON } services.CoAuthoring.redis.host) }
2018-05-04 11:56:18 +03:00
REDIS_SERVER_PORT = ${ REDIS_SERVER_PORT :- 6379 }
2017-05-17 17:41:13 +03:00
2018-11-15 12:11:08 +03:00
DS_LOG_LEVEL = ${ DS_LOG_LEVEL :- $( ${ JSON_LOG } categories.default.level) }
2016-07-20 18:56:20 +03:00
}
2016-07-11 11:47:22 +03:00
2019-10-29 12:42:43 +03:00
deprecated_var( ) {
if [ [ -n ${ !1 } ] ] ; then
echo " Variable $1 is deprecated. Use $2 instead. "
fi
}
2016-12-09 15:50:07 +03:00
parse_rabbitmq_url( ) {
2019-01-28 15:47:32 +03:00
local amqp = $1
2016-12-09 15:50:07 +03:00
# extract the protocol
local proto = " $( echo $amqp | grep :// | sed -e's,^\(.*://\).*,\1,g' ) "
# remove the protocol
local url = " $( echo ${ amqp / $proto / } ) "
# extract the user and password (if any)
local userpass = " `echo $url | grep @ | cut -d@ -f1` "
local pass = ` echo $userpass | grep : | cut -d: -f2`
local user
if [ -n " $pass " ] ; then
user = ` echo $userpass | grep : | cut -d: -f1`
else
user = $userpass
fi
# extract the host
local hostport = " $( echo ${ url / $userpass @/ } | cut -d/ -f1) "
# by request - try to extract the port
2022-10-28 16:33:41 +03:00
local port = " $( echo $hostport | grep : | sed -r 's_^.*:+|/.*$__g' ) "
2016-12-09 15:50:07 +03:00
local host
if [ -n " $port " ] ; then
host = ` echo $hostport | grep : | cut -d: -f1`
else
host = $hostport
port = "5672"
fi
# extract the path (if any)
local path = " $( echo $url | grep / | cut -d/ -f2-) "
2019-09-25 17:49:18 +03:00
AMQP_SERVER_PROTO = ${ proto : 0 :- 3 }
2019-01-28 15:47:32 +03:00
AMQP_SERVER_HOST = $host
AMQP_SERVER_USER = $user
AMQP_SERVER_PASS = $pass
AMQP_SERVER_PORT = $port
2016-12-09 15:50:07 +03:00
}
2016-07-11 11:47:22 +03:00
waiting_for_connection( ) {
until nc -z -w 3 " $1 " " $2 " ; do
>& 2 echo " Waiting for connection to the $1 host on port $2 "
sleep 1
done
}
2019-10-29 12:42:43 +03:00
waiting_for_db( ) {
waiting_for_connection $DB_HOST $DB_PORT
2016-07-11 11:47:22 +03:00
}
2019-01-28 15:47:32 +03:00
waiting_for_amqp( ) {
waiting_for_connection ${ AMQP_SERVER_HOST } ${ AMQP_SERVER_PORT }
2016-07-11 11:47:22 +03:00
}
waiting_for_redis( ) {
waiting_for_connection ${ REDIS_SERVER_HOST } ${ REDIS_SERVER_PORT }
}
2016-07-20 18:56:20 +03:00
waiting_for_datacontainer( ) {
waiting_for_connection ${ ONLYOFFICE_DATA_CONTAINER_HOST } ${ ONLYOFFICE_DATA_CONTAINER_PORT }
}
2020-07-23 15:42:17 +03:00
update_statsd_settings( ) {
${ JSON } -I -e "if(this.statsd===undefined)this.statsd={};"
${ JSON } -I -e " this.statsd.useMetrics = ' ${ METRICS_ENABLED } ' "
${ JSON } -I -e " this.statsd.host = ' ${ METRICS_HOST } ' "
${ JSON } -I -e " this.statsd.port = ' ${ METRICS_PORT } ' "
${ JSON } -I -e " this.statsd.prefix = ' ${ METRICS_PREFIX } ' "
}
2019-10-29 12:42:43 +03:00
update_db_settings( ) {
${ JSON } -I -e " this.services.CoAuthoring.sql.type = ' ${ DB_TYPE } ' "
${ JSON } -I -e " this.services.CoAuthoring.sql.dbHost = ' ${ DB_HOST } ' "
${ JSON } -I -e " this.services.CoAuthoring.sql.dbPort = ' ${ DB_PORT } ' "
${ JSON } -I -e " this.services.CoAuthoring.sql.dbName = ' ${ DB_NAME } ' "
${ JSON } -I -e " this.services.CoAuthoring.sql.dbUser = ' ${ DB_USER } ' "
${ JSON } -I -e " this.services.CoAuthoring.sql.dbPass = ' ${ DB_PWD } ' "
2016-07-11 11:47:22 +03:00
}
update_rabbitmq_setting( ) {
2019-12-23 12:27:47 +03:00
if [ " ${ AMQP_TYPE } " = = "rabbitmq" ] ; then
2019-03-07 15:21:52 +03:00
${ JSON } -I -e "if(this.queue===undefined)this.queue={};"
2019-03-06 12:30:54 +03:00
${ JSON } -I -e "this.queue.type = 'rabbitmq'"
2019-12-23 12:27:47 +03:00
${ JSON } -I -e " this.rabbitmq.url = ' ${ AMQP_URI } ' "
2019-01-28 15:47:32 +03:00
fi
2019-12-23 12:27:47 +03:00
if [ " ${ AMQP_TYPE } " = = "activemq" ] ; then
2019-03-07 15:21:52 +03:00
${ JSON } -I -e "if(this.queue===undefined)this.queue={};"
2019-03-06 12:30:54 +03:00
${ JSON } -I -e "this.queue.type = 'activemq'"
2019-01-28 15:47:32 +03:00
${ JSON } -I -e "if(this.activemq===undefined)this.activemq={};"
${ JSON } -I -e "if(this.activemq.connectOptions===undefined)this.activemq.connectOptions={};"
${ JSON } -I -e " this.activemq.connectOptions.host = ' ${ AMQP_SERVER_HOST } ' "
if [ ! " ${ AMQP_SERVER_PORT } " = = "" ] ; then
${ JSON } -I -e " this.activemq.connectOptions.port = ' ${ AMQP_SERVER_PORT } ' "
else
${ JSON } -I -e "delete this.activemq.connectOptions.port"
fi
if [ ! " ${ AMQP_SERVER_USER } " = = "" ] ; then
${ JSON } -I -e " this.activemq.connectOptions.username = ' ${ AMQP_SERVER_USER } ' "
else
${ JSON } -I -e "delete this.activemq.connectOptions.username"
fi
if [ ! " ${ AMQP_SERVER_PASS } " = = "" ] ; then
${ JSON } -I -e " this.activemq.connectOptions.password = ' ${ AMQP_SERVER_PASS } ' "
else
${ JSON } -I -e "delete this.activemq.connectOptions.password"
fi
2019-09-25 17:49:18 +03:00
case " ${ AMQP_SERVER_PROTO } " in
amqp+ssl| amqps)
${ JSON } -I -e "this.activemq.connectOptions.transport = 'tls'"
; ;
*)
${ JSON } -I -e "delete this.activemq.connectOptions.transport"
; ;
esac
2019-01-28 15:47:32 +03:00
fi
2016-07-11 11:47:22 +03:00
}
update_redis_settings( ) {
2022-02-09 09:37:52 +02:00
${ JSON } -I -e "if(this.services.CoAuthoring.redis===undefined)this.services.CoAuthoring.redis={};"
2016-07-11 11:47:22 +03:00
${ JSON } -I -e " this.services.CoAuthoring.redis.host = ' ${ REDIS_SERVER_HOST } ' "
${ JSON } -I -e " this.services.CoAuthoring.redis.port = ' ${ REDIS_SERVER_PORT } ' "
2022-07-18 17:11:06 +03:00
if [ -n " ${ REDIS_SERVER_PASS } " ] ; then
${ JSON } -I -e " this.services.CoAuthoring.redis.options = {'password':' ${ REDIS_SERVER_PASS } '} "
fi
2016-07-11 11:47:22 +03:00
}
2019-12-26 13:13:13 +03:00
update_ds_settings( ) {
2022-04-12 19:00:46 +03:00
${ JSON } -I -e " this.services.CoAuthoring.token.enable.browser = ${ JWT_ENABLED } "
${ JSON } -I -e " this.services.CoAuthoring.token.enable.request.inbox = ${ JWT_ENABLED } "
${ JSON } -I -e " this.services.CoAuthoring.token.enable.request.outbox = ${ JWT_ENABLED } "
2017-09-01 16:59:34 +03:00
2022-04-12 19:00:46 +03:00
${ JSON } -I -e " this.services.CoAuthoring.secret.inbox.string = ' ${ JWT_SECRET } ' "
${ JSON } -I -e " this.services.CoAuthoring.secret.outbox.string = ' ${ JWT_SECRET } ' "
${ JSON } -I -e " this.services.CoAuthoring.secret.session.string = ' ${ JWT_SECRET } ' "
2017-09-01 16:59:34 +03:00
2022-04-12 19:00:46 +03:00
${ JSON } -I -e " this.services.CoAuthoring.token.inbox.header = ' ${ JWT_HEADER } ' "
${ JSON } -I -e " this.services.CoAuthoring.token.outbox.header = ' ${ JWT_HEADER } ' "
2017-09-06 17:21:52 +03:00
2022-04-12 19:00:46 +03:00
${ JSON } -I -e " this.services.CoAuthoring.token.inbox.inBody = ${ JWT_IN_BODY } "
${ JSON } -I -e " this.services.CoAuthoring.token.outbox.inBody = ${ JWT_IN_BODY } "
2019-11-27 11:35:08 +03:00
2022-04-12 19:00:46 +03:00
if [ -f " ${ ONLYOFFICE_EXAMPLE_CONFIG } " ] ; then
${ JSON_EXAMPLE } -I -e " this.server.token.enable = ${ JWT_ENABLED } "
${ JSON_EXAMPLE } -I -e " this.server.token.secret = ' ${ JWT_SECRET } ' "
${ JSON_EXAMPLE } -I -e " this.server.token.authorizationHeader = ' ${ JWT_HEADER } ' "
2017-09-01 16:59:34 +03:00
fi
2022-04-12 19:00:46 +03:00
2019-12-26 13:13:13 +03:00
if [ " ${ USE_UNAUTHORIZED_STORAGE } " = = "true" ] ; then
${ JSON } -I -e "if(this.services.CoAuthoring.requestDefaults===undefined)this.services.CoAuthoring.requestDefaults={}"
${ JSON } -I -e "if(this.services.CoAuthoring.requestDefaults.rejectUnauthorized===undefined)this.services.CoAuthoring.requestDefaults.rejectUnauthorized=false"
fi
2021-09-14 17:53:37 +03:00
if [ " ${ WOPI_ENABLED } " = = "true" ] ; then
${ JSON } -I -e "if(this.wopi===undefined)this.wopi={}"
${ JSON } -I -e "this.wopi.enable = true"
fi
2023-05-26 18:59:54 +05:00
if [ " ${ ALLOW_META_IP_ADDRESS } " = "true" ] || [ " ${ ALLOW_PRIVATE_IP_ADDRESS } " = "true" ] ; then
${ JSON } -I -e "if(this.services.CoAuthoring['request-filtering-agent']===undefined)this.services.CoAuthoring['request-filtering-agent']={}"
[ " ${ ALLOW_META_IP_ADDRESS } " = "true" ] && ${ JSON } -I -e "this.services.CoAuthoring['request-filtering-agent'].allowMetaIPAddress = true"
[ " ${ ALLOW_PRIVATE_IP_ADDRESS } " = "true" ] && ${ JSON } -I -e "this.services.CoAuthoring['request-filtering-agent'].allowPrivateIPAddress = true"
fi
2017-09-01 16:59:34 +03:00
}
2017-04-24 20:02:01 +03:00
create_postgresql_cluster( ) {
local pg_conf_dir = /etc/postgresql/${ PG_VERSION } /${ PG_NAME }
local postgresql_conf = $pg_conf_dir /postgresql.conf
local hba_conf = $pg_conf_dir /pg_hba.conf
mv $postgresql_conf $postgresql_conf .backup
mv $hba_conf $hba_conf .backup
2017-05-17 16:35:54 +03:00
2017-04-24 20:02:01 +03:00
pg_createcluster ${ PG_VERSION } ${ PG_NAME }
}
2016-08-25 19:52:14 +03:00
create_postgresql_db( ) {
2020-04-01 12:11:57 +03:00
sudo -u postgres psql -c " CREATE USER $DB_USER WITH password ' " $DB_PWD "';"
2023-02-07 16:08:40 +03:00
sudo -u postgres psql -c " CREATE DATABASE $DB_NAME OWNER $DB_USER ; "
2017-04-24 20:02:01 +03:00
}
2019-10-29 12:42:43 +03:00
create_db_tbl( ) {
case $DB_TYPE in
"postgres" )
create_postgresql_tbl
; ;
"mariadb" | "mysql" )
create_mysql_tbl
; ;
esac
}
2021-04-14 17:10:38 +03:00
upgrade_db_tbl( ) {
case $DB_TYPE in
"postgres" )
upgrade_postgresql_tbl
; ;
"mariadb" | "mysql" )
upgrade_mysql_tbl
; ;
esac
}
upgrade_postgresql_tbl( ) {
if [ -n " $DB_PWD " ] ; then
export PGPASSWORD = $DB_PWD
fi
PSQL = " psql -q -h $DB_HOST -p $DB_PORT -d $DB_NAME -U $DB_USER -w "
$PSQL -f " $APP_DIR /server/schema/postgresql/removetbl.sql "
$PSQL -f " $APP_DIR /server/schema/postgresql/createdb.sql "
}
upgrade_mysql_tbl( ) {
CONNECTION_PARAMS = " -h $DB_HOST -P $DB_PORT -u $DB_USER -p $DB_PWD -w "
MYSQL = " mysql -q $CONNECTION_PARAMS "
$MYSQL $DB_NAME < " $APP_DIR /server/schema/mysql/removetbl.sql " >/dev/null 2>& 1
$MYSQL $DB_NAME < " $APP_DIR /server/schema/mysql/createdb.sql " >/dev/null 2>& 1
}
2019-10-29 12:42:43 +03:00
create_postgresql_tbl( ) {
if [ -n " $DB_PWD " ] ; then
export PGPASSWORD = $DB_PWD
2016-07-11 11:47:22 +03:00
fi
2016-06-30 12:41:52 +03:00
2020-10-27 13:50:48 +03:00
PSQL = " psql -q -h $DB_HOST -p $DB_PORT -d $DB_NAME -U $DB_USER -w "
$PSQL -f " $APP_DIR /server/schema/postgresql/createdb.sql "
2019-10-29 12:42:43 +03:00
}
create_mysql_tbl( ) {
CONNECTION_PARAMS = " -h $DB_HOST -P $DB_PORT -u $DB_USER -p $DB_PWD -w "
MYSQL = " mysql -q $CONNECTION_PARAMS "
# Create db on remote server
$MYSQL -e " CREATE DATABASE IF NOT EXISTS $DB_NAME DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; " >/dev/null 2>& 1
$MYSQL $DB_NAME < " $APP_DIR /server/schema/mysql/createdb.sql " >/dev/null 2>& 1
2016-08-25 19:52:14 +03:00
}
2016-07-11 11:47:22 +03:00
2019-11-28 14:59:20 +03:00
update_welcome_page( ) {
WELCOME_PAGE = " ${ APP_DIR } -example/welcome/docker.html "
if [ [ -e $WELCOME_PAGE ] ] ; then
DOCKER_CONTAINER_ID = $( basename $( cat /proc/1/cpuset) )
2022-09-13 11:08:04 +03:00
( ( ${# DOCKER_CONTAINER_ID } < 12 ) ) && DOCKER_CONTAINER_ID = $( hostname)
2022-04-29 14:55:25 +03:00
if ( ( ${# DOCKER_CONTAINER_ID } >= 12 ) ) ; then
if [ [ -x $( command -v docker) ] ] ; then
DOCKER_CONTAINER_NAME = $( docker inspect --format= "{{.Name}}" $DOCKER_CONTAINER_ID )
sed 's/$(sudo docker ps -q)/' " ${ DOCKER_CONTAINER_NAME #/ } " '/' -i $WELCOME_PAGE
2022-09-13 11:08:04 +03:00
JWT_MESSAGE = $( echo $JWT_MESSAGE | sed 's/$(sudo docker ps -q)/' " ${ DOCKER_CONTAINER_NAME #/ } " '/' )
2022-04-29 14:55:25 +03:00
else
sed 's/$(sudo docker ps -q)/' " ${ DOCKER_CONTAINER_ID : : 12 } " '/' -i $WELCOME_PAGE
2022-09-13 11:08:04 +03:00
JWT_MESSAGE = $( echo $JWT_MESSAGE | sed 's/$(sudo docker ps -q)/' " ${ DOCKER_CONTAINER_ID : : 12 } " '/' )
2022-04-29 14:55:25 +03:00
fi
2019-11-28 14:59:20 +03:00
fi
fi
2016-08-25 19:52:14 +03:00
}
2016-07-11 11:47:22 +03:00
2016-07-20 18:56:20 +03:00
update_nginx_settings( ) {
2016-07-11 11:47:22 +03:00
# Set up nginx
sed 's/^worker_processes.*/' " worker_processes ${ NGINX_WORKER_PROCESSES } ; " '/' -i ${ NGINX_CONFIG_PATH }
sed 's/worker_connections.*/' " worker_connections ${ NGINX_WORKER_CONNECTIONS } ; " '/' -i ${ NGINX_CONFIG_PATH }
sed 's/access_log.*/' "access_log off;" '/' -i ${ NGINX_CONFIG_PATH }
# setup HTTPS
if [ -f " ${ SSL_CERTIFICATE_PATH } " -a -f " ${ SSL_KEY_PATH } " ] ; then
2018-10-16 12:22:18 +03:00
cp -f ${ NGINX_ONLYOFFICE_PATH } /ds-ssl.conf.tmpl ${ NGINX_ONLYOFFICE_CONF }
2016-07-11 11:47:22 +03:00
# configure nginx
2017-11-29 12:52:57 +03:00
sed 's,{{SSL_CERTIFICATE_PATH}},' " ${ SSL_CERTIFICATE_PATH } " ',' -i ${ NGINX_ONLYOFFICE_CONF }
sed 's,{{SSL_KEY_PATH}},' " ${ SSL_KEY_PATH } " ',' -i ${ NGINX_ONLYOFFICE_CONF }
2016-07-11 11:47:22 +03:00
2017-12-12 17:02:14 +03:00
# turn on http2
sed 's,\(443 ssl\),\1 http2,' -i ${ NGINX_ONLYOFFICE_CONF }
2016-07-11 11:47:22 +03:00
# if dhparam path is valid, add to the config, otherwise remove the option
if [ -r " ${ SSL_DHPARAM_PATH } " ] ; then
2017-11-29 12:52:57 +03:00
sed 's,\(\#* *\)\?\(ssl_dhparam \).*\(;\)$,' " \2 ${ SSL_DHPARAM_PATH } \3 " ',' -i ${ NGINX_ONLYOFFICE_CONF }
2016-07-11 11:47:22 +03:00
else
2017-11-29 12:52:57 +03:00
sed '/ssl_dhparam/d' -i ${ NGINX_ONLYOFFICE_CONF }
2016-07-11 11:47:22 +03:00
fi
2017-11-29 12:52:57 +03:00
sed 's,\(ssl_verify_client \).*\(;\)$,' " \1 ${ SSL_VERIFY_CLIENT } \2 " ',' -i ${ NGINX_ONLYOFFICE_CONF }
2016-07-11 11:47:22 +03:00
if [ -f " ${ CA_CERTIFICATES_PATH } " ] ; then
2017-11-29 12:52:57 +03:00
sed '/ssl_verify_client/a ' " ssl_client_certificate ${ CA_CERTIFICATES_PATH } " ';' -i ${ NGINX_ONLYOFFICE_CONF }
2016-07-11 11:47:22 +03:00
fi
if [ " ${ ONLYOFFICE_HTTPS_HSTS_ENABLED } " = = "true" ] ; then
2017-11-29 12:52:57 +03:00
sed 's,\(max-age=\).*\(;\)$,' " \1 ${ ONLYOFFICE_HTTPS_HSTS_MAXAGE } \2 " ',' -i ${ NGINX_ONLYOFFICE_CONF }
2016-07-11 11:47:22 +03:00
else
2017-11-29 12:52:57 +03:00
sed '/max-age=/d' -i ${ NGINX_ONLYOFFICE_CONF }
2016-07-11 11:47:22 +03:00
fi
else
2018-10-16 12:22:18 +03:00
ln -sf ${ NGINX_ONLYOFFICE_PATH } /ds.conf.tmpl ${ NGINX_ONLYOFFICE_CONF }
2016-07-11 11:47:22 +03:00
fi
2017-05-12 16:51:22 +03:00
2019-05-21 16:06:58 +03:00
# check if ipv6 supported otherwise remove it from nginx config
if [ ! -f /proc/net/if_inet6 ] ; then
sed '/listen\s\+\[::[0-9]*\].\+/d' -i $NGINX_ONLYOFFICE_CONF
fi
2017-11-29 14:37:21 +03:00
if [ -f " ${ NGINX_ONLYOFFICE_EXAMPLE_CONF } " ] ; then
sed 's/linux/docker/' -i ${ NGINX_ONLYOFFICE_EXAMPLE_CONF }
2017-01-17 16:15:54 +03:00
fi
2022-06-07 16:16:05 +03:00
2022-07-12 12:37:48 +03:00
documentserver-update-securelink.sh -s ${ SECURE_LINK_SECRET :- $( pwgen -s 20) } -r false
2016-07-11 11:47:22 +03:00
}
2017-05-17 17:41:13 +03:00
update_log_settings( ) {
2018-11-15 12:11:08 +03:00
${ JSON_LOG } -I -e " this.categories.default.level = ' ${ DS_LOG_LEVEL } ' "
2017-05-17 17:41:13 +03:00
}
2018-11-20 17:06:53 +03:00
update_logrotate_settings( ) {
sed 's|\(^su\b\).*|\1 root root|' -i /etc/logrotate.conf
}
2021-04-14 17:10:38 +03:00
update_release_date( ) {
mkdir -p ${ PRIVATE_DATA_DIR }
echo ${ RELEASE_DATE } > ${ DS_RELEASE_DATE }
}
2015-05-25 06:47:54 -04:00
# create base folders
2021-06-22 09:59:50 +03:00
for i in converter docservice metrics; do
2017-11-10 15:10:52 +03:00
mkdir -p " ${ DS_LOG_DIR } / $i "
2016-06-30 12:41:52 +03:00
done
2017-11-10 15:10:52 +03:00
mkdir -p ${ DS_LOG_DIR } -example
2019-05-29 16:26:22 +03:00
# create app folders
2020-02-12 13:42:04 +03:00
for i in ${ DS_LIB_DIR } /App_Data/cache/files ${ DS_LIB_DIR } /App_Data/docbuilder ${ DS_LIB_DIR } -example/files; do
mkdir -p " $i "
2019-05-29 16:26:22 +03:00
done
2017-11-10 15:10:52 +03:00
# change folder rights
2022-07-05 14:56:42 +03:00
for i in ${ LOG_DIR } ${ LIB_DIR } ; do
2018-10-16 12:22:18 +03:00
chown -R ds:ds " $i "
2017-11-10 15:10:52 +03:00
chmod -R 755 " $i "
done
2016-06-30 12:41:52 +03:00
2016-07-20 18:56:20 +03:00
if [ ${ ONLYOFFICE_DATA_CONTAINER_HOST } = "localhost" ] ; then
read_setting
2020-07-23 15:42:17 +03:00
if [ $METRICS_ENABLED = "true" ] ; then
update_statsd_settings
fi
2019-11-28 14:59:20 +03:00
update_welcome_page
2017-05-17 17:41:13 +03:00
update_log_settings
2019-12-26 13:13:13 +03:00
update_ds_settings
2017-09-01 16:59:34 +03:00
2016-07-20 18:56:20 +03:00
# update settings by env variables
2019-10-29 12:42:43 +03:00
if [ $DB_HOST != "localhost" ] ; then
update_db_settings
waiting_for_db
create_db_tbl
2016-07-20 18:56:20 +03:00
else
2018-04-03 19:39:11 +03:00
# change rights for postgres directory
chown -R postgres:postgres ${ PG_ROOT }
chmod -R 700 ${ PG_ROOT }
# create new db if it isn't exist
2017-04-24 20:02:01 +03:00
if [ ! -d ${ PGDATA } ] ; then
create_postgresql_cluster
PG_NEW_CLUSTER = true
fi
2016-08-25 19:52:14 +03:00
LOCAL_SERVICES += ( "postgresql" )
2016-07-11 11:47:22 +03:00
fi
2016-06-30 12:41:52 +03:00
2019-01-28 15:47:32 +03:00
if [ ${ AMQP_SERVER_HOST } != "localhost" ] ; then
2016-07-20 18:56:20 +03:00
update_rabbitmq_setting
else
2019-12-20 13:15:59 +03:00
# change rights for rabbitmq directory
chown -R rabbitmq:rabbitmq ${ RABBITMQ_DATA }
chmod -R go = rX,u= rwX ${ RABBITMQ_DATA }
if [ -f ${ RABBITMQ_DATA } /.erlang.cookie ] ; then
chmod 400 ${ RABBITMQ_DATA } /.erlang.cookie
fi
2017-04-12 14:46:06 +03:00
LOCAL_SERVICES += ( "rabbitmq-server" )
2018-10-22 10:50:30 +03:00
# allow Rabbitmq startup after container kill
rm -rf /var/run/rabbitmq
2016-07-11 11:47:22 +03:00
fi
2016-06-30 12:41:52 +03:00
2020-07-30 10:58:54 +03:00
if [ ${ REDIS_ENABLED } = "true" ] ; then
if [ ${ REDIS_SERVER_HOST } != "localhost" ] ; then
update_redis_settings
else
# change rights for redis directory
chown -R redis:redis ${ REDIS_DATA }
chmod -R 750 ${ REDIS_DATA }
LOCAL_SERVICES += ( "redis-server" )
fi
2016-07-11 11:47:22 +03:00
fi
2016-07-20 18:56:20 +03:00
else
# no need to update settings just wait for remote data
waiting_for_datacontainer
# read settings after the data container in ready state
# to prevent get unconfigureted data
read_setting
2019-11-28 14:59:20 +03:00
update_welcome_page
2016-06-30 12:41:52 +03:00
fi
2023-03-17 12:25:33 +03:00
find /etc/${ COMPANY_NAME } ! -path '*logrotate*' -exec chown ds:ds { } \;
2022-08-31 12:13:30 +03:00
2016-07-20 18:56:20 +03:00
#start needed local services
for i in ${ LOCAL_SERVICES [@] } ; do
service $i start
done
2017-04-24 20:02:01 +03:00
if [ ${ PG_NEW_CLUSTER } = "true" ] ; then
2017-04-25 14:29:24 +03:00
create_postgresql_db
2017-04-24 20:02:01 +03:00
create_postgresql_tbl
fi
2016-07-11 11:47:22 +03:00
if [ ${ ONLYOFFICE_DATA_CONTAINER } != "true" ] ; then
2019-10-29 12:42:43 +03:00
waiting_for_db
2019-01-28 15:47:32 +03:00
waiting_for_amqp
2020-06-04 15:15:34 +03:00
if [ ${ REDIS_ENABLED } = "true" ] ; then
waiting_for_redis
fi
2016-07-20 18:56:20 +03:00
2021-04-14 17:10:38 +03:00
if [ " ${ IS_UPGRADE } " = "true" ] ; then
upgrade_db_tbl
update_release_date
fi
2016-07-20 18:56:20 +03:00
update_nginx_settings
2023-07-13 17:51:03 +03:00
2016-07-20 18:56:20 +03:00
service supervisor start
2018-06-25 14:58:17 +03:00
# start cron to enable log rotating
2018-11-20 17:06:53 +03:00
update_logrotate_settings
2018-06-25 14:58:17 +03:00
service cron start
2016-07-11 11:47:22 +03:00
fi
2016-06-30 12:41:52 +03:00
2016-07-20 18:56:20 +03:00
# nginx used as a proxy, and as data container status service.
# it run in all cases.
service nginx start
2020-11-18 10:46:19 +03:00
if [ " ${ LETS_ENCRYPT_DOMAIN } " != "" -a " ${ LETS_ENCRYPT_MAIL } " != "" ] ; then
2020-10-22 13:47:51 +03:00
if [ ! -f " ${ SSL_CERTIFICATE_PATH } " -a ! -f " ${ SSL_KEY_PATH } " ] ; then
documentserver-letsencrypt.sh ${ LETS_ENCRYPT_MAIL } ${ LETS_ENCRYPT_DOMAIN }
fi
fi
2016-06-30 12:41:52 +03:00
# Regenerate the fonts list and the fonts thumbnails
2020-10-20 16:14:55 +03:00
if [ " ${ GENERATE_FONTS } " = = "true" ] ; then
documentserver-generate-allfonts.sh ${ ONLYOFFICE_DATA_CONTAINER }
fi
2018-01-29 11:56:51 +03:00
documentserver-static-gzip.sh ${ ONLYOFFICE_DATA_CONTAINER }
2018-04-12 21:41:24 +00:00
2022-08-22 20:56:45 +03:00
echo " ${ JWT_MESSAGE } "
2020-09-10 16:02:20 +02:00
tail -f /var/log/${ COMPANY_NAME } /**/*.log &
wait $!