refactor(nginx): deduplicate sigil params in nginx_build_config
Merge the deployed and empty-listeners branches into a single flow that shares the SIGIL_PARAMS array, temp dir setup, sigil rendering, and nginx reload. Branch only for deployed-specific logic: image verification, custom template lookup, per-process listeners, and HSTS.
This commit is contained in:
@@ -318,28 +318,38 @@ nginx_build_config() {
|
|||||||
dokku_log_warn_quiet "No web listeners specified for $APP"
|
dokku_log_warn_quiet "No web listeners specified for $APP"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
local IS_DEPLOYED_WITH_LISTENERS=false
|
||||||
if [[ -n "$DOKKU_APP_LISTENERS" ]] && (is_deployed "$APP"); then
|
if [[ -n "$DOKKU_APP_LISTENERS" ]] && (is_deployed "$APP"); then
|
||||||
if [[ "$(plugn trigger network-get-static-listeners "$APP" "web")" == "" ]]; then
|
IS_DEPLOYED_WITH_LISTENERS=true
|
||||||
local IMAGE_TAG=$(get_running_image_tag "$APP")
|
fi
|
||||||
local IMAGE=$(get_deploying_app_image_name "$APP" "$IMAGE_TAG" 2>/dev/null)
|
|
||||||
if ! verify_image "$IMAGE" 2>/dev/null; then
|
if [[ "$IS_DEPLOYED_WITH_LISTENERS" == "true" ]] || { [[ -z "$DOKKU_APP_LISTENERS" ]] && [[ -z "$PASSED_LISTEN_IP_PORT" ]]; }; then
|
||||||
dokku_log_fail "Missing image for app"
|
if [[ "$IS_DEPLOYED_WITH_LISTENERS" == "true" ]]; then
|
||||||
|
if [[ "$(plugn trigger network-get-static-listeners "$APP" "web")" == "" ]]; then
|
||||||
|
local IMAGE_TAG=$(get_running_image_tag "$APP")
|
||||||
|
local IMAGE=$(get_deploying_app_image_name "$APP" "$IMAGE_TAG" 2>/dev/null)
|
||||||
|
if ! verify_image "$IMAGE" 2>/dev/null; then
|
||||||
|
dokku_log_fail "Missing image for app"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
local NGINX_BUILD_CONFIG_TMP_WORK_DIR=$(mktemp -d "/tmp/dokku-${DOKKU_PID}-${FUNCNAME[0]}.XXXXXX")
|
local NGINX_BUILD_CONFIG_TMP_WORK_DIR=$(mktemp -d "/tmp/dokku-${DOKKU_PID}-${FUNCNAME[0]}.XXXXXX")
|
||||||
local NGINX_CONF=$(mktemp --tmpdir="${NGINX_BUILD_CONFIG_TMP_WORK_DIR}" "nginx.conf.XXXXXX")
|
local NGINX_CONF=$(mktemp --tmpdir="${NGINX_BUILD_CONFIG_TMP_WORK_DIR}" "nginx.conf.XXXXXX")
|
||||||
local CUSTOM_NGINX_TEMPLATE="$NGINX_BUILD_CONFIG_TMP_WORK_DIR/$NGINX_TEMPLATE_NAME"
|
|
||||||
trap "rm -rf '$NGINX_CONF' '$NGINX_BUILD_CONFIG_TMP_WORK_DIR' >/dev/null" RETURN INT TERM EXIT
|
trap "rm -rf '$NGINX_CONF' '$NGINX_BUILD_CONFIG_TMP_WORK_DIR' >/dev/null" RETURN INT TERM EXIT
|
||||||
|
|
||||||
get_custom_nginx_template "$APP" "$CUSTOM_NGINX_TEMPLATE" 2>/dev/null
|
if [[ "$IS_DEPLOYED_WITH_LISTENERS" == "true" ]]; then
|
||||||
if [[ -f "$CUSTOM_NGINX_TEMPLATE" ]]; then
|
local CUSTOM_NGINX_TEMPLATE="$NGINX_BUILD_CONFIG_TMP_WORK_DIR/$NGINX_TEMPLATE_NAME"
|
||||||
dokku_log_info1 'Overriding default nginx.conf with detected nginx.conf.sigil'
|
get_custom_nginx_template "$APP" "$CUSTOM_NGINX_TEMPLATE" 2>/dev/null
|
||||||
local NGINX_TEMPLATE="$CUSTOM_NGINX_TEMPLATE"
|
if [[ -f "$CUSTOM_NGINX_TEMPLATE" ]]; then
|
||||||
local NGINX_TEMPLATE_SOURCE="app-supplied"
|
dokku_log_info1 'Overriding default nginx.conf with detected nginx.conf.sigil'
|
||||||
|
local NGINX_TEMPLATE="$CUSTOM_NGINX_TEMPLATE"
|
||||||
|
local NGINX_TEMPLATE_SOURCE="app-supplied"
|
||||||
|
fi
|
||||||
|
|
||||||
|
eval "$(config_export app "$APP")"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
eval "$(config_export app "$APP")"
|
|
||||||
local SIGIL_PARAMS=(-f "$NGINX_TEMPLATE" APP="$APP" DOKKU_ROOT="$DOKKU_ROOT"
|
local SIGIL_PARAMS=(-f "$NGINX_TEMPLATE" APP="$APP" DOKKU_ROOT="$DOKKU_ROOT"
|
||||||
NOSSL_SERVER_NAME="$NOSSL_SERVER_NAME"
|
NOSSL_SERVER_NAME="$NOSSL_SERVER_NAME"
|
||||||
# Deprecated: Remove this after a few versions
|
# Deprecated: Remove this after a few versions
|
||||||
@@ -384,87 +394,30 @@ nginx_build_config() {
|
|||||||
PROXY_X_FORWARDED_PROTO="$PROXY_X_FORWARDED_PROTO"
|
PROXY_X_FORWARDED_PROTO="$PROXY_X_FORWARDED_PROTO"
|
||||||
PROXY_X_FORWARDED_SSL="$PROXY_X_FORWARDED_SSL")
|
PROXY_X_FORWARDED_SSL="$PROXY_X_FORWARDED_SSL")
|
||||||
|
|
||||||
while read -r line || [[ -n "$line" ]]; do
|
if [[ "$IS_DEPLOYED_WITH_LISTENERS" == "true" ]]; then
|
||||||
PROC_TYPE=${line%%=*}
|
while read -r line || [[ -n "$line" ]]; do
|
||||||
LISTENERS="$(plugn trigger network-get-listeners "$APP" "$PROC_TYPE" | xargs)"
|
PROC_TYPE=${line%%=*}
|
||||||
UPP_PROC_TYPE="${PROC_TYPE^^}"
|
LISTENERS="$(plugn trigger network-get-listeners "$APP" "$PROC_TYPE" | xargs)"
|
||||||
UPP_PROC_TYPE="${UPP_PROC_TYPE//-/_}"
|
UPP_PROC_TYPE="${PROC_TYPE^^}"
|
||||||
SIGIL_PARAMS+=("DOKKU_APP_${UPP_PROC_TYPE}_LISTENERS=$LISTENERS")
|
UPP_PROC_TYPE="${UPP_PROC_TYPE//-/_}"
|
||||||
done < <(plugn trigger ps-current-scale "$APP")
|
SIGIL_PARAMS+=("DOKKU_APP_${UPP_PROC_TYPE}_LISTENERS=$LISTENERS")
|
||||||
|
done < <(plugn trigger ps-current-scale "$APP")
|
||||||
|
|
||||||
if grep DOKKU_APP_LISTENERS "$NGINX_TEMPLATE"; then
|
if grep DOKKU_APP_LISTENERS "$NGINX_TEMPLATE"; then
|
||||||
dokku_log_warn "Deprecated: Usage of DOKKU_APP_LISTENERS within nginx.conf.sigil templates is deprecated in favor of DOKKU_APP_WEB_LISTENERS"
|
dokku_log_warn "Deprecated: Usage of DOKKU_APP_LISTENERS within nginx.conf.sigil templates is deprecated in favor of DOKKU_APP_WEB_LISTENERS"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if grep NGINX_SSL_PORT "$NGINX_TEMPLATE"; then
|
||||||
|
dokku_log_warn "Deprecated: Usage of NGINX_SSL_PORT within nginx.conf.sigil templates is deprecated in favor of PROXY_SSL_PORT"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if grep NGINX_PORT "$NGINX_TEMPLATE"; then
|
||||||
|
dokku_log_warn "Deprecated: Usage of NGINX_PORT within nginx.conf.sigil templates is deprecated in favor of PROXY_PORT"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
SIGIL_PARAMS+=(DOKKU_APP_WEB_LISTENERS="")
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if grep NGINX_SSL_PORT "$NGINX_TEMPLATE"; then
|
|
||||||
dokku_log_warn "Deprecated: Usage of NGINX_SSL_PORT within nginx.conf.sigil templates is deprecated in favor of PROXY_SSL_PORT"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if grep NGINX_PORT "$NGINX_TEMPLATE"; then
|
|
||||||
dokku_log_warn "Deprecated: Usage of NGINX_PORT within nginx.conf.sigil templates is deprecated in favor of PROXY_PORT"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# execute sigil template processing
|
|
||||||
xargs -i echo "-----> Configuring {}...(using $NGINX_TEMPLATE_SOURCE template)" <<<"$(echo "${SSL_VHOSTS}" "${NONSSL_VHOSTS}" | tr ' ' '\n' | sort -u)"
|
|
||||||
sigil "${SIGIL_PARAMS[@]}" | cat -s >"$NGINX_CONF"
|
|
||||||
|
|
||||||
dokku_log_info1 "Creating $SCHEME nginx.conf"
|
|
||||||
mv "$NGINX_CONF" "$DOKKU_ROOT/$APP/nginx.conf"
|
|
||||||
|
|
||||||
fn-nginx-vhosts-manage-hsts "$APP" "$SSL_INUSE"
|
|
||||||
|
|
||||||
plugn trigger nginx-pre-reload "$APP" "$DOKKU_APP_LISTEN_PORT" "$DOKKU_APP_LISTEN_IP"
|
|
||||||
|
|
||||||
dokku_log_verbose "Reloading nginx"
|
|
||||||
validate_nginx && restart_nginx >/dev/null
|
|
||||||
elif [[ -z "$DOKKU_APP_LISTENERS" ]] && [[ -z "$PASSED_LISTEN_IP_PORT" ]]; then
|
|
||||||
local NGINX_BUILD_CONFIG_TMP_WORK_DIR=$(mktemp -d "/tmp/dokku-${DOKKU_PID}-${FUNCNAME[0]}.XXXXXX")
|
|
||||||
local NGINX_CONF=$(mktemp --tmpdir="${NGINX_BUILD_CONFIG_TMP_WORK_DIR}" "nginx.conf.XXXXXX")
|
|
||||||
trap "rm -rf '$NGINX_CONF' '$NGINX_BUILD_CONFIG_TMP_WORK_DIR' >/dev/null" RETURN INT TERM EXIT
|
|
||||||
|
|
||||||
local SIGIL_PARAMS=(-f "$NGINX_TEMPLATE" APP="$APP" DOKKU_ROOT="$DOKKU_ROOT"
|
|
||||||
NOSSL_SERVER_NAME="$NOSSL_SERVER_NAME"
|
|
||||||
DOKKU_APP_LISTENERS=""
|
|
||||||
DOKKU_APP_WEB_LISTENERS=""
|
|
||||||
DOKKU_LIB_ROOT="$DOKKU_LIB_ROOT"
|
|
||||||
PASSED_LISTEN_IP_PORT=""
|
|
||||||
SPDY_SUPPORTED="$SPDY_SUPPORTED"
|
|
||||||
TLS13_SUPPORTED="$TLS13_SUPPORTED"
|
|
||||||
HTTP2_SUPPORTED="$HTTP2_SUPPORTED"
|
|
||||||
NGINX_LOG_ROOT="$NGINX_LOG_ROOT"
|
|
||||||
NGINX_ACCESS_LOG_FORMAT="$NGINX_ACCESS_LOG_FORMAT"
|
|
||||||
NGINX_ACCESS_LOG_PATH="$NGINX_ACCESS_LOG_PATH"
|
|
||||||
NGINX_ERROR_LOG_PATH="$NGINX_ERROR_LOG_PATH"
|
|
||||||
NGINX_BIND_ADDRESS_IP4="$NGINX_BIND_ADDRESS_IP4"
|
|
||||||
NGINX_BIND_ADDRESS_IP6="$NGINX_BIND_ADDRESS_IP6"
|
|
||||||
HTTP2_DIRECTIVE_SUPPORTED="$HTTP2_DIRECTIVE_SUPPORTED"
|
|
||||||
HTTP2_PUSH_SUPPORTED="$HTTP2_PUSH_SUPPORTED"
|
|
||||||
GRPC_SUPPORTED="$GRPC_SUPPORTED"
|
|
||||||
DOKKU_APP_LISTEN_PORT="" DOKKU_APP_LISTEN_IP=""
|
|
||||||
APP_SSL_PATH="$APP_SSL_PATH" SSL_INUSE="$SSL_INUSE" SSL_SERVER_NAME="$SSL_SERVER_NAME"
|
|
||||||
CLIENT_BODY_TIMEOUT="$CLIENT_BODY_TIMEOUT"
|
|
||||||
CLIENT_HEADER_TIMEOUT="$CLIENT_HEADER_TIMEOUT"
|
|
||||||
CLIENT_MAX_BODY_SIZE="$CLIENT_MAX_BODY_SIZE"
|
|
||||||
KEEPALIVE_TIMEOUT="$KEEPALIVE_TIMEOUT"
|
|
||||||
LINGERING_TIMEOUT="$LINGERING_TIMEOUT"
|
|
||||||
PROXY_CONNECT_TIMEOUT="$PROXY_CONNECT_TIMEOUT"
|
|
||||||
PROXY_READ_TIMEOUT="$PROXY_READ_TIMEOUT"
|
|
||||||
PROXY_SEND_TIMEOUT="$PROXY_SEND_TIMEOUT"
|
|
||||||
SEND_TIMEOUT="$SEND_TIMEOUT"
|
|
||||||
PROXY_BUFFER_SIZE="$PROXY_BUFFER_SIZE"
|
|
||||||
PROXY_BUFFERING="$PROXY_BUFFERING"
|
|
||||||
PROXY_BUFFERS="$PROXY_BUFFERS"
|
|
||||||
PROXY_BUSY_BUFFERS_SIZE="$PROXY_BUSY_BUFFERS_SIZE"
|
|
||||||
PROXY_KEEPALIVE="$PROXY_KEEPALIVE"
|
|
||||||
NGINX_UNDERSCORE_IN_HEADERS="$NGINX_UNDERSCORE_IN_HEADERS"
|
|
||||||
NGINX_PORT="$PROXY_PORT" NGINX_SSL_PORT="$PROXY_SSL_PORT"
|
|
||||||
PROXY_PORT="$PROXY_PORT" PROXY_SSL_PORT="$PROXY_SSL_PORT"
|
|
||||||
PROXY_PORT_MAP="$PROXY_PORT_MAP" PROXY_UPSTREAM_PORTS="$PROXY_UPSTREAM_PORTS"
|
|
||||||
PROXY_X_FORWARDED_FOR="$PROXY_X_FORWARDED_FOR"
|
|
||||||
PROXY_X_FORWARDED_PORT="$PROXY_X_FORWARDED_PORT"
|
|
||||||
PROXY_X_FORWARDED_PROTO="$PROXY_X_FORWARDED_PROTO"
|
|
||||||
PROXY_X_FORWARDED_SSL="$PROXY_X_FORWARDED_SSL")
|
|
||||||
|
|
||||||
xargs -i echo "-----> Configuring {}...(using $NGINX_TEMPLATE_SOURCE template)" <<<"$(echo "${SSL_VHOSTS}" "${NONSSL_VHOSTS}" | tr ' ' '\n' | sort -u)"
|
xargs -i echo "-----> Configuring {}...(using $NGINX_TEMPLATE_SOURCE template)" <<<"$(echo "${SSL_VHOSTS}" "${NONSSL_VHOSTS}" | tr ' ' '\n' | sort -u)"
|
||||||
sigil "${SIGIL_PARAMS[@]}" | cat -s >"$NGINX_CONF"
|
sigil "${SIGIL_PARAMS[@]}" | cat -s >"$NGINX_CONF"
|
||||||
|
|
||||||
@@ -472,6 +425,10 @@ nginx_build_config() {
|
|||||||
mkdir -p "$DOKKU_ROOT/$APP/nginx.conf.d"
|
mkdir -p "$DOKKU_ROOT/$APP/nginx.conf.d"
|
||||||
mv "$NGINX_CONF" "$DOKKU_ROOT/$APP/nginx.conf"
|
mv "$NGINX_CONF" "$DOKKU_ROOT/$APP/nginx.conf"
|
||||||
|
|
||||||
|
if [[ "$IS_DEPLOYED_WITH_LISTENERS" == "true" ]]; then
|
||||||
|
fn-nginx-vhosts-manage-hsts "$APP" "$SSL_INUSE"
|
||||||
|
fi
|
||||||
|
|
||||||
plugn trigger nginx-pre-reload "$APP" "$DOKKU_APP_LISTEN_PORT" "$DOKKU_APP_LISTEN_IP"
|
plugn trigger nginx-pre-reload "$APP" "$DOKKU_APP_LISTEN_PORT" "$DOKKU_APP_LISTEN_IP"
|
||||||
|
|
||||||
dokku_log_verbose "Reloading nginx"
|
dokku_log_verbose "Reloading nginx"
|
||||||
|
|||||||
Reference in New Issue
Block a user