mirror of
https://github.com/dokku/dokku.git
synced 2025-12-29 00:25:08 +01:00
A recent update to compose executes a stat call in the current working directory, which may have incorrect permissions for execution once the user is changed to the dokku user. This change forces all compose commands to execute in the /tmp directory by using a helper function to execute compose up/down. Closes #7705
168 lines
5.0 KiB
Bash
Executable File
168 lines
5.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
|
|
source "$PLUGIN_AVAILABLE_PATH/traefik-vhosts/internal-functions"
|
|
set -eo pipefail
|
|
[[ $DOKKU_TRACE ]] && set -x
|
|
|
|
cmd-traefik-report() {
|
|
declare desc="displays a traefik report for one or more apps"
|
|
declare cmd="traefik:report"
|
|
[[ "$1" == "$cmd" ]] && shift 1
|
|
declare APP="$1" INFO_FLAG="$2"
|
|
|
|
if [[ -n "$APP" ]] && [[ "$APP" == --* ]]; then
|
|
INFO_FLAG="$APP"
|
|
APP=""
|
|
fi
|
|
|
|
if [[ -z "$APP" ]] && [[ -z "$INFO_FLAG" ]]; then
|
|
INFO_FLAG="true"
|
|
fi
|
|
|
|
if [[ -z "$APP" ]]; then
|
|
for app in $(dokku_apps); do
|
|
cmd-traefik-report-single "$app" "$INFO_FLAG" | tee || true
|
|
done
|
|
else
|
|
cmd-traefik-report-single "$APP" "$INFO_FLAG"
|
|
fi
|
|
}
|
|
|
|
cmd-traefik-report-single() {
|
|
declare APP="$1" INFO_FLAG="$2"
|
|
if [[ "$INFO_FLAG" == "true" ]]; then
|
|
INFO_FLAG=""
|
|
fi
|
|
verify_app_name "$APP"
|
|
local flag_map=(
|
|
"--traefik-api-enabled: $(fn-traefik-api-enabled)"
|
|
"--traefik-api-vhost: $(fn-traefik-api-vhost)"
|
|
"--traefik-basic-auth-password: $(fn-traefik-basic-auth-password)"
|
|
"--traefik-basic-auth-username: $(fn-traefik-basic-auth-username)"
|
|
"--traefik-dashboard-enabled: $(fn-traefik-dashboard-enabled)"
|
|
"--traefik-image: $(fn-traefik-image)"
|
|
"--traefik-letsencrypt-email: $(fn-traefik-letsencrypt-email)"
|
|
"--traefik-letsencrypt-server: $(fn-traefik-letsencrypt-server)"
|
|
"--traefik-log-level: $(fn-traefik-log-level)"
|
|
"--traefik-http-entry-point: $(fn-traefik-http-entry-point)"
|
|
"--traefik-https-entry-point: $(fn-traefik-https-entry-point)"
|
|
)
|
|
|
|
if [[ -z "$INFO_FLAG" ]]; then
|
|
dokku_log_info2_quiet "${APP} traefik information"
|
|
for flag in "${flag_map[@]}"; do
|
|
key="$(echo "${flag#--}" | cut -f1 -d' ' | tr - ' ')"
|
|
dokku_log_verbose "$(printf "%-30s %-25s" "${key^}" "${flag#*: }")"
|
|
done
|
|
else
|
|
local match=false
|
|
local value_exists=false
|
|
for flag in "${flag_map[@]}"; do
|
|
valid_flags="${valid_flags} $(echo "$flag" | cut -d':' -f1)"
|
|
if [[ "$flag" == "${INFO_FLAG}:"* ]]; then
|
|
value=${flag#*: }
|
|
size="${#value}"
|
|
if [[ "$size" -ne 0 ]]; then
|
|
echo "$value" && match=true && value_exists=true
|
|
else
|
|
match=true
|
|
fi
|
|
fi
|
|
done
|
|
[[ "$match" == "true" ]] || dokku_log_fail "Invalid flag passed, valid flags:${valid_flags}"
|
|
fi
|
|
}
|
|
|
|
cmd-traefik-logs() {
|
|
declare desc="display traefik logs from command line"
|
|
declare cmd="traefik:logs"
|
|
[[ "$1" == "$cmd" ]] && shift 1
|
|
local NUM="100" TAIL=false
|
|
|
|
local TEMP=$(getopt -o htn: --long help,tail,num: -n 'dokku traefik:logs' -- "$@")
|
|
local EXIT_CODE="$?"
|
|
if [[ "$EXIT_CODE" != 0 ]]; then
|
|
fn-traefik-logs-usage >&2
|
|
exit 1
|
|
fi
|
|
eval set -- "$TEMP"
|
|
|
|
while true; do
|
|
case "$1" in
|
|
-t | --tail)
|
|
local TAIL=true
|
|
shift
|
|
;;
|
|
-n | --num)
|
|
local NUM="$2"
|
|
shift 2
|
|
;;
|
|
--)
|
|
shift
|
|
break
|
|
;;
|
|
*) dokku_log_fail "Internal error" ;;
|
|
esac
|
|
done
|
|
|
|
fn-traefik-logs "$TAIL" "$NUM"
|
|
}
|
|
|
|
cmd-traefik-show-config() {
|
|
declare desc="display traefik config"
|
|
declare cmd="traefik:show-config"
|
|
[[ "$1" == "$cmd" ]] && shift 1
|
|
|
|
if ! fn-is-compose-installed; then
|
|
dokku_log_fail "Required docker compose plugin is not installed"
|
|
fi
|
|
|
|
local TMP_COMPOSE_FILE=$(mktemp "/tmp/dokku-${DOKKU_PID}-${FUNCNAME[0]}.XXXXXX")
|
|
trap "rm -rf '$TMP_COMPOSE_FILE' >/dev/null" RETURN INT TERM EXIT
|
|
|
|
fn-traefik-template-compose-file "$TMP_COMPOSE_FILE"
|
|
cat "$TMP_COMPOSE_FILE"
|
|
}
|
|
|
|
cmd-traefik-start() {
|
|
declare desc="Starts the traefik server"
|
|
declare cmd="traefik:start"
|
|
[[ "$1" == "$cmd" ]] && shift 1
|
|
|
|
if ! fn-is-compose-installed; then
|
|
dokku_log_fail "Required docker compose plugin is not installed"
|
|
fi
|
|
|
|
local TMP_COMPOSE_FILE=$(mktemp "/tmp/dokku-${DOKKU_PID}-${FUNCNAME[0]}.XXXXXX")
|
|
trap "rm -rf '$TMP_COMPOSE_FILE' >/dev/null" RETURN INT TERM EXIT
|
|
|
|
fn-plugin-property-write "traefik" "--global" "proxy-status" "started"
|
|
touch "${DOKKU_LIB_ROOT}/data/traefik/traefik-acme.json"
|
|
chmod 600 "${DOKKU_LIB_ROOT}/data/traefik/traefik-acme.json"
|
|
fn-traefik-template-compose-file "$TMP_COMPOSE_FILE"
|
|
if ! "$PLUGIN_CORE_AVAILABLE_PATH/common/common" compose-up "traefik" "$TMP_COMPOSE_FILE"; then
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
cmd-traefik-stop() {
|
|
declare desc="Stops the traefik server"
|
|
declare cmd="traefik:stop"
|
|
[[ "$1" == "$cmd" ]] && shift 1
|
|
|
|
if ! fn-is-compose-installed; then
|
|
dokku_log_fail "Required docker compose plugin is not installed"
|
|
fi
|
|
|
|
local TMP_COMPOSE_FILE=$(mktemp "/tmp/dokku-${DOKKU_PID}-${FUNCNAME[0]}.XXXXXX")
|
|
trap "rm -rf '$TMP_COMPOSE_FILE' >/dev/null" RETURN INT TERM EXIT
|
|
|
|
fn-plugin-property-write "traefik" "--global" "proxy-status" "stopped"
|
|
touch "${DOKKU_LIB_ROOT}/data/traefik/traefik-acme.json"
|
|
chmod 600 "${DOKKU_LIB_ROOT}/data/traefik/traefik-acme.json"
|
|
fn-traefik-template-compose-file "$TMP_COMPOSE_FILE"
|
|
if ! "$PLUGIN_CORE_AVAILABLE_PATH/common/common" compose-down "traefik" "$TMP_COMPOSE_FILE"; then
|
|
return 1
|
|
fi
|
|
}
|