Proxy Setup Init
This commit is contained in:
77
install.sh
77
install.sh
@@ -1,7 +1,41 @@
|
||||
#!/usr/bin/env bash
|
||||
set -Eeuo pipefail
|
||||
|
||||
# Debug mode: 0 = nur JSON, 1 = Logs auf stderr
|
||||
DEBUG="${DEBUG:-0}"
|
||||
export DEBUG
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
|
||||
# Log-Verzeichnis
|
||||
LOG_DIR="${SCRIPT_DIR}/logs"
|
||||
mkdir -p "${LOG_DIR}"
|
||||
|
||||
# Temporäre Log-Datei (wird später umbenannt nach Container-Hostname)
|
||||
TEMP_LOG="${LOG_DIR}/install_$$.log"
|
||||
FINAL_LOG=""
|
||||
|
||||
# Funktion zum Aufräumen bei Exit
|
||||
cleanup_log() {
|
||||
# Wenn FINAL_LOG gesetzt ist, umbenennen
|
||||
if [[ -n "${FINAL_LOG}" && -f "${TEMP_LOG}" ]]; then
|
||||
mv "${TEMP_LOG}" "${FINAL_LOG}"
|
||||
fi
|
||||
}
|
||||
trap cleanup_log EXIT
|
||||
|
||||
# Alle Ausgaben in Log-Datei umleiten
|
||||
# Bei DEBUG=1: auch auf stderr ausgeben (tee)
|
||||
# Bei DEBUG=0: nur in Datei
|
||||
if [[ "$DEBUG" == "1" ]]; then
|
||||
# Debug-Modus: Ausgabe auf stderr UND in Datei
|
||||
exec > >(tee -a "${TEMP_LOG}") 2>&1
|
||||
else
|
||||
# Normal-Modus: Nur in Datei, stdout bleibt für JSON frei
|
||||
exec 3>&1 # stdout (fd 3) für JSON reservieren
|
||||
exec > "${TEMP_LOG}" 2>&1
|
||||
fi
|
||||
|
||||
source "${SCRIPT_DIR}/libsupabase.sh"
|
||||
setup_traps
|
||||
|
||||
@@ -27,6 +61,7 @@ Domain / n8n options:
|
||||
--base-domain <domain> (default: userman.de) -> FQDN becomes sb-<unix>.domain
|
||||
--n8n-owner-email <email> (default: admin@<base-domain>)
|
||||
--n8n-owner-pass <pass> Optional. If omitted, generated (policy compliant).
|
||||
--debug Enable debug mode (show logs on stderr)
|
||||
--help Show help
|
||||
|
||||
Notes:
|
||||
@@ -74,6 +109,7 @@ while [[ $# -gt 0 ]]; do
|
||||
--base-domain) BASE_DOMAIN="${2:-}"; shift 2 ;;
|
||||
--n8n-owner-email) N8N_OWNER_EMAIL="${2:-}"; shift 2 ;;
|
||||
--n8n-owner-pass) N8N_OWNER_PASS="${2:-}"; shift 2 ;;
|
||||
--debug) DEBUG="1"; export DEBUG; shift 1 ;;
|
||||
--help|-h) usage; exit 0 ;;
|
||||
*) die "Unknown option: $1 (use --help)" ;;
|
||||
esac
|
||||
@@ -124,6 +160,9 @@ UNIXTS="$(date +%s)"
|
||||
CT_HOSTNAME="sb-${UNIXTS}"
|
||||
FQDN="${CT_HOSTNAME}.${BASE_DOMAIN}"
|
||||
|
||||
# Log-Datei nach Container-Hostname benennen
|
||||
FINAL_LOG="${LOG_DIR}/${CT_HOSTNAME}.log"
|
||||
|
||||
# CTID selection
|
||||
if [[ -n "$CTID" ]]; then
|
||||
[[ "$CTID" =~ ^[0-9]+$ ]] || die "--ctid must be integer"
|
||||
@@ -393,29 +432,15 @@ info "n8n intern: ${N8N_INTERNAL_URL}"
|
||||
info "n8n extern (geplant via OPNsense): ${N8N_EXTERNAL_URL}"
|
||||
|
||||
# Machine-readable JSON output (for your downstream automation)
|
||||
emit_json <<JSON
|
||||
{
|
||||
"ctid": ${CTID},
|
||||
"hostname": "${CT_HOSTNAME}",
|
||||
"fqdn": "${FQDN}",
|
||||
"ip": "${CT_IP}",
|
||||
"vlan": ${VLAN},
|
||||
"urls": {
|
||||
"n8n_internal": "${N8N_INTERNAL_URL}",
|
||||
"n8n_external": "${N8N_EXTERNAL_URL}"
|
||||
},
|
||||
"postgres": {
|
||||
"host": "postgres",
|
||||
"port": 5432,
|
||||
"db": "${PG_DB}",
|
||||
"user": "${PG_USER}",
|
||||
"password": "${PG_PASSWORD}"
|
||||
},
|
||||
"n8n": {
|
||||
"encryption_key": "${N8N_ENCRYPTION_KEY}",
|
||||
"owner_email": "${N8N_OWNER_EMAIL}",
|
||||
"owner_password": "${N8N_OWNER_PASS}",
|
||||
"secure_cookie": ${N8N_SECURE_COOKIE}
|
||||
}
|
||||
}
|
||||
JSON
|
||||
# Kompaktes JSON in einer Zeile für einfaches Parsing
|
||||
# Bei DEBUG=0: JSON auf fd 3 (ursprüngliches stdout) ausgeben
|
||||
# Bei DEBUG=1: JSON normal auf stdout (geht auch ins Log)
|
||||
JSON_OUTPUT="{\"ctid\":${CTID},\"hostname\":\"${CT_HOSTNAME}\",\"fqdn\":\"${FQDN}\",\"ip\":\"${CT_IP}\",\"vlan\":${VLAN},\"urls\":{\"n8n_internal\":\"${N8N_INTERNAL_URL}\",\"n8n_external\":\"${N8N_EXTERNAL_URL}\"},\"postgres\":{\"host\":\"postgres\",\"port\":5432,\"db\":\"${PG_DB}\",\"user\":\"${PG_USER}\",\"password\":\"${PG_PASSWORD}\"},\"n8n\":{\"encryption_key\":\"${N8N_ENCRYPTION_KEY}\",\"owner_email\":\"${N8N_OWNER_EMAIL}\",\"owner_password\":\"${N8N_OWNER_PASS}\",\"secure_cookie\":${N8N_SECURE_COOKIE}},\"log_file\":\"${FINAL_LOG}\"}"
|
||||
|
||||
if [[ "$DEBUG" == "1" ]]; then
|
||||
# Debug-Modus: JSON normal ausgeben (formatiert für Lesbarkeit)
|
||||
echo "$JSON_OUTPUT" | python3 -m json.tool 2>/dev/null || echo "$JSON_OUTPUT"
|
||||
else
|
||||
# Normal-Modus: JSON auf ursprüngliches stdout (fd 3) - kompakt
|
||||
echo "$JSON_OUTPUT" >&3
|
||||
fi
|
||||
|
||||
@@ -1,13 +1,48 @@
|
||||
#!/usr/bin/env bash
|
||||
set -Eeuo pipefail
|
||||
|
||||
# Debug mode: 0 = nur JSON ausgeben, 1 = Logs auf stderr
|
||||
DEBUG="${DEBUG:-0}"
|
||||
|
||||
log_ts() { date "+[%F %T]"; }
|
||||
info() { echo "$(log_ts) INFO: $*" >&2; }
|
||||
warn() { echo "$(log_ts) WARN: $*" >&2; }
|
||||
die() { echo "$(log_ts) ERROR: $*" >&2; exit 1; }
|
||||
|
||||
info() {
|
||||
[[ "$DEBUG" == "1" ]] && echo "$(log_ts) INFO: $*" >&2
|
||||
return 0
|
||||
}
|
||||
|
||||
warn() {
|
||||
[[ "$DEBUG" == "1" ]] && echo "$(log_ts) WARN: $*" >&2
|
||||
return 0
|
||||
}
|
||||
|
||||
die() {
|
||||
if [[ "$DEBUG" == "1" ]]; then
|
||||
echo "$(log_ts) ERROR: $*" >&2
|
||||
else
|
||||
# JSON-Fehler auf fd 3 ausgeben (falls verfügbar), sonst stdout
|
||||
if { true >&3; } 2>/dev/null; then
|
||||
echo "{\"error\": \"$*\"}" >&3
|
||||
else
|
||||
echo "{\"error\": \"$*\"}"
|
||||
fi
|
||||
fi
|
||||
exit 1
|
||||
}
|
||||
|
||||
setup_traps() {
|
||||
trap 'rc=$?; [[ $rc -ne 0 ]] && echo "$(log_ts) ERROR: Failed at line ${BASH_LINENO[0]}: ${BASH_COMMAND} (exit=$rc)" >&2; exit $rc' ERR
|
||||
trap 'rc=$?; if [[ $rc -ne 0 ]]; then
|
||||
if [[ "$DEBUG" == "1" ]]; then
|
||||
echo "$(log_ts) ERROR: Failed at line ${BASH_LINENO[0]}: ${BASH_COMMAND} (exit=$rc)" >&2
|
||||
else
|
||||
# JSON-Fehler auf fd 3 ausgeben (falls verfügbar), sonst stdout
|
||||
if { true >&3; } 2>/dev/null; then
|
||||
echo "{\"error\": \"Failed at line ${BASH_LINENO[0]}: ${BASH_COMMAND} (exit=$rc)\"}" >&3
|
||||
else
|
||||
echo "{\"error\": \"Failed at line ${BASH_LINENO[0]}: ${BASH_COMMAND} (exit=$rc)\"}"
|
||||
fi
|
||||
fi
|
||||
fi; exit $rc' ERR
|
||||
}
|
||||
|
||||
need_cmd() {
|
||||
|
||||
Reference in New Issue
Block a user