feat(installer): scaffold install.sh with constants and utilities
Creates the installer skeleton (Phase 2, Task 8) with version/registry constants, color codes, default values, _ENV_* variable capture pattern, config/state variable declarations, and utility functions (log_*, print_banner, prompt, prompt_password, prompt_yesno, generate_password). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
144
installer/install.sh
Normal file
144
installer/install.sh
Normal file
@@ -0,0 +1,144 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
CAMELEER_INSTALLER_VERSION="1.0.0"
|
||||
CAMELEER_DEFAULT_VERSION="latest"
|
||||
REGISTRY="gitea.siegeln.net/cameleer"
|
||||
|
||||
# --- Colors ---
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
BOLD='\033[1m'
|
||||
NC='\033[0m'
|
||||
|
||||
# --- Defaults ---
|
||||
DEFAULT_INSTALL_DIR="./cameleer"
|
||||
DEFAULT_PUBLIC_PROTOCOL="https"
|
||||
DEFAULT_ADMIN_USER="admin"
|
||||
DEFAULT_TLS_MODE="self-signed"
|
||||
DEFAULT_HTTP_PORT="80"
|
||||
DEFAULT_HTTPS_PORT="443"
|
||||
DEFAULT_LOGTO_CONSOLE_PORT="3002"
|
||||
DEFAULT_LOGTO_CONSOLE_EXPOSED="true"
|
||||
DEFAULT_VENDOR_ENABLED="false"
|
||||
DEFAULT_VENDOR_USER="vendor"
|
||||
DEFAULT_COMPOSE_PROJECT="cameleer-saas"
|
||||
DEFAULT_DOCKER_SOCKET="/var/run/docker.sock"
|
||||
|
||||
# --- Config values (set by args/env/config/prompts) ---
|
||||
# Save environment values before initialization (CLI args override these)
|
||||
_ENV_PUBLIC_HOST="${PUBLIC_HOST:-}"
|
||||
_ENV_PUBLIC_PROTOCOL="${PUBLIC_PROTOCOL:-}"
|
||||
_ENV_POSTGRES_PASSWORD="${POSTGRES_PASSWORD:-}"
|
||||
_ENV_CLICKHOUSE_PASSWORD="${CLICKHOUSE_PASSWORD:-}"
|
||||
_ENV_TLS_MODE="${TLS_MODE:-}"
|
||||
_ENV_CERT_FILE="${CERT_FILE:-}"
|
||||
_ENV_KEY_FILE="${KEY_FILE:-}"
|
||||
_ENV_CA_FILE="${CA_FILE:-}"
|
||||
_ENV_HTTP_PORT="${HTTP_PORT:-}"
|
||||
_ENV_HTTPS_PORT="${HTTPS_PORT:-}"
|
||||
_ENV_LOGTO_CONSOLE_PORT="${LOGTO_CONSOLE_PORT:-}"
|
||||
_ENV_LOGTO_CONSOLE_EXPOSED="${LOGTO_CONSOLE_EXPOSED:-}"
|
||||
_ENV_VENDOR_ENABLED="${VENDOR_ENABLED:-}"
|
||||
_ENV_VENDOR_USER="${VENDOR_USER:-}"
|
||||
_ENV_VENDOR_PASS="${VENDOR_PASS:-}"
|
||||
_ENV_MONITORING_NETWORK="${MONITORING_NETWORK:-}"
|
||||
_ENV_COMPOSE_PROJECT="${COMPOSE_PROJECT:-}"
|
||||
_ENV_DOCKER_SOCKET="${DOCKER_SOCKET:-}"
|
||||
_ENV_NODE_TLS_REJECT="${NODE_TLS_REJECT:-}"
|
||||
|
||||
INSTALL_DIR=""
|
||||
PUBLIC_HOST=""
|
||||
PUBLIC_PROTOCOL=""
|
||||
ADMIN_USER=""
|
||||
ADMIN_PASS=""
|
||||
TLS_MODE=""
|
||||
CERT_FILE=""
|
||||
KEY_FILE=""
|
||||
CA_FILE=""
|
||||
POSTGRES_PASSWORD=""
|
||||
CLICKHOUSE_PASSWORD=""
|
||||
HTTP_PORT=""
|
||||
HTTPS_PORT=""
|
||||
LOGTO_CONSOLE_PORT=""
|
||||
LOGTO_CONSOLE_EXPOSED=""
|
||||
VENDOR_ENABLED=""
|
||||
VENDOR_USER=""
|
||||
VENDOR_PASS=""
|
||||
MONITORING_NETWORK=""
|
||||
VERSION=""
|
||||
COMPOSE_PROJECT=""
|
||||
DOCKER_SOCKET=""
|
||||
NODE_TLS_REJECT=""
|
||||
|
||||
# --- State ---
|
||||
MODE="" # simple, expert, silent
|
||||
IS_RERUN=false
|
||||
RERUN_ACTION="" # upgrade, reconfigure, reinstall
|
||||
CONFIRM_DESTROY=false
|
||||
CONFIG_FILE_PATH=""
|
||||
|
||||
# --- Utility functions ---
|
||||
|
||||
log_info() { echo -e "${GREEN}[INFO]${NC} $1"; }
|
||||
log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
|
||||
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
|
||||
log_success() { echo -e "${GREEN}[OK]${NC} $1"; }
|
||||
|
||||
print_banner() {
|
||||
echo -e "${BOLD}"
|
||||
echo " ____ _ "
|
||||
echo " / ___|__ _ _ __ ___ ___ | | ___ ___ _ __ "
|
||||
echo "| | / _\` | '_ \` _ \\ / _ \\| |/ _ \\/ _ \\ '__|"
|
||||
echo "| |__| (_| | | | | | | __/| | __/ __/ | "
|
||||
echo " \\____\\__,_|_| |_| |_|\\___||_|\\___|\\___||_| "
|
||||
echo ""
|
||||
echo " SaaS Platform Installer v${CAMELEER_INSTALLER_VERSION}"
|
||||
echo -e "${NC}"
|
||||
}
|
||||
|
||||
prompt() {
|
||||
local var_name="$1" prompt_text="$2" default="${3:-}"
|
||||
local input
|
||||
if [ -n "$default" ]; then
|
||||
read -rp " $prompt_text [$default]: " input
|
||||
eval "$var_name=\"\${input:-$default}\""
|
||||
else
|
||||
read -rp " $prompt_text: " input
|
||||
eval "$var_name=\"\$input\""
|
||||
fi
|
||||
}
|
||||
|
||||
prompt_password() {
|
||||
local var_name="$1" prompt_text="$2" default="${3:-}"
|
||||
local input
|
||||
if [ -n "$default" ]; then
|
||||
read -rsp " $prompt_text [${default:+********}]: " input
|
||||
echo
|
||||
eval "$var_name=\"\${input:-$default}\""
|
||||
else
|
||||
read -rsp " $prompt_text: " input
|
||||
echo
|
||||
eval "$var_name=\"\$input\""
|
||||
fi
|
||||
}
|
||||
|
||||
prompt_yesno() {
|
||||
local prompt_text="$1" default="${2:-n}"
|
||||
local input
|
||||
if [ "$default" = "y" ]; then
|
||||
read -rp " $prompt_text [Y/n]: " input
|
||||
case "${input:-y}" in
|
||||
[nN]|[nN][oO]) return 1 ;; *) return 0 ;; esac
|
||||
else
|
||||
read -rp " $prompt_text [y/N]: " input
|
||||
case "${input:-n}" in
|
||||
[yY]|[yY][eE][sS]) return 0 ;; *) return 1 ;; esac
|
||||
fi
|
||||
}
|
||||
|
||||
generate_password() {
|
||||
openssl rand -base64 24 | tr -d '/+=' | head -c 32
|
||||
}
|
||||
Reference in New Issue
Block a user