diff --git a/ublinux/default b/ublinux/default index 3dd3fab..6db59e0 100644 --- a/ublinux/default +++ b/ublinux/default @@ -10,6 +10,7 @@ declare -A DOMAIN declare -A REPOSITORY declare -A REPOPUBLIC_CACHE declare -A AUTOUPDATE +declare -A UBPILE ##rc.desktop/all/* is launching when desktop is ready @@ -257,4 +258,8 @@ REPOPUBLIC_CACHE[user_agent]="repopublic/1.0" AUTOUPDATE[mode]=modsys AUTOUPDATE[interval]=boot,7d -UBPILE_SECRET_KEY="4a6ed27e0434490028ff63b11f12fb7c" +UBPILE[debug_level]=1 +UBPILE[secret_key]="4a6ed27e0434490028ff63b11f12fb7c" +UBPILE[server_comm_use_hostnames]="false" +UBPILE[web_direct_connect]="false" +UBPILE[web_socket_use_hostnames]="false" diff --git a/ublinux/functions b/ublinux/functions index a4eb3d3..9a0d693 100755 --- a/ublinux/functions +++ b/ublinux/functions @@ -1482,9 +1482,11 @@ ubconfig_exec_system(){ case "${NAME_VAR}" in STORAGE_CONTAINERS_PATH) ${ROOTFS}/usr/lib/ublinux/rc.preinit.d/80-server-containers-storage ;; STORAGE_LIBVIRT_PATH) ${ROOTFS}/usr/lib/ublinux/rc.preinit.d/81-server-libvirt-storage ;; - UBPILE) ${ROOTFS}/usr/lib/ublinux/rc.local.d/98-ubpile exec_01_ubpile "${COMMAND_MODE_VAR}" "${NAME_VAR}=${VALUE_VAR}" ;; - UBPILE\[*\]) ${ROOTFS}/usr/lib/ublinux/rc.local.d/98-ubpile exec_01_ubpile "${COMMAND_MODE_VAR}" "${NAME_VAR}=${VALUE_VAR}" ;; - UBPILE_REVERSE_PROXY_PORT) ${ROOTFS}/usr/lib/ublinux/rc.local.d/98-ubpile exec_02_reverse_proxy_port "${COMMAND_MODE_VAR}" "${NAME_VAR}=${VALUE_VAR}" ;; + UBPILE_DB) ${ROOTFS}/usr/lib/ublinux/rc.local.d/98-ubpile exec_01_ubpile_db "${COMMAND_MODE_VAR}" "${NAME_VAR}=${VALUE_VAR}" ;; + UBPILE_DB\[*\]) ${ROOTFS}/usr/lib/ublinux/rc.local.d/98-ubpile exec_01_ubpile_db "${COMMAND_MODE_VAR}" "${NAME_VAR}=${VALUE_VAR}" ;; + UBPILE) ${ROOTFS}/usr/lib/ublinux/rc.local.d/98-ubpile exec_02_ubpile "${COMMAND_MODE_VAR}" "${NAME_VAR}=${VALUE_VAR}" ;; + UBPILE\[*\]) ${ROOTFS}/usr/lib/ublinux/rc.local.d/98-ubpile exec_02_ubpile "${COMMAND_MODE_VAR}" "${NAME_VAR}=${VALUE_VAR}" ;; + UBPILE_REVERSE_PROXY) ${ROOTFS}/usr/lib/ublinux/rc.local.d/98-ubpile exec_03_ubpile_reverse_proxy "${COMMAND_MODE_VAR}" "${NAME_VAR}=${VALUE_VAR}" ;; *) NO_FIND_EXCUTE=1 ;; esac ;; diff --git a/ublinux/rc.local.d/98-ubpile b/ublinux/rc.local.d/98-ubpile index e2aa40a..202c282 100755 --- a/ublinux/rc.local.d/98-ubpile +++ b/ublinux/rc.local.d/98-ubpile @@ -11,25 +11,99 @@ SOURCE=${SYSCONF}/server; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null debug_mode "$0" "$@" -PATH_UBPILE="/opt/ubpile" -UBPILE_DATA="${PATH_UBPILE}/data" -UBPILE_CONF="${PATH_UBPILE}/conf" -UBPILE_CONF_JSON="${UBPILE_CONF}/config.json" -UBPILE_CONF_JSON_TEMPLATE="${PATH_UBPILE}/sample_conf/config.json" -PATH_HAPROXY_UBPILE_CONF="/etc/haproxy/haproxy-ubpile.cfg" -## Использовать приложение UBPile -## UBPILE=primary|worker|disable|clean -## primary # Выступать в роли главного сервера управляющего всеми 'Worker' -## worker # Исполнитель заданий приходящих от сервера 'Primary' -## disable # Отключить -## clean # Очистить БД и вернуть настройки по умолчанию. После процедуры очистки установится UBPILE=disable + if [[ -d "/opt/ubpile" ]]; then + APP_UBPILE="ubpile" + PATH_UBPILE="/opt/${APP_UBPILE}" + UBPILE_CONF_JSON_TEMPLATE="${PATH_UBPILE}/sample_conf/config.json" + fi + if [[ -d "/opt/ubpile-workflow" ]]; then + APP_UBPILE_WORKFLOW="ubpile-workflow" + PATH_UBPILE="/opt/${APP_UBPILE_WORKFLOW}" + PATH_CONF_JSON_TAMPLATE="/usr/share/${APP_UBPILE_WORKFLOW}" + UBPILE_CONF_JSON_TEMPLATE="${PATH_CONF_JSON_TAMPLATE}/sample_conf/config.json" + PATH_STORAGE_DB_TAMPLATE="${PATH_CONF_JSON_TAMPLATE}/storage" + fi + UBPILE_DATA="${PATH_UBPILE}/data" + UBPILE_CONF="${PATH_UBPILE}/conf" + UBPILE_CONF_JSON="${UBPILE_CONF}/config.json" + UBPILE_STORAGE_CONF_JSON="${UBPILE_CONF}/storage.json" + UBPILE_SECRET_KEY=${UBPILE_CONF}/secret_key + PATH_HAPROXY_UBPILE_CONF="/etc/haproxy/haproxy-ubpile.cfg" + + +## Настройка база данных UBPile, файл настроек /opt/ubpile-workflow/conf/storage.json имеет приоритет над /opt/ubpile-workflow/conf/config.json +## По умолчанию *fs (filesystem) +## UBPILE_DB=*fs|sqlite|level|lmdb|mssql|mysql|oracle|postgres|redis|s3|sftp +## UBPILE_DB[SQL.connection.filename|...]= +## SQL.connection.filename # Для UBPILE_DB=sqlite местоположение файла БД, по умолчанию корень приложения /opt/ubpile-workflow +## UBPILE_DB[SQL.connection.filename]=ubpile.db +exec_01_ubpile_db(){ + [[ -n ${APP_UBPILE} || -n ${APP_UBPILE_WORKFLOW} ]] || return 0 + [[ $1 == @("set="|"set+="|"set++="|"set-="|"set--="|"remove") ]] && COMMAND=$1 && shift + [[ -n ${COMMAND} ]] || COMMAND="set=" + local PARAM="$@" + if [[ -n ${PARAM} ]]; then + local UBPILE= + declare -A UBPILE + [[ ${PARAM%%=*} =~ [!\$%\&()*+,/\;\<\=\>?\^\{|\}~] ]] || eval "${PARAM%%=*}=\${PARAM#*=}" + fi + [[ -n ${UBPILE_DB[0]} ]] && case ${UBPILE_DB[0]} in + fs) FILE_STORAGE_DB_TAMPLATE=${PATH_STORAGE_DB_TAMPLATE}/storage.fs.json ;; + level) FILE_STORAGE_DB_TAMPLATE=${PATH_STORAGE_DB_TAMPLATE}/storage.level.json ;; + lmdb) FILE_STORAGE_DB_TAMPLATE=${PATH_STORAGE_DB_TAMPLATE}/storage.lmdb.json ;; + mssql) FILE_STORAGE_DB_TAMPLATE=${PATH_STORAGE_DB_TAMPLATE}/storage.mssql.json ;; + mysql) FILE_STORAGE_DB_TAMPLATE=${PATH_STORAGE_DB_TAMPLATE}/storage.mysql.json ;; + oracle) FILE_STORAGE_DB_TAMPLATE=${PATH_STORAGE_DB_TAMPLATE}/storage.oracle.json ;; + postgres) FILE_STORAGE_DB_TAMPLATE=${PATH_STORAGE_DB_TAMPLATE}/storage.postgres.json ;; + redis) FILE_STORAGE_DB_TAMPLATE=${PATH_STORAGE_DB_TAMPLATE}/storage.redis.json ;; + s3) FILE_STORAGE_DB_TAMPLATE=${PATH_STORAGE_DB_TAMPLATE}/storage.s3.json ;; + sftp) FILE_STORAGE_DB_TAMPLATE=${PATH_STORAGE_DB_TAMPLATE}/storage.sftp.json ;; + sqlite) FILE_STORAGE_DB_TAMPLATE=${PATH_STORAGE_DB_TAMPLATE}/storage.sqlite.json ;; + *) true ;; + esac + if [[ ${COMMAND} == @("set="|"set+="|"set++=") ]] && [[ ${#UBPILE_DB[@]} != 0 ]]; then + [[ -n ${UBPILE_DB[0]} ]] && cp -f ${FILE_STORAGE_DB_TAMPLATE} ${UBPILE_STORAGE_CONF_JSON} + local STRING_ARG_CONF= + if [[ -f ${UBPILE_STORAGE_CONF_JSON} ]]; then + for NAME_ARG_CONF in "${!UBPILE_DB[@]}"; do + if [[ ${NAME_ARG_CONF} != 0 ]] && [[ ${UBPILE_DB[${NAME_ARG_CONF}]} =~ ^([[:digit:]]*|true|false)$ ]]; then + STRING_ARG_CONF+=".${NAME_ARG_CONF} = ${UBPILE_DB[${NAME_ARG_CONF}]} | " + elif [[ ${NAME_ARG_CONF} != 0 ]]; then + STRING_ARG_CONF+=".${NAME_ARG_CONF} = \"${UBPILE_DB[${NAME_ARG_CONF}]}\" | " + fi + done + [[ -z ${STRING_ARG_CONF} ]] || echo -E "$(jq "${STRING_ARG_CONF%|*}" ${UBPILE_STORAGE_CONF_JSON})" > ${UBPILE_STORAGE_CONF_JSON} + else + true + fi + elif [[ ${COMMAND} == @("set-="|"set--="|"remove") ]]; then + if [[ ${PARAM%%=*} =~ ^.*'['(.*)']' ]]; then + NAME_VAR=${BASH_REMATCH[1]} + TEMPLATE_VALUE=$(jq ".${NAME_VAR}" ${UBPILE_CONF_JSON_TEMPLATE}) + [[ -f ${UBPILE_STORAGE_CONF_JSON} ]] && echo -E "$(jq ".${NAME_VAR} = ${TEMPLATE_VALUE}" ${UBPILE_STORAGE_CONF_JSON})" > ${UBPILE_STORAGE_CONF_JSON} + echo "INFO: you need restart systemd service UBPile" + #systemctl --quiet is-active ubpile.service &>/dev/null && systemctl --quiet restart ubpile.service &>/dev/null + else + rm -f ${UBPILE_STORAGE_CONF_JSON} || true + fi + fi +} + +## Настройки UBPile +## UBPILE=manager|admin|primary|worker|disable|clean +## manager|admin|primary # Выступать в роли сервера администратора/менеджера управляющего всеми исполнителями 'worker' +## worker # Исполнитель заданий приходящих от сервера администратора +## disable # Принудительно отключить +## clean # Очистить БД и вернуть настройки по умолчанию. После процедуры очистки установится UBPILE=disable +## ## UBPILE[secret_key|base_app_url|...]= -## secretkey # При настройке нескольких серверов все ваши серверы должны иметь один и тот же секретный ключ. Любая случайно сгенерированная строка подойдет +## secret_key # При настройке нескольких серверов все ваши серверы должны иметь один и тот же секретный ключ. Любая случайно сгенерированная строка подойдет +## # Если указать =random, будет сгенерирована случайная строка ## base_app_url # Полный URL-адрес, включая http порт, если он нестандартный. Это используется в электронных письмах для создания URL-адресов с самостоятельными ссылками ## email_from # Адрес электронной почты, который будет использоваться в качестве адреса "От" при отправке уведомлений ## smtp_hostname # Имя хоста вашего SMTP-сервера для отправки почты. Так-же это может быть `127.0.0.1` или `localhost` -## debug_level # Уровень детализации в журналах отладки. Он варьируется от 1 (очень тихо) до 10 (очень громко). Значение по умолчанию — 4 +## debug_level # Уровень детализации в журналах отладки. Он варьируется от 1 (очень тихо) до 10 (очень громко). Значение по умолчанию: 1 ## job_memory_max # Максимальное ограничение памяти по умолчанию для каждого задания, по умолчанию: 1073741824 (1Гб) ## ## server_comm_use_hostnames # Разрешить серверам подключаться друг к другу по именам хостов, полезно с меняющимися IP адресами. Значения: *false, true @@ -44,11 +118,39 @@ PATH_HAPROXY_UBPILE_CONF="/etc/haproxy/haproxy-ubpile.cfg" ## UBPILE[secret_key]="4a6ed27e0434490028ff63b11f12fb7c" ## UBPILE[base_app_url]="http://localhost:80" ## UBPILE[web_direct_connect]="true" -exec_01_ubpile(){ +exec_02_ubpile(){ clean_db(){ - [[ ${PATH_UBPILE}/data ]] && rm -rdf ${PATH_UBPILE}/data + [[ -n ${UBPILE_DB[0]} ]] || local UBPILE_DB="fs" + case ${UBPILE_DB[0]} in + fs) + [[ -d ${PATH_UBPILE}/data ]] && rm -rdf ${PATH_UBPILE}/data + ;; + sqlite) + cd ${PATH_UBPILE} + # Получить имя из storage.json и его удалить + [[ -f ${UBPILE_STORAGE_CONF_JSON} ]] && FILE_SQLITE_DB=$(jq ".SQL.connection.filename" ${UBPILE_STORAGE_CONF_JSON} | tr -d '"' 2>/dev/null) + [[ -n ${FILE_SQLITE_DB} ]] || FILE_SQLITE_DB=${PATH_UBPILE}/ubpile.db + [[ -f ${FILE_SQLITE_DB} ]] && rm -f ${FILE_SQLITE_DB} + ;; + *) true + ;; + esac } - [[ -d ${PATH_UBPILE} ]] || return 0 + ubpile_start(){ + [[ -d ${UBPILE_DATA} ]] && chmod go-rwx ${UBPILE_DATA} + [[ -d ${UBPILE_CONF} ]] && chmod go-rwx ${UBPILE_CONF} + [[ -n ${APP_UBPILE} ]] && { systemctl --quiet enable ubpile.service &>/dev/null; systemctl --quiet restart ubpile.service &>/dev/null; } + [[ -n ${APP_UBPILE_WORKFLOW} ]] && { systemctl --quiet enable ubpile-workflow.service &>/dev/null; systemctl --quiet restart ubpile-workflow.service &>/dev/null; } + } + ubpile_stop(){ + [[ -n ${APP_UBPILE} ]] && systemctl --quiet stop ubpile.service &>/dev/null + [[ -n ${APP_UBPILE_WORKFLOW} ]] && systemctl --quiet stop ubpile-workflow.service &>/dev/null + systemctl --quiet stop haproxy-ubpile.service &>/dev/null + [[ -n ${APP_UBPILE} ]] && systemctl --quiet disable ubpile.service &>/dev/null + [[ -n ${APP_UBPILE_WORKFLOW} ]] && systemctl --quiet disable ubpile-workflow.service &>/dev/null + systemctl --quiet disable haproxy-ubpile.service &>/dev/null + } + [[ -n ${APP_UBPILE} || -n ${APP_UBPILE_WORKFLOW} ]] || return 0 [[ ! -f ${UBPILE_CONF_JSON} || $(stat --printf="%s" ${UBPILE_CONF_JSON} 2>/dev/null) -lt 10 ]] && cp -f ${UBPILE_CONF_JSON_TEMPLATE} ${UBPILE_CONF_JSON} [[ $1 == @("set="|"set+="|"set++="|"set-="|"set--="|"remove") ]] && COMMAND=$1 && shift @@ -63,7 +165,15 @@ exec_01_ubpile(){ local STRING_ARG_CONF= if [[ -f ${UBPILE_CONF_JSON} ]]; then for NAME_ARG_CONF in "${!UBPILE[@]}"; do - if [[ ${NAME_ARG_CONF} != 0 ]] && [[ ${UBPILE[${NAME_ARG_CONF}]} =~ ^([[:digit:]]*|true|false)$ ]]; then + if [[ ${NAME_ARG_CONF} != 0 && ${NAME_ARG_CONF} == "secret_key" ]]; then + [[ ${UBPILE[${NAME_ARG_CONF}]} == "secret" ]] && continue + if [[ ${UBPILE[${NAME_ARG_CONF}]} == "random" ]]; then + UBPILE[${NAME_ARG_CONF}]="$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1)" + ubconfig --target global set [server] UBPILE[${NAME_ARG_CONF}]="${UBPILE[${NAME_ARG_CONF}]}" + fi + [[ -n ${APP_UBPILE} ]] && STRING_ARG_CONF+=".${NAME_ARG_CONF} = \"${UBPILE[${NAME_ARG_CONF}]}\" | " + [[ -n ${APP_UBPILE_WORKFLOW} ]] && echo "${UBPILE[${NAME_ARG_CONF}]}" > ${UBPILE_SECRET_KEY} && chmod 400 ${UBPILE_SECRET_KEY} + elif [[ ${NAME_ARG_CONF} != 0 ]] && [[ ${UBPILE[${NAME_ARG_CONF}]} =~ ^([[:digit:]]*|true|false)$ ]]; then STRING_ARG_CONF+=".${NAME_ARG_CONF} = ${UBPILE[${NAME_ARG_CONF}]} | " elif [[ ${NAME_ARG_CONF} != 0 ]]; then STRING_ARG_CONF+=".${NAME_ARG_CONF} = \"${UBPILE[${NAME_ARG_CONF}]}\" | " @@ -72,90 +182,107 @@ exec_01_ubpile(){ [[ -n ${STRING_ARG_CONF} ]] && echo -E "$(jq "${STRING_ARG_CONF%|*}" ${UBPILE_CONF_JSON})" > ${UBPILE_CONF_JSON} fi # Удалить ключ из системной конфигурации - [[ -n ${UBPILE[secret_key]} ]] && sed "/UBPILE\[secret_key\]=/d" -i ${SYSCONF}/server + [[ -n ${UBPILE[secret_key]} ]] && sed -E "s/(UBPILE\[secret_key\]=).*/\1=secret/" -i ${SYSCONF}/server if [[ ${UBPILE[0]} == "clean" ]]; then ubconfig set [server] UBPILE=disable clean_db - elif [[ ${UBPILE[0]} == "primary" ]]; then - #systemctl --quiet is-active ubpile.service &>/dev/null || - ${PATH_UBPILE}/bin/control.sh setup - chmod go-rwx ${UBPILE_DATA} ${UBPILE_CONF} - systemctl --quiet enable ubpile.service &>/dev/null - systemctl --quiet restart ubpile.service &>/dev/null + elif [[ ${UBPILE[0]} == @("manager"|"admin"|"master"|"primary") ]]; then + ubpile_stop + ${PATH_UBPILE}/bin/control.sh setup &>/dev/null + #node ${PATH_UBPILE}/bin/storage-cli.js setup + ubpile_start elif [[ ${UBPILE[0]} == "worker" ]]; then + ubpile_stop clean_db - chmod go-rwx ${UBPILE_DATA} ${UBPILE_CONF} - systemctl --quiet enable ubpile.service &>/dev/null - systemctl --quiet restart ubpile.service &>/dev/null + ubpile_start elif [[ ${UBPILE[0]} == "disable" ]]; then - systemctl --quiet stop ubpile.service haproxy-ubpile.service &>/dev/null - systemctl --quiet disable ubpile.service haproxy-ubpile.service &>/dev/null + ubpile_stop else - echo "INFO: you need restart UBPile: systemctl restart ubpile.service" + echo "INFO: you need restart systemd service UBPile" #systemctl --quiet is-active ubpile.service &>/dev/null && systemctl --quiet restart ubpile.service &>/dev/null fi elif [[ ${COMMAND} == @("set-="|"set--="|"remove") ]]; then if [[ ${PARAM%%=*} =~ ^.*'['(.*)']' ]]; then NAME_VAR=${BASH_REMATCH[1]} - TEMPLATE_VALUE=$(jq ".${NAME_VAR}" ${UBPILE_CONF_JSON_TEMPLATE}) - echo -E "$(jq ".${NAME_VAR} = ${TEMPLATE_VALUE}" ${UBPILE_CONF_JSON})" > ${UBPILE_CONF_JSON} - echo "INFO: you need restart UBPile: systemctl restart ubpile.service" - #systemctl --quiet is-active ubpile.service &>/dev/null && systemctl --quiet restart ubpile.service &>/dev/null + if [[ -n ${APP_UBPILE_WORKFLOW} && ${NAME_VAR} == "secret_key" ]]; then + # Если удаляется ключ, то установить из default по умолчанию + SOURCE=/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null + echo "${UBPILE[secret_key]}" > ${UBPILE_SECRET_KEY} + # Если удаляется ключ, то сгенирировать рандомный + #cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1 > ${UBPILE_SECRET_KEY} + #chmod 400 ${UBPILE_SECRET_KEY} + else + TEMPLATE_VALUE=$(jq ".${NAME_VAR}" ${UBPILE_CONF_JSON_TEMPLATE}) + echo -E "$(jq ".${NAME_VAR} = ${TEMPLATE_VALUE}" ${UBPILE_CONF_JSON})" > ${UBPILE_CONF_JSON} + echo "INFO: you need restart systemd service UBPile" + #systemctl --quiet is-active ubpile.service &>/dev/null && systemctl --quiet restart ubpile.service &>/dev/null + fi else - systemctl --quiet stop ubpile.service haproxy-ubpile.service &>/dev/null - systemctl --quiet disable ubpile.service haproxy-ubpile.service &>/dev/null + ubpile_stop || true fi fi - message_motd + # Только для простой версии UBPILE + [[ -z ${APP_UBPILE_WORKFLOW} ]] || message_motd } -## Использовать для UBPile преднастроенный обратный прокси, разместив приложение на указанном порту + +## Использовать для UBPile преднастроенный обратный прокси, разместив приложение на указанном порту. Должен быть установлен: haproxy ## UBPILE_REVERSE_PROXY=enable|disable| ## enable # Только включить автозапуск и запустить сервис haproxy-ubpile.service ## disable # Выключить и отключить автозапуск сервис haproxy-ubpile.service ## # Настроить http порт, включить автозапуск и запустить сервис haproxy-ubpile.service +## # Внимание, обатить внимание на настройки UBPILE[server_comm_use_hostnames] и UBPILE[web_socket_use_hostnames] ## # Если требуется настройка SSL, то необходимо полученный сертификат вручную прописать в файле конфигурации /etc/haproxy/haproxy-ubpile.cfg -## UBPILE_REVERSE_PROXY_PORT=80 -exec_02_reverse_proxy_port(){ - [[ -d ${PATH_UBPILE} ]] || return 0 +## UBPILE_REVERSE_PROXY=80 +exec_03_ubpile_reverse_proxy(){ + start_haproxy(){ + systemctl --quiet enable haproxy-ubpile.service &>/dev/null + systemctl --quiet restart haproxy-ubpile.service &>/dev/null + } + stop_haproxy(){ + systemctl --quiet stop haproxy-ubpile.service &>/dev/null + systemctl --quiet disable haproxy-ubpile.service &>/dev/null + } + [[ -n ${APP_UBPILE} || -n ${APP_UBPILE_WORKFLOW} ]] || return 0 + [[ -f /usr/bin/haproxy ]] || return 0 local STRING_ARG_CONF= [[ $1 == @("set="|"set+="|"set++="|"set-="|"set--="|"remove") ]] && COMMAND=$1 && shift [[ -n ${COMMAND} ]] || COMMAND="set=" local PARAM="$@" if [[ -n ${PARAM} ]]; then - local UBPILE_REVERSE_PROXY_PORT= + local UBPILE_REVERSE_PROXY= [[ ${PARAM%%=*} =~ [!\$%\&()*+,/\;\<\=\>?\^\{|\}~] ]] || eval "${PARAM%%=*}=\${PARAM#*=}" fi - if [[ ${COMMAND} == @("set="|"set+="|"set++=") ]] && [[ -n ${UBPILE_REVERSE_PROXY_PORT} ]]; then - if [[ ${UBPILE_REVERSE_PROXY_PORT} == @(disable|no) ]]; then + if [[ ${COMMAND} == @("set="|"set+="|"set++=") ]] && [[ -n ${UBPILE_REVERSE_PROXY} ]]; then + if [[ ${UBPILE_REVERSE_PROXY} == @(disable|no) ]]; then systemctl --quiet stop haproxy-ubpile.service &>/dev/null systemctl --quiet disable haproxy-ubpile.service &>/dev/null - elif [[ ${UBPILE_REVERSE_PROXY_PORT} == @(enable|yes) ]]; then + elif [[ ${UBPILE_REVERSE_PROXY} == @(enable|yes) ]]; then UBPILE_PORT="$(sed -En '/^\s*frontend http/,/^\s*backend/{s/^\s*bind.*:([[:digit:]]*).*/\1/p}' ${PATH_HAPROXY_UBPILE_CONF})" [[ $(declare -p UBPILE 2>/dev/null) =~ "declare -A" && -n ${UBPILE[web_direct_connect]} ]] || { ubconfig set [server] UBPILE[web_direct_connect]="true"; RESTART_UBPILE=yes; } [[ $(declare -p UBPILE 2>/dev/null) =~ "declare -A" && -n ${UBPILE[base_app_url]} ]] || { ubconfig set [server] UBPILE[base_app_url]="http://localhost:${UBPILE_PORT:-80}"; RESTART_UBPILE=yes; } - systemctl --quiet enable haproxy-ubpile.service &>/dev/null - systemctl --quiet restart haproxy-ubpile.service &>/dev/null - elif [[ ${UBPILE_REVERSE_PROXY_PORT} =~ ^[[:digit:]]*$ ]]; then + RESTART_HAPROXY=yes + elif [[ ${UBPILE_REVERSE_PROXY} =~ ^[[:digit:]]*$ ]]; then # Пропишем порт в конфиге haproxy - sed -E "/^\s*frontend http/,/^\s*backend/s/^\s*bind.*/ bind \*:${UBPILE_REVERSE_PROXY_PORT}/" -i ${PATH_HAPROXY_UBPILE_CONF} + sed -E "/^\s*frontend http/,/^\s*backend/s/^\s*bind.*/ bind \*:${UBPILE_REVERSE_PROXY}/" -i ${PATH_HAPROXY_UBPILE_CONF} # Если параметры не заданы в конфиге, то зададим ubconfig set [server] UBPILE[web_direct_connect]="true" - ubconfig set [server] UBPILE[base_app_url]="http://localhost:${UBPILE_REVERSE_PROXY_PORT:-3012}" - RESTART_UBPILE=yes - systemctl --quiet enable haproxy-ubpile.service &>/dev/null - systemctl --quiet restart haproxy-ubpile.service &>/dev/null + ubconfig set [server] UBPILE[base_app_url]="http://localhost:${UBPILE_REVERSE_PROXY:-3012}" + RESTART_UBPILE=yes + RESTART_HAPROXY=yes fi elif [[ ${COMMAND} == @("set-="|"set--="|"remove") ]]; then [[ -f ${UBPILE_CONF_JSON} ]] && UBPILE_PORT=$(jq '.WebServer.http_port' ${UBPILE_CONF_JSON}) [[ $(declare -p UBPILE 2>/dev/null) =~ "declare -A" && -n ${UBPILE[web_direct_connect]} ]] && { ubconfig remove [server] UBPILE[web_direct_connect]; RESTART_UBPILE=yes; } - [[ $(declare -p UBPILE 2>/dev/null) =~ "declare -A" && -n ${UBPILE[base_app_url]} ]] && { ubconfig remove [server] UBPILE[base_app_url]; RESTART_UBPILE=yes; } + [[ $(declare -p UBPILE 2>/dev/null) =~ "declare -A" && -n ${UBPILE[base_app_url]} ]] && { ubconfig remove [server] UBPILE[base_app_url]; RESTART_UBPILE=yes; } + stop_haproxy systemctl --quiet stop haproxy-ubpile.service &>/dev/null systemctl --quiet disable haproxy-ubpile.service &>/dev/null fi - [[ -n ${RESTART_UBPILE} ]] && systemctl --quiet is-active ubpile.service &>/dev/null && systemctl --quiet restart ubpile.service &>/dev/null - message_motd + [[ -n ${RESTART_UBPILE} && -n ${APP_UBPILE} ]] && { systemctl --quiet is-active ubpile.service &>/dev/null && systemctl --quiet restart ubpile.service &>/dev/null; message_motd; } + [[ -n ${RESTART_UBPILE} && -n ${APP_UBPILE_WORKFLOW} ]] && systemctl --quiet is-active ubpile-workflow.service &>/dev/null && systemctl --quiet restart ubpile-workflow.service &>/dev/null + [[ -z ${RESTART_HAPROXY} ]] || start_haproxy } message_motd(){ @@ -191,3 +318,4 @@ message_motd(){ done eval ${FUNCTION#*; } fi + diff --git a/ublinux/templates/ublinux-data.ini b/ublinux/templates/ublinux-data.ini index 2388bf1..801dbbc 100644 --- a/ublinux/templates/ublinux-data.ini +++ b/ublinux/templates/ublinux-data.ini @@ -734,40 +734,49 @@ GRUB_CMDLINE_LINUX="modprobe.blacklist=nouveau" ## usershare owner only # Разрешить только владельцу. Возможные значения 'yes' | 'no'. По умолчанию: yes ## Настройки UBPile -## UBPILE=admin|worker|disable|clean -## admin # Выступать в роли сервера администратора управляющего всеми 'worker' -## worker # Исполнитель заданий приходящих от сервера 'admin' -## disable # Отключить -## clean # Очистить БД и вернуть настройки по умолчанию. После процедуры очистки установится UBPILE=disable +## UBPILE=manager|admin|primary|worker|disable|clean +## manager|admin|primary # Выступать в роли сервера администратора/менеджера управляющего всеми исполнителями 'worker' +## worker # Исполнитель заданий приходящих от сервера администратора +## disable # Принудительно отключить +## clean # Очистить БД и вернуть настройки по умолчанию. После процедуры очистки установится UBPILE=disable ## -## UBPILE[secretkey|base_app_url|...]= -## secretkey # При настройке нескольких серверов все ваши серверы должны иметь один и тот же секретный ключ. Любая случайно сгенерированная строка подойдет -## base_app_url # Полный URL-адрес, включая http порт, если он нестандартный. Это используется в электронных письмах для создания URL-адресов с самостоятельными ссылками -## email_from # Адрес электронной почты, который будет использоваться в качестве адреса "От" при отправке уведомлений -## smtp_hostname # Имя хоста вашего SMTP-сервера для отправки почты. Так-же это может быть `127.0.0.1` или `localhost` -## debug_level # Уровень детализации в журналах отладки. Он варьируется от 1 (очень тихо) до 10 (очень громко). Значение по умолчанию — 4 -## job_memory_max # Максимальное ограничение памяти по умолчанию для каждого задания, по умолчанию: 1073741824 (1Гб) +## UBPILE[secret_key|base_app_url|...]= +## secret_key # При настройке нескольких серверов все ваши серверы должны иметь один и тот же секретный ключ. Любая случайно сгенерированная строка подойдет +## # Если указать =random, будет сгенерирована случайная строка +## base_app_url # Полный URL-адрес, включая http порт, если он нестандартный. Это используется в электронных письмах для создания URL-адресов с самостоятельными ссылками +## email_from # Адрес электронной почты, который будет использоваться в качестве адреса "От" при отправке уведомлений +## smtp_hostname # Имя хоста вашего SMTP-сервера для отправки почты. Так-же это может быть `127.0.0.1` или `localhost` +## debug_level # Уровень детализации в журналах отладки. Он варьируется от 1 (очень тихо) до 10 (очень громко). Значение по умолчанию: 1 +## job_memory_max # Максимальное ограничение памяти по умолчанию для каждого задания, по умолчанию: 1073741824 (1Гб) ## -## server_comm_use_hostnames # Разрешить серверам подключаться друг к другу по именам хостов, полезно с меняющимися IP адресами. Значения: *false, true -## web_direct_connect # Разрешить веб-интерфейсу прямое подключение к главному серверу, полезно при использовании нескольких резервных серверов -## # или балансировщик нагрузки или обратного прокси. Значения: *false, true -## web_socket_use_hostnames # Разрешить веб-интерфейсу подключаться к внутренним серверам, используя их имена хостов, а не IP-адреса. Значения: *false, true -## # Это свойство вступает в силу только в том случае, если web_direct_connect=true -## WebServer.http_port # Номер порта http веб-сервера для пользовательского интерфейса. По умолчанию: 9012 -## WebServer.https # Включить HTTPS, чтобы пользовательский интерфейс был зашифрован SSL. Значения: *false, true -## WebServer.https_port # Номер порта https веб-сервера для пользовательского интерфейса. По умолчанию: 9013 -## ... # Могут использоваться любые переменные конфигурационного файла config.json +## server_comm_use_hostnames # Разрешить серверам подключаться друг к другу по именам хостов, полезно с меняющимися IP адресами. Значения: *false, true +## web_direct_connect # Разрешить веб-интерфейсу прямое подключение к главному серверу, полезно при использовании нескольких резервных серверов +## # или балансировщик нагрузки или обратного прокси. Значения: *false, true +## web_socket_use_hostnames # Разрешить веб-интерфейсу подключаться к внутренним серверам, используя их имена хостов, а не IP-адреса. Значения: *false, true +## # Это свойство вступает в силу только в том случае, если web_direct_connect=true +## WebServer.http_port # Номер порта http веб-сервера для пользовательского интерфейса. По умолчанию: 9012 +## WebServer.https # Включить HTTPS, чтобы пользовательский интерфейс был зашифрован SSL. Значения: *false, true +## WebServer.https_port # Номер порта https веб-сервера для пользовательского интерфейса. По умолчанию: 9013 +## ... # Могут использоваться любые переменные конфигурационного файла config.json ## UBPILE[secret_key]="4a6ed27e0434490028ff63b11f12fb7c" ## UBPILE[base_app_url]="http://localhost:80" ## UBPILE[web_direct_connect]="true" +## +## Настройка база данных UBPile, файл настроек /opt/ubpile-workflow/conf/storage.json имеет приоритет над /opt/ubpile-workflow/conf/config.json +## По умолчанию *fs (filesystem) +## UBPILE_DB=*fs|sqlite|level|lmdb|mssql|mysql|oracle|postgres|redis|s3|sftp +## UBPILE_DB[SQL.connection.filename|...]= +## SQL.connection.filename # Для UBPILE_DB=sqlite местоположение файла БД, по умолчанию корень приложения /opt/ubpile-workflow +## UBPILE_DB[SQL.connection.filename]=ubpile.db ## Использовать для UBPile преднастроенный обратный прокси, разместив приложение на указанном порту ## UBPILE_REVERSE_PROXY=enable|disable| ## enable # Только включить автозапуск и запустить сервис haproxy-ubpile.service ## disable # Выключить и отключить автозапуск сервис haproxy-ubpile.service ## # Настроить http порт, включить автозапуск и запустить сервис haproxy-ubpile.service +## # Внимание, обатить внимание на настройки UBPILE[server_comm_use_hostnames] и UBPILE[web_socket_use_hostnames] ## # Если требуется настройка SSL, то необходимо полученный сертификат вручную прописать в файле конфигурации /etc/haproxy/haproxy-ubpile.cfg -## UBPILE_REVERSE_PROXY_PORT=80 +## UBPILE_REVERSE_PROXY=80 #TODO: Переоценить необходимость ## Адрес сервера ublinux-server по умолчанию