Fix UBPILE and new UBPILE_DB

master v2.81
Dmitry Razumov 2 years ago
parent 94152ec99c
commit ad855b2e40
Signed by: asmeron
GPG Key ID: 50BC1DB583B79706

@ -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"

@ -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
;;

@ -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|...]=<value>
## 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|...]=<value>
## secretkey # При настройке нескольких серверов все ваши серверы должны иметь один и тот же секретный ключ. Любая случайно сгенерированная строка подойдет
## secret_key # При настройке нескольких серверов все ваши серверы должны иметь один и тот же секретный ключ. Любая случайно сгенерированная строка подойдет
## # Если указать <value>=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|<http_port>
## enable # Только включить автозапуск и запустить сервис haproxy-ubpile.service
## disable # Выключить и отключить автозапуск сервис haproxy-ubpile.service
## <http_port> # Настроить 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

@ -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|...]=<value>
## 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|...]=<value>
## secret_key # При настройке нескольких серверов все ваши серверы должны иметь один и тот же секретный ключ. Любая случайно сгенерированная строка подойдет
## # Если указать <value>=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|...]=<value>
## SQL.connection.filename # Для UBPILE_DB=sqlite местоположение файла БД, по умолчанию корень приложения /opt/ubpile-workflow
## UBPILE_DB[SQL.connection.filename]=ubpile.db
## Использовать для UBPile преднастроенный обратный прокси, разместив приложение на указанном порту
## UBPILE_REVERSE_PROXY=enable|disable|<http_port>
## enable # Только включить автозапуск и запустить сервис haproxy-ubpile.service
## disable # Выключить и отключить автозапуск сервис haproxy-ubpile.service
## <http_port> # Настроить 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 по умолчанию

Loading…
Cancel
Save