feat(installer): add interactive prompts for simple and expert modes

This commit is contained in:
hsiegeln
2026-04-13 16:25:16 +02:00
parent 4debee966a
commit 6eabd0cf2e

View File

@@ -375,3 +375,101 @@ detect_existing_install() {
load_config_file "$dir/cameleer.conf"
fi
}
# --- Interactive prompts ---
select_mode() {
if [ -n "$MODE" ]; then return; fi
echo ""
echo " Installation mode:"
echo " [1] Simple — 6 questions, sensible defaults (recommended)"
echo " [2] Expert — configure everything"
echo ""
local choice
read -rp " Select mode [1]: " choice
case "${choice:-1}" in
2) MODE="expert" ;;
*) MODE="simple" ;;
esac
}
run_simple_prompts() {
echo ""
echo -e "${BOLD}--- Simple Installation ---${NC}"
echo ""
prompt INSTALL_DIR "Install directory" "${INSTALL_DIR:-$DEFAULT_INSTALL_DIR}"
prompt PUBLIC_HOST "Public hostname" "${PUBLIC_HOST:-localhost}"
prompt ADMIN_USER "Admin username" "${ADMIN_USER:-$DEFAULT_ADMIN_USER}"
if prompt_yesno "Auto-generate admin password?" "y"; then
ADMIN_PASS=""
else
prompt_password ADMIN_PASS "Admin password" ""
fi
echo ""
if prompt_yesno "Use custom TLS certificates? (no = self-signed)"; then
TLS_MODE="custom"
prompt CERT_FILE "Path to certificate file (PEM)" ""
prompt KEY_FILE "Path to private key file (PEM)" ""
if prompt_yesno "Include CA bundle?"; then
prompt CA_FILE "Path to CA bundle (PEM)" ""
fi
else
TLS_MODE="self-signed"
fi
echo ""
prompt MONITORING_NETWORK "Monitoring network name (empty = skip)" ""
}
run_expert_prompts() {
echo ""
echo -e "${BOLD}--- Expert Installation ---${NC}"
run_simple_prompts
echo ""
echo -e "${BOLD} Credentials:${NC}"
if prompt_yesno "Auto-generate database passwords?" "y"; then
POSTGRES_PASSWORD=""
CLICKHOUSE_PASSWORD=""
else
prompt_password POSTGRES_PASSWORD "PostgreSQL password" ""
prompt_password CLICKHOUSE_PASSWORD "ClickHouse password" ""
fi
echo ""
if prompt_yesno "Enable vendor account?"; then
VENDOR_ENABLED="true"
prompt VENDOR_USER "Vendor username" "${VENDOR_USER:-$DEFAULT_VENDOR_USER}"
if prompt_yesno "Auto-generate vendor password?" "y"; then
VENDOR_PASS=""
else
prompt_password VENDOR_PASS "Vendor password" ""
fi
else
VENDOR_ENABLED="false"
fi
echo ""
echo -e "${BOLD} Networking:${NC}"
prompt HTTP_PORT "HTTP port" "${HTTP_PORT:-$DEFAULT_HTTP_PORT}"
prompt HTTPS_PORT "HTTPS port" "${HTTPS_PORT:-$DEFAULT_HTTPS_PORT}"
prompt LOGTO_CONSOLE_PORT "Logto admin console port" "${LOGTO_CONSOLE_PORT:-$DEFAULT_LOGTO_CONSOLE_PORT}"
echo ""
echo -e "${BOLD} Docker:${NC}"
prompt VERSION "Image version/tag" "${VERSION:-$CAMELEER_DEFAULT_VERSION}"
prompt COMPOSE_PROJECT "Compose project name" "${COMPOSE_PROJECT:-$DEFAULT_COMPOSE_PROJECT}"
prompt DOCKER_SOCKET "Docker socket path" "${DOCKER_SOCKET:-$DEFAULT_DOCKER_SOCKET}"
echo ""
echo -e "${BOLD} Logto:${NC}"
if prompt_yesno "Expose Logto admin console externally?" "y"; then
LOGTO_CONSOLE_EXPOSED="true"
else
LOGTO_CONSOLE_EXPOSED="false"
fi
}