Proxy Setup Init
This commit is contained in:
77
install.sh
77
install.sh
@@ -1,7 +1,41 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
set -Eeuo pipefail
|
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)"
|
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"
|
source "${SCRIPT_DIR}/libsupabase.sh"
|
||||||
setup_traps
|
setup_traps
|
||||||
|
|
||||||
@@ -27,6 +61,7 @@ Domain / n8n options:
|
|||||||
--base-domain <domain> (default: userman.de) -> FQDN becomes sb-<unix>.domain
|
--base-domain <domain> (default: userman.de) -> FQDN becomes sb-<unix>.domain
|
||||||
--n8n-owner-email <email> (default: admin@<base-domain>)
|
--n8n-owner-email <email> (default: admin@<base-domain>)
|
||||||
--n8n-owner-pass <pass> Optional. If omitted, generated (policy compliant).
|
--n8n-owner-pass <pass> Optional. If omitted, generated (policy compliant).
|
||||||
|
--debug Enable debug mode (show logs on stderr)
|
||||||
--help Show help
|
--help Show help
|
||||||
|
|
||||||
Notes:
|
Notes:
|
||||||
@@ -74,6 +109,7 @@ while [[ $# -gt 0 ]]; do
|
|||||||
--base-domain) BASE_DOMAIN="${2:-}"; shift 2 ;;
|
--base-domain) BASE_DOMAIN="${2:-}"; shift 2 ;;
|
||||||
--n8n-owner-email) N8N_OWNER_EMAIL="${2:-}"; shift 2 ;;
|
--n8n-owner-email) N8N_OWNER_EMAIL="${2:-}"; shift 2 ;;
|
||||||
--n8n-owner-pass) N8N_OWNER_PASS="${2:-}"; shift 2 ;;
|
--n8n-owner-pass) N8N_OWNER_PASS="${2:-}"; shift 2 ;;
|
||||||
|
--debug) DEBUG="1"; export DEBUG; shift 1 ;;
|
||||||
--help|-h) usage; exit 0 ;;
|
--help|-h) usage; exit 0 ;;
|
||||||
*) die "Unknown option: $1 (use --help)" ;;
|
*) die "Unknown option: $1 (use --help)" ;;
|
||||||
esac
|
esac
|
||||||
@@ -124,6 +160,9 @@ UNIXTS="$(date +%s)"
|
|||||||
CT_HOSTNAME="sb-${UNIXTS}"
|
CT_HOSTNAME="sb-${UNIXTS}"
|
||||||
FQDN="${CT_HOSTNAME}.${BASE_DOMAIN}"
|
FQDN="${CT_HOSTNAME}.${BASE_DOMAIN}"
|
||||||
|
|
||||||
|
# Log-Datei nach Container-Hostname benennen
|
||||||
|
FINAL_LOG="${LOG_DIR}/${CT_HOSTNAME}.log"
|
||||||
|
|
||||||
# CTID selection
|
# CTID selection
|
||||||
if [[ -n "$CTID" ]]; then
|
if [[ -n "$CTID" ]]; then
|
||||||
[[ "$CTID" =~ ^[0-9]+$ ]] || die "--ctid must be integer"
|
[[ "$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}"
|
info "n8n extern (geplant via OPNsense): ${N8N_EXTERNAL_URL}"
|
||||||
|
|
||||||
# Machine-readable JSON output (for your downstream automation)
|
# Machine-readable JSON output (for your downstream automation)
|
||||||
emit_json <<JSON
|
# Kompaktes JSON in einer Zeile für einfaches Parsing
|
||||||
{
|
# Bei DEBUG=0: JSON auf fd 3 (ursprüngliches stdout) ausgeben
|
||||||
"ctid": ${CTID},
|
# Bei DEBUG=1: JSON normal auf stdout (geht auch ins Log)
|
||||||
"hostname": "${CT_HOSTNAME}",
|
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}\"}"
|
||||||
"fqdn": "${FQDN}",
|
|
||||||
"ip": "${CT_IP}",
|
if [[ "$DEBUG" == "1" ]]; then
|
||||||
"vlan": ${VLAN},
|
# Debug-Modus: JSON normal ausgeben (formatiert für Lesbarkeit)
|
||||||
"urls": {
|
echo "$JSON_OUTPUT" | python3 -m json.tool 2>/dev/null || echo "$JSON_OUTPUT"
|
||||||
"n8n_internal": "${N8N_INTERNAL_URL}",
|
else
|
||||||
"n8n_external": "${N8N_EXTERNAL_URL}"
|
# Normal-Modus: JSON auf ursprüngliches stdout (fd 3) - kompakt
|
||||||
},
|
echo "$JSON_OUTPUT" >&3
|
||||||
"postgres": {
|
fi
|
||||||
"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
|
|
||||||
|
|||||||
@@ -1,13 +1,48 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
set -Eeuo pipefail
|
set -Eeuo pipefail
|
||||||
|
|
||||||
|
# Debug mode: 0 = nur JSON ausgeben, 1 = Logs auf stderr
|
||||||
|
DEBUG="${DEBUG:-0}"
|
||||||
|
|
||||||
log_ts() { date "+[%F %T]"; }
|
log_ts() { date "+[%F %T]"; }
|
||||||
info() { echo "$(log_ts) INFO: $*" >&2; }
|
|
||||||
warn() { echo "$(log_ts) WARN: $*" >&2; }
|
info() {
|
||||||
die() { echo "$(log_ts) ERROR: $*" >&2; exit 1; }
|
[[ "$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() {
|
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() {
|
need_cmd() {
|
||||||
|
|||||||
Reference in New Issue
Block a user