152 lines
5.1 KiB
Bash
Executable File
152 lines
5.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# AMMIDS Master Setup Wizard
|
|
# Orchestrates the entire deployment flow via a single interactive session
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
source "${SCRIPT_DIR}/init/scripts/functions.sh"
|
|
resolve_paths
|
|
|
|
# Ensure dependencies
|
|
require_command "openssl" || require_command "pwgen"
|
|
|
|
log_info "=== AMMIDS Interactive Setup Wizard ==="
|
|
|
|
# 1. Base Configuration
|
|
read -r -p "Base Domain (e.g. example.org) [example.org]: " DOMAIN_INPUT
|
|
BASE_DOMAIN="${DOMAIN_INPUT:-example.org}"
|
|
|
|
log_info "Domain set: ${BASE_DOMAIN}"
|
|
|
|
# 2. Service Selection
|
|
echo ""
|
|
log_info "Select Services:"
|
|
|
|
# LiveKit
|
|
read -r -p "Enable LiveKit RTC Stack? (Y/n) [Y]: " LIVEKIT_INPUT
|
|
LIVEKIT_INPUT="${LIVEKIT_INPUT:-Y}"
|
|
if [[ "$LIVEKIT_INPUT" =~ ^[Yy]$ ]]; then
|
|
INCLUDE_LIVEKIT="true"
|
|
else
|
|
INCLUDE_LIVEKIT="false"
|
|
fi
|
|
|
|
# Web Client (Set to a single value: ELEMENT, CINNY, FLUFFY, or NONE)
|
|
echo "Select Web Client: 1) Element 2) Cinny 3) FluffyChat 4) None"
|
|
read -r -p "Default [1]: " WEB_APP_INPUT
|
|
WEB_APP_INPUT="${WEB_APP_INPUT:-1}"
|
|
case "$WEB_APP_INPUT" in
|
|
1) WEBAPP="ELEMENT" ;;
|
|
2) WEBAPP="CINNY" ;;
|
|
3) WEBAPP="FLUFFY" ;;
|
|
*) WEBAPP="NONE" ;;
|
|
esac
|
|
log_info "Web Client selected: ${WEBAPP}"
|
|
|
|
# Reverse Proxy (Set to a single value: TRAEFIK or NGINX)
|
|
echo "Select Reverse Proxy: 1) Traefik (Handles TLS) 2) Nginx (Behind existing proxy)"
|
|
read -r -p "Default [1]: " PROXY_INPUT
|
|
PROXY_INPUT="${PROXY_INPUT:-1}"
|
|
case "$PROXY_INPUT" in
|
|
1) PROXY="TRAEFIK" ;;
|
|
*) PROXY="NGINX" ;;
|
|
esac
|
|
log_info "Proxy selected: ${PROXY}"
|
|
|
|
# Worker Count
|
|
read -r -p "Number of Synapse Workers? [Default: 1]: " WORKER_INPUT
|
|
WORKER_INPUT="${WORKER_INPUT:-1}"
|
|
if ! [[ "$WORKER_INPUT" =~ ^[0-9]+$ ]]; then
|
|
log_error "Invalid number. Defaulting to 1."
|
|
WORKER_INPUT=1
|
|
fi
|
|
|
|
# 3. Environment Variables
|
|
echo ""
|
|
read -r -p "Auto-generate secure passwords and defaults? [Y/n]: " AUTO_GEN_INPUT
|
|
AUTO_GEN_INPUT="${AUTO_GEN_INPUT:-Y}"
|
|
|
|
# Initialize .env
|
|
> "$ENV_FILE"
|
|
|
|
# --- Generate Secrets & Defaults ---
|
|
if [[ "$AUTO_GEN_INPUT" =~ ^[Yy]$ ]]; then
|
|
log_info "Generating secure defaults..."
|
|
auto_var "VOLUME_PATH" "./matrix" "no"
|
|
auto_var "DOMAIN" "${BASE_DOMAIN}" "no"
|
|
auto_var "HOMESERVER_FQDN" "matrix.${BASE_DOMAIN}" "no"
|
|
auto_var "MAS_FQDN" "auth.${BASE_DOMAIN}" "no"
|
|
if [[ "$WEBAPP" != "NONE" ]]; then
|
|
auto_var "APP_FQDN" "app.${BASE_DOMAIN}" "no"
|
|
fi
|
|
auto_var "USER_ID" "1000" "no"
|
|
auto_var "GROUP_ID" "1000" "no"
|
|
auto_var "COUNTRY" "GB" "no"
|
|
auto_var "PG_USER" "postgres" "no"
|
|
auto_var "PG_PASSWORD" "generated" "yes"
|
|
auto_var "PG_USER_MATRIX" "matrix" "no"
|
|
auto_var "PG_DB_MATRIX" "synapse" "no"
|
|
auto_var "PG_PASSWORD_MATRIX" "generated" "yes"
|
|
auto_var "PG_USER_MAS" "mas" "no"
|
|
auto_var "PG_DB_MAS" "auth" "no"
|
|
auto_var "PG_PASSWORD_MAS" "generated" "yes"
|
|
# Generate LiveKit keys if enabled
|
|
if [[ "$INCLUDE_LIVEKIT" == "true" ]]; then
|
|
echo "LIVEKIT_API_KEY=\"$(openssl rand -hex 16)\"" >> "$ENV_FILE"
|
|
echo "LIVEKIT_API_SECRET=\"$(openssl rand -hex 32)\"" >> "$ENV_FILE"
|
|
echo "LIVEKIT_FQDN=\"rtc.${BASE_DOMAIN}\"" >> "$ENV_FILE"
|
|
echo "JWT_FQDN=\"jwt.${BASE_DOMAIN}\"" >> "$ENV_FILE"
|
|
echo "LIVEKIT_UDP_RANGE=\"10000-20000\"" >> "$ENV_FILE"
|
|
fi
|
|
else
|
|
log_info "Manual entry mode."
|
|
prompt_var "VOLUME_PATH" "Install directory" "./matrix" "no"
|
|
auto_var "DOMAIN" "${BASE_DOMAIN}" "no"
|
|
prompt_var "HOMESERVER_FQDN" "Homeserver SubDomain" "matrix" "no"
|
|
prompt_var "MAS_FQDN" "authentication SubDomain" "auth" "no"
|
|
if [[ "$WEBAPP" != "NONE" ]]; then
|
|
prompt_var "APP_FQDN" "Web App SubDomain" "app" "no"
|
|
fi
|
|
prompt_var "USER_ID" "Docker UserID" "1000" "no"
|
|
prompt_var "GROUP_ID" "Docker GroupID" "1000" "no"
|
|
prompt_var "COUNTRY" "Country Code (e.g. GB)" "GB" "no"
|
|
prompt_var "PG_USER" "PostgreSQL Superuser" "postgres" "no"
|
|
prompt_var "PG_PASSWORD" "PostgreSQL Superuser Password" "generated" "yes"
|
|
prompt_var "PG_USER_MATRIX" "Synapse Database User" "matrix" "no"
|
|
prompt_var "PG_DB_MATRIX" "Synapse Database Name" "synapse" "no"
|
|
prompt_var "PG_PASSWORD_MATRIX" "Synapse Database Password" "generated" "yes"
|
|
prompt_var "PG_USER_MAS" "MAS Database User" "mas" "no"
|
|
prompt_var "PG_DB_MAS" "MAS Database Name" "auth" "no"
|
|
prompt_var "PG_PASSWORD_MAS" "MAS Database Password" "generated" "yes"
|
|
fi
|
|
|
|
auto_var "WORKER_COUNT" "${WORKER_INPUT}" "no"
|
|
auto_var "INCLUDE_LIVEKIT" "${INCLUDE_LIVEKIT}" "no"
|
|
auto_var "WEBAPP" "${WEBAPP}" "no"
|
|
auto_var "PROXY" "${PROXY}" "no"
|
|
|
|
|
|
chmod 600 "$ENV_FILE"
|
|
log_info "Configuration saved to ${ENV_FILE}"
|
|
|
|
# 4. Execution Phase
|
|
echo ""
|
|
log_info "=== Executing Deployment Plan ==="
|
|
|
|
log_info "1. Generating Compose File..."
|
|
"${SCRIPT_DIR}/init/scripts/compose_gen.sh"
|
|
|
|
log_info "2. Initializing Database & Configs..."
|
|
"${SCRIPT_DIR}/init/scripts/config_gen.sh"
|
|
|
|
#log_info "3. Linking Services (OIDC)..."
|
|
#"${SCRIPT_DIR}/init/scripts/config_link.sh"
|
|
|
|
if [[ ${WORKER_INPUT} -gt 1 ]]; then
|
|
log_info "3. Generating Workers (${WORKER_INPUT})..."
|
|
"${SCRIPT_DIR}/init/scripts/worker_gen.sh" -c "$WORKER_INPUT"
|
|
fi
|
|
log_info "=== Setup Complete ==="
|
|
log_info "Run 'docker compose up -d' to start your stack."
|