This plugin uses a docker-compose based Caddy installation in conjunction with injected container labels to route requests. It only exposes the minimal necessary for routing traffic to docker containers. Users wishing to customize further labels may explore using the docker-options plugin to attach additional labels during the 'deploy' phase.
141 lines
3.8 KiB
Bash
Executable File
141 lines
3.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
|
|
source "$PLUGIN_AVAILABLE_PATH/caddy-vhosts/internal-functions"
|
|
set -eo pipefail
|
|
[[ $DOKKU_TRACE ]] && set -x
|
|
|
|
cmd-caddy-report() {
|
|
declare desc="displays a caddy report for one or more apps"
|
|
declare cmd="caddy: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-caddy-report-single "$app" "$INFO_FLAG" | tee || true
|
|
done
|
|
else
|
|
cmd-caddy-report-single "$APP" "$INFO_FLAG"
|
|
fi
|
|
}
|
|
|
|
cmd-caddy-report-single() {
|
|
declare APP="$1" INFO_FLAG="$2"
|
|
if [[ "$INFO_FLAG" == "true" ]]; then
|
|
INFO_FLAG=""
|
|
fi
|
|
verify_app_name "$APP"
|
|
local flag_map=(
|
|
"--caddy-image: $(fn-caddy-image)"
|
|
"--caddy-letsencrypt-email: $(fn-caddy-letsencrypt-email)"
|
|
"--caddy-letsencrypt-server: $(fn-caddy-letsencrypt-email)"
|
|
"--caddy-log-level: $(fn-caddy-log-level)"
|
|
"--caddy-polling-interval: $(fn-caddy-polling-interval)"
|
|
"--caddy-tls-internal: $(fn-caddy-tls-internal "$APP")"
|
|
)
|
|
|
|
if [[ -z "$INFO_FLAG" ]]; then
|
|
dokku_log_info2_quiet "${APP} caddy 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-caddy-logs() {
|
|
declare desc="display caddy logs from command line"
|
|
declare cmd="caddy:logs"
|
|
[[ "$1" == "$cmd" ]] && shift 1
|
|
local NUM="100" TAIL=false
|
|
|
|
local TEMP=$(getopt -o htn: --long help,tail,num: -n 'dokku caddy:logs' -- "$@")
|
|
local EXIT_CODE="$?"
|
|
if [[ "$EXIT_CODE" != 0 ]]; then
|
|
fn-caddy-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-caddy-logs "$TAIL" "$NUM"
|
|
}
|
|
|
|
cmd-caddy-show-config() {
|
|
declare desc="display caddy config"
|
|
declare cmd="caddy:show-config"
|
|
[[ "$1" == "$cmd" ]] && shift 1
|
|
|
|
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-caddy-template-compose-file "$TMP_COMPOSE_FILE"
|
|
cat "$TMP_COMPOSE_FILE"
|
|
}
|
|
|
|
cmd-caddy-start() {
|
|
declare desc="Starts the caddy server"
|
|
declare cmd="caddy:start"
|
|
[[ "$1" == "$cmd" ]] && shift 1
|
|
|
|
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-caddy-template-compose-file "$TMP_COMPOSE_FILE"
|
|
"$DOCKER_BIN" compose -f "$TMP_COMPOSE_FILE" -p caddy up -d --quiet-pull
|
|
}
|
|
|
|
cmd-caddy-stop() {
|
|
declare desc="Starts the caddy server"
|
|
declare cmd="caddy:start"
|
|
[[ "$1" == "$cmd" ]] && shift 1
|
|
|
|
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-caddy-template-compose-file "$TMP_COMPOSE_FILE"
|
|
"$DOCKER_BIN" compose -f "$TMP_COMPOSE_FILE" -p caddy down --remove-orphans
|
|
}
|