refactored interactive section into one script

This commit is contained in:
cortex
2026-05-20 16:22:00 +01:00
parent fe775ca1c2
commit 70ff03f05c
6 changed files with 171 additions and 161 deletions
+31 -40
View File
@@ -11,51 +11,41 @@ OUTPUT_FILE="${ROOT_DIR}/compose.yaml"
require_file "$TEMPLATE_FILE" "Compose template"
log_info "Configuring optional services..."
log_info "Generating compose.yaml based on .env configuration..."
read -r -p "Enable LiveKit RTC Stack? (Used for Element call) (Y/n) [Y]: " LIVEKIT_INPUT
LIVEKIT_INPUT="${LIVEKIT_INPUT:-Y}"
if [[ "$LIVEKIT_INPUT" =~ ^[Yy]$ ]]; then
INCLUDE_LIVEKIT=true
LIVEKIT_KEY=$(openssl rand -hex 16)
LIVEKIT_SECRET=$(openssl rand -hex 32)
cat >> "$ENV_FILE" <<EOF
LIVEKIT_FQDN="rtc.${DOMAIN}"
JWT_FQDN="jwt.${DOMAIN}"
LIVEKIT_API_KEY="${LIVEKIT_KEY}"
LIVEKIT_API_SECRET="${LIVEKIT_SECRET}"
LIVEKIT_UDP_RANGE="10000-20000"
EOF
# Read configuration from .env
# Defaults: LiveKit=off, WebApp=None, Proxy=Traefik
INCLUDE_LIVEKIT="${INCLUDE_LIVEKIT:-false}"
WEBAPP="${WEBAPP:-NONE}"
PROXY="${PROXY:-TRAEFIK}"
# Determine inclusion flags based on single-value variables
if [[ "$WEBAPP" == "ELEMENT" ]]; then
INCLUDE_ELEMENT="true"
INCLUDE_CINNY="false"
INCLUDE_FLUFFY="false"
elif [[ "$WEBAPP" == "CINNY" ]]; then
INCLUDE_ELEMENT="false"
INCLUDE_CINNY="true"
INCLUDE_FLUFFY="false"
elif [[ "$WEBAPP" == "FLUFFY" ]]; then
INCLUDE_ELEMENT="false"
INCLUDE_CINNY="false"
INCLUDE_FLUFFY="true"
else
INCLUDE_LIVEKIT=false
INCLUDE_ELEMENT="false"
INCLUDE_CINNY="false"
INCLUDE_FLUFFY="false"
fi
write_state LIVEKIT "$INCLUDE_LIVEKIT"
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) INCLUDE_ELEMENT=true; INCLUDE_CINNY=false; INCLUDE_FLUFFY=false; write_state "APP" "ELEMENT" ;;
2) INCLUDE_ELEMENT=false; INCLUDE_CINNY=true; INCLUDE_FLUFFY=false; write_state "APP" "CINNY" ;;
3) INCLUDE_ELEMENT=false; INCLUDE_CINNY=false; INCLUDE_FLUFFY=true; write_state "APP" "FLUFFY" ;;
*) INCLUDE_ELEMENT=false; INCLUDE_CINNY=false; INCLUDE_FLUFFY=false; write_state "APP" "NONE" ;;
esac
if [[ "$PROXY" == "NGINX" ]]; then
INCLUDE_NGINX="true"
INCLUDE_TRAEFIK="false"
else
INCLUDE_NGINX="false"
INCLUDE_TRAEFIK="true"
fi
echo "Select Reverse Proxy: 1) Traefik 2) nginx"
read -r -p "Default [1]: " PROXY_INPUT
PROXY_INPUT="${PROXY_INPUT:-1}"
case "$PROXY_INPUT" in
2)
INCLUDE_NGINX=true
INCLUDE_TRAEFIK=false
write_state "PROXY" "NGINX"
;;
*)
INCLUDE_NGINX=false
INCLUDE_TRAEFIK=true
write_state "PROXY" "TRAEFIK"
;;
esac
cp "$TEMPLATE_FILE" "$OUTPUT_FILE"
toggle_block "$OUTPUT_FILE" "# \[LIVEKIT_START\]" "# \[LIVEKIT_END\]" "$INCLUDE_LIVEKIT"
@@ -65,6 +55,7 @@ toggle_block "$OUTPUT_FILE" "# \[FLUFFYCHAT_START\]" "# \[FLUFFYCHAT_END\]" "$IN
toggle_block "$OUTPUT_FILE" "# \[NGINX_START\]" "# \[NGINX_END\]" "$INCLUDE_NGINX"
toggle_block "$OUTPUT_FILE" "# \[TRAEFIK_START\]" "# \[TRAEFIK_END\]" "$INCLUDE_TRAEFIK"
# Handle Traefik Labels
if [[ "$INCLUDE_TRAEFIK" == "true" ]]; then
sed -i "/# \[TRAEFIK_LABELS_START\]/d; /# \[TRAEFIK_LABELS_END\]/d" "$OUTPUT_FILE"
else
+5 -3
View File
@@ -9,10 +9,12 @@ require_env
require_docker
resolve_volume_path
mkdir -p "${VOLUME_PATH}/synapse" "${VOLUME_PATH}/mas" "${VOLUME_PATH}/postgres"
mkdir -p "${VOLUME_PATH}/synapse" "${VOLUME_PATH}/mas" "${VOLUME_PATH}/postgres" "${VOLUME_PATH}/proxy"
if [[ "${WORKER_COUNT}" -gt 0 ]]; then
mkdir -p "${VOLUME_PATH}/webapp"
fi
log_info "Initializing PostgreSQL..."
docker compose -f "$COMPOSE_FILE" --env-file "$ENV_FILE" up -d --wait --timeout 60 matrix-db
docker compose -f "$COMPOSE_FILE" --env-file "$ENV_FILE" up -d --wait matrix-db
# Wait for database readiness (silent except on failure)
for ATTEMPT in $(seq 1 30); do
+2 -6
View File
@@ -42,13 +42,9 @@ if ! yq '.oidc_providers' "$SYNAPSE_CFG" 2>/dev/null | grep -q "idp_id"; then
yq -y -i "$(cat "$TEMP_FILTER")" "$SYNAPSE_CFG" || { log_error "Failed to inject OIDC config"; exit 1; }
fi
if [[ -n "${LIVEKIT_API_KEY:-}" ]]; then
if [[ "${INCLUDE_LIVEKIT}" == "TRUE" ]]; then
JWT_URL="https://${JWT_FQDN:-jwt.${DOMAIN}}"
if yq '.livekit.url' "$SYNAPSE_CFG" 2>/dev/null | grep -q "."; then
yq -y -i ".livekit.url = \"$JWT_URL\"" "$SYNAPSE_CFG"
else
yq -y -i ".livekit.url = \"$JWT_URL\"" "$SYNAPSE_CFG"
fi
yq -y -i ".livekit.url = \"$JWT_URL\"" "$SYNAPSE_CFG"
fi
log_info "OIDC and LiveKit linking complete"
-62
View File
@@ -1,62 +0,0 @@
#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "${SCRIPT_DIR}/functions.sh"
resolve_paths
main() {
> "$ENV_FILE"
read -r -p "Base Domain (e.g. example.org) [example.org]: " DOMAIN_INPUT
DOMAIN="${DOMAIN_INPUT:-example.org}"
auto_var "DOMAIN" $DOMAIN "no"
log_info "Base Domain set to: ${DOMAIN}"
read -r -p "Auto-generate secure defaults for remaining fields? [Y/n]: " GEN_INPUT
GEN_INPUT="${GEN_INPUT:-Y}"
if [[ "$GEN_INPUT" =~ ^[Yy]$ ]]; then
log_info "Generating secure defaults..."
auto_var "USER_ID" "1000" "no"
auto_var "GROUP_ID" "1000" "no"
auto_var "VOLUME_PATH" "./matrix" "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"
log_info "All fields auto-generated."
else
log_info "Manual entry mode."
prompt_var "USER_ID" "Docker UserId" "1000" "no"
prompt_var "GROUP_ID" "Docker GroupID" "1000" "no"
prompt_var "VOLUME_PATH" "Install directory" "./matrix" "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"
chmod 600 "$ENV_FILE"
log_info "Environment file created: $ENV_FILE"
log_warn "Add $ENV_FILE to .gitignore and backup securely"
}
main "$@"
+4 -4
View File
@@ -38,9 +38,9 @@ for ((i=1; i<=WORKER_COUNT; i++)); do
sed -e "s/{{WORKER_NAME}}/${worker_name}/g" \
-e "s/{{PORT}}/${port}/g" \
-e "s/{{SERVER_NAME}}/${HOMESERVER_FQDN}/g" \
-e "s/{{DB_USER}}/${DB_USER:-synapse}/g" \
-e "s/{{DB_PASSWORD}}/${DB_PASSWORD:-synapse_password}/g" \
-e "s/{{DB_NAME}}/${DB_NAME:-synapse}/g" \
-e "s/{{DB_USER}}/${PG_USER_MATRIX}/g"
-e "s/{{DB_PASSWORD}}/${PG_PASSWORD_MATRIX}/g"
-e "s/{{DB_NAME}}/${PG_DB_MATRIX}/g"
"$TEMPLATE_CONFIG" > "${WORKERS_DIR}/${worker_name}.yaml"
sed -e "s/{{WORKER_NAME}}/${worker_name}/g" \
@@ -51,7 +51,7 @@ for ((i=1; i<=WORKER_COUNT; i++)); do
"$TEMPLATE_LOG" > "${WORKERS_DIR}/${worker_name}.log.config"
TRAEFIK_LABELS=""
if [[ "$TRAEFIK_ENABLED" == "1" && -n "$DOMAIN" ]]; then
if [[ "$PROXY" == "TRAEFIK" && -n "$DOMAIN" ]]; then
TRAEFIK_LABELS=" labels:
- traefik.enable=true
- traefik.http.services.${worker_name}.loadbalancer.server.port=${port}