From e7b7e7dd1a39f22245bae6640098476a3eefd1f6 Mon Sep 17 00:00:00 2001 From: Alexey Golubev Date: Wed, 20 Jul 2016 18:56:20 +0300 Subject: [PATCH] made availability check the data container to ensure the correct order of starting the containers --- docker-compose.yml | 1 + run-document-server.sh | 113 ++++++++++++++++++++++++----------------- 2 files changed, 68 insertions(+), 46 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index df2ba7a..02ffd90 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -34,6 +34,7 @@ services: - onlyoffice-redis - onlyoffice-rabbitmq environment: + - ONLYOFFICE_DATA_CONTAINER_HOST=onlyoffice-documentserver-data - BALANCE=uri depth 3 - HTTP_CHECK=GET /healthcheck - EXTRA_SETTINGS=http-check expect string true diff --git a/run-document-server.sh b/run-document-server.sh index adfd639..9c67c67 100644 --- a/run-document-server.sh +++ b/run-document-server.sh @@ -5,6 +5,8 @@ DATA_DIR="/var/www/onlyoffice/Data" LOG_DIR="/var/log/onlyoffice/documentserver" ONLYOFFICE_DATA_CONTAINER=${ONLYOFFICE_DATA_CONTAINER:-false} +ONLYOFFICE_DATA_CONTAINER_HOST=${ONLYOFFICE_DATA_CONTAINER_HOST:-localhost} +ONLYOFFICE_DATA_CONTAINER_PORT=80 SSL_CERTIFICATES_DIR="${DATA_DIR}/certs" SSL_CERTIFICATE_PATH=${SSL_CERTIFICATE_PATH:-${SSL_CERTIFICATES_DIR}/onlyoffice.crt} @@ -26,20 +28,24 @@ ONLYOFFICE_DEFAULT_CONFIG=/etc/onlyoffice/documentserver/default.json JSON="json -q -f ${ONLYOFFICE_DEFAULT_CONFIG}" -MYSQL_SERVER_HOST=${MYSQL_SERVER_HOST:-$(${JSON} services.CoAuthoring.sql.dbHost)} -MYSQL_SERVER_PORT=${MYSQL_SERVER_PORT:-$(${JSON} services.CoAuthoring.sql.dbPort)} -MYSQL_SERVER_DB_NAME=${MYSQL_SERVER_DB_NAME:-$(${JSON} services.CoAuthoring.sql.dbName)} -MYSQL_SERVER_USER=${MYSQL_SERVER_USER:-$(${JSON} services.CoAuthoring.sql.dbUser)} -MYSQL_SERVER_PASS=${MYSQL_SERVER_PASS:-$(${JSON} services.CoAuthoring.sql.dbPass)} +LOCAL_SERVICES=() -RABBITMQ_SERVER_URL=$(${JSON} rabbitmq.url) -RABBITMQ_SERVER_HOST=${RABBITMQ_SERVER_HOST:-${RABBITMQ_SERVER_URL#'amqp://'}} -RABBITMQ_SERVER_USER=${RABBITMQ_SERVER_USER:-$(${JSON} rabbitmq.login)} -RABBITMQ_SERVER_PASS=${RABBITMQ_SERVER_PASS:-$(${JSON} rabbitmq.password)} -RABBITMQ_SERVER_PORT=${RABBITMQ_SERVER_PORT:-"5672"} +read_setting(){ + MYSQL_SERVER_HOST=${MYSQL_SERVER_HOST:-$(${JSON} services.CoAuthoring.sql.dbHost)} + MYSQL_SERVER_PORT=${MYSQL_SERVER_PORT:-$(${JSON} services.CoAuthoring.sql.dbPort)} + MYSQL_SERVER_DB_NAME=${MYSQL_SERVER_DB_NAME:-$(${JSON} services.CoAuthoring.sql.dbName)} + MYSQL_SERVER_USER=${MYSQL_SERVER_USER:-$(${JSON} services.CoAuthoring.sql.dbUser)} + MYSQL_SERVER_PASS=${MYSQL_SERVER_PASS:-$(${JSON} services.CoAuthoring.sql.dbPass)} -REDIS_SERVER_HOST=${REDIS_SERVER_HOST:-$(${JSON} services.CoAuthoring.redis.host)} -REDIS_SERVER_PORT=${REDIS_SERVER_PORT:-$(${JSON} services.CoAuthoring.redis.port)} + RABBITMQ_SERVER_URL=$(${JSON} rabbitmq.url) + RABBITMQ_SERVER_HOST=${RABBITMQ_SERVER_HOST:-${RABBITMQ_SERVER_URL#'amqp://'}} + RABBITMQ_SERVER_USER=${RABBITMQ_SERVER_USER:-$(${JSON} rabbitmq.login)} + RABBITMQ_SERVER_PASS=${RABBITMQ_SERVER_PASS:-$(${JSON} rabbitmq.password)} + RABBITMQ_SERVER_PORT=${RABBITMQ_SERVER_PORT:-"5672"} + + REDIS_SERVER_HOST=${REDIS_SERVER_HOST:-$(${JSON} services.CoAuthoring.redis.host)} + REDIS_SERVER_PORT=${REDIS_SERVER_PORT:-$(${JSON} services.CoAuthoring.redis.port)} +} waiting_for_connection(){ until nc -z -w 3 "$1" "$2"; do @@ -59,7 +65,9 @@ waiting_for_rabbitmq(){ waiting_for_redis(){ waiting_for_connection ${REDIS_SERVER_HOST} ${REDIS_SERVER_PORT} } - +waiting_for_datacontainer(){ + waiting_for_connection ${ONLYOFFICE_DATA_CONTAINER_HOST} ${ONLYOFFICE_DATA_CONTAINER_PORT} +} update_mysql_settings(){ ${JSON} -I -e "this.services.CoAuthoring.sql.dbHost = '${MYSQL_SERVER_HOST}'" ${JSON} -I -e "this.services.CoAuthoring.sql.dbPort = '${MYSQL_SERVER_PORT}'" @@ -90,7 +98,7 @@ create_mysql_db(){ ${MYSQL} "${MYSQL_SERVER_DB_NAME}" < "${APP_DIR}/server/schema/createdb.sql" } -start_nginx(){ +update_nginx_settings(){ # 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} @@ -127,61 +135,74 @@ start_nginx(){ else cp ${SYSCONF_TEMPLATES_DIR}/nginx/onlyoffice-documentserver.conf ${NGINX_ONLYOFFICE_PATH} fi - - #start service - service nginx start } -start_supervisor(){ +update_supervisor_settings(){ # Copy modified supervisor start script cp ${SYSCONF_TEMPLATES_DIR}/supervisor/supervisor /etc/init.d/ # Copy modified supervisor config cp ${SYSCONF_TEMPLATES_DIR}/supervisor/supervisord.conf /etc/supervisor/supervisord.conf - - #start service - service supervisor start } # create base folders for i in converter docservice spellchecker metrics gc; do - mkdir -p "${LOG_DIR}/$i" + mkdir -p "${LOG_DIR}/$i" done mkdir -p ${LOG_DIR}-example -if [ ${MYSQL_SERVER_HOST} != "localhost" ]; then - update_mysql_settings - create_mysql_db -else - if [ ${ONLYOFFICE_DATA_CONTAINER} != "true" ]; then - service mysql start +if [ ${ONLYOFFICE_DATA_CONTAINER_HOST} = "localhost" ]; then + + read_setting + + # update settings by env variables + if [ ${MYSQL_SERVER_HOST} != "localhost" ]; then + update_mysql_settings + waiting_for_mysql + create_mysql_db + else + LOCAL_SERVICES+=("mysql") fi + + if [ ${RABBITMQ_SERVER_HOST} != "localhost" ]; then + update_rabbitmq_setting + else + LOCAL_SERVICES+=("redis-server") + fi + + if [ ${REDIS_SERVER_HOST} != "localhost" ]; then + update_redis_settings + else + LOCAL_SERVICES+=("rabbitmq-server") + fi +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 fi -if [ ${RABBITMQ_SERVER_HOST} != "localhost" ]; then - update_rabbitmq_setting -else - if [ ${ONLYOFFICE_DATA_CONTAINER} != "true" ]; then - service redis-server start - fi -fi - -if [ ${REDIS_SERVER_HOST} != "localhost" ]; then - update_redis_settings -else - if [ ${ONLYOFFICE_DATA_CONTAINER} != "true" ]; then - service rabbitmq-server start - fi -fi +#start needed local services +for i in ${LOCAL_SERVICES[@]}; do + service $i start +done if [ ${ONLYOFFICE_DATA_CONTAINER} != "true" ]; then waiting_for_mysql waiting_for_rabbitmq waiting_for_redis - - start_nginx - start_supervisor + + update_nginx_settings + + update_supervisor_settings + service supervisor start fi +# nginx used as a proxy, and as data container status service. +# it run in all cases. +service nginx start + # Regenerate the fonts list and the fonts thumbnails documentserver-generate-allfonts.sh ${ONLYOFFICE_DATA_CONTAINER}