final commit before setup refactoring
This commit is contained in:
+26
-19
@@ -13,7 +13,7 @@ require_file "$TEMPLATE_FILE" "Compose template"
|
|||||||
|
|
||||||
log_info "Configuring optional services..."
|
log_info "Configuring optional services..."
|
||||||
|
|
||||||
read -r -p "Enable LiveKit RTC Stack? (Y/n) [Y]: " LIVEKIT_INPUT
|
read -r -p "Enable LiveKit RTC Stack? (Used for Element call) (Y/n) [Y]: " LIVEKIT_INPUT
|
||||||
LIVEKIT_INPUT="${LIVEKIT_INPUT:-Y}"
|
LIVEKIT_INPUT="${LIVEKIT_INPUT:-Y}"
|
||||||
if [[ "$LIVEKIT_INPUT" =~ ^[Yy]$ ]]; then
|
if [[ "$LIVEKIT_INPUT" =~ ^[Yy]$ ]]; then
|
||||||
INCLUDE_LIVEKIT=true
|
INCLUDE_LIVEKIT=true
|
||||||
@@ -29,39 +29,46 @@ EOF
|
|||||||
else
|
else
|
||||||
INCLUDE_LIVEKIT=false
|
INCLUDE_LIVEKIT=false
|
||||||
fi
|
fi
|
||||||
|
write_state LIVEKIT "$INCLUDE_LIVEKIT"
|
||||||
|
|
||||||
echo "Select Web Client: 1) Element 2) Cinny 3) FluffyChat 4) None"
|
echo "Select Web Client: 1) Element 2) Cinny 3) FluffyChat 4) None"
|
||||||
read -r -p "Default [1]: " WEB_APP_INPUT
|
read -r -p "Default [1]: " WEB_APP_INPUT
|
||||||
WEB_APP_INPUT="${WEB_APP_INPUT:-1}"
|
WEB_APP_INPUT="${WEB_APP_INPUT:-1}"
|
||||||
case "$WEB_APP_INPUT" in
|
case "$WEB_APP_INPUT" in
|
||||||
1) INCLUDE_ELEMENT=true; INCLUDE_CINNY=false; INCLUDE_FLUFFY=false ;;
|
1) INCLUDE_ELEMENT=true; INCLUDE_CINNY=false; INCLUDE_FLUFFY=false; write_state "APP" "ELEMENT" ;;
|
||||||
2) INCLUDE_ELEMENT=false; INCLUDE_CINNY=true; INCLUDE_FLUFFY=false ;;
|
2) INCLUDE_ELEMENT=false; INCLUDE_CINNY=true; INCLUDE_FLUFFY=false; write_state "APP" "CINNY" ;;
|
||||||
3) INCLUDE_ELEMENT=false; INCLUDE_CINNY=false; INCLUDE_FLUFFY=true ;;
|
3) INCLUDE_ELEMENT=false; INCLUDE_CINNY=false; INCLUDE_FLUFFY=true; write_state "APP" "FLUFFY" ;;
|
||||||
*) INCLUDE_ELEMENT=false; INCLUDE_CINNY=false; INCLUDE_FLUFFY=false ;;
|
*) INCLUDE_ELEMENT=false; INCLUDE_CINNY=false; INCLUDE_FLUFFY=false; write_state "APP" "NONE" ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
echo "Select Reverse Proxy: 1) Traefik 2) nginx"
|
echo "Select Reverse Proxy: 1) Traefik 2) nginx"
|
||||||
read -r -p "Default [1]: " PROXY_INPUT
|
read -r -p "Default [1]: " PROXY_INPUT
|
||||||
PROXY_INPUT="${PROXY_INPUT:-1}"
|
PROXY_INPUT="${PROXY_INPUT:-1}"
|
||||||
case "$PROXY_INPUT" in
|
case "$PROXY_INPUT" in
|
||||||
1) INCLUDE_NGINX=false; INCLUDE_TRAEFIK=true ;;
|
2)
|
||||||
*) INCLUDE_NGINX=true; INCLUDE_TRAEFIK=false ;;
|
INCLUDE_NGINX=true
|
||||||
|
INCLUDE_TRAEFIK=false
|
||||||
|
write_state "PROXY" "NGINX"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
INCLUDE_NGINX=false
|
||||||
|
INCLUDE_TRAEFIK=true
|
||||||
|
write_state "PROXY" "TRAEFIK"
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
cp "$TEMPLATE_FILE" "$OUTPUT_FILE"
|
cp "$TEMPLATE_FILE" "$OUTPUT_FILE"
|
||||||
|
|
||||||
toggle_block() {
|
toggle_block "$OUTPUT_FILE" "# \[LIVEKIT_START\]" "# \[LIVEKIT_END\]" "$INCLUDE_LIVEKIT"
|
||||||
[[ "$3" == "true" ]] && sed -i "/$1/d; /$2/d" "$OUTPUT_FILE" || sed -i "/$1/,/$2/d" "$OUTPUT_FILE"
|
toggle_block "$OUTPUT_FILE" "# \[ELEMENT_START\]" "# \[ELEMENT_END\]" "$INCLUDE_ELEMENT"
|
||||||
}
|
toggle_block "$OUTPUT_FILE" "# \[CINNY_START\]" "# \[CINNY_END\]" "$INCLUDE_CINNY"
|
||||||
|
toggle_block "$OUTPUT_FILE" "# \[FLUFFYCHAT_START\]" "# \[FLUFFYCHAT_END\]" "$INCLUDE_FLUFFY"
|
||||||
|
toggle_block "$OUTPUT_FILE" "# \[NGINX_START\]" "# \[NGINX_END\]" "$INCLUDE_NGINX"
|
||||||
|
toggle_block "$OUTPUT_FILE" "# \[TRAEFIK_START\]" "# \[TRAEFIK_END\]" "$INCLUDE_TRAEFIK"
|
||||||
|
|
||||||
toggle_block "# \[LIVEKIT_START\]" "# \[LIVEKIT_END\]" "$INCLUDE_LIVEKIT"
|
if [[ "$INCLUDE_TRAEFIK" == "true" ]]; then
|
||||||
toggle_block "# \[ELEMENT_START\]" "# \[ELEMENT_END\]" "$INCLUDE_ELEMENT"
|
sed -i "/# \[TRAEFIK_LABELS_START\]/d; /# \[TRAEFIK_LABELS_END\]/d" "$OUTPUT_FILE"
|
||||||
toggle_block "# \[CINNY_START\]" "# \[CINNY_END\]" "$INCLUDE_CINNY"
|
else
|
||||||
toggle_block "# \[FLUFFYCHAT_START\]" "# \[FLUFFYCHAT_END\]" "$INCLUDE_FLUFFY"
|
|
||||||
toggle_block "# \[NGINX_START\]" "# \[NGINX_END\]" "$INCLUDE_NGINX"
|
|
||||||
toggle_block "# \[TRAEFIK_START\]" "# \[TRAEFIK_END\]" "$INCLUDE_TRAEFIK"
|
|
||||||
|
|
||||||
[[ "$INCLUDE_TRAEFIK" == "true" ]] && sed -i "/# \[TRAEFIK_LABELS_START\]/d; /# \[TRAEFIK_LABELS_END\]/d" "$OUTPUT_FILE" || \
|
|
||||||
sed -i "/# \[TRAEFIK_LABELS_START\]/,/# \[TRAEFIK_LABELS_END\]/d" "$OUTPUT_FILE"
|
sed -i "/# \[TRAEFIK_LABELS_START\]/,/# \[TRAEFIK_LABELS_END\]/d" "$OUTPUT_FILE"
|
||||||
|
fi
|
||||||
|
|
||||||
log_info "Compose file generated: $OUTPUT_FILE"
|
log_info "Compose file generated: $OUTPUT_FILE"
|
||||||
|
|||||||
@@ -51,8 +51,9 @@ write_state() {
|
|||||||
local value="$2"
|
local value="$2"
|
||||||
local init_file="${INIT_DIR}/init.ini"
|
local init_file="${INIT_DIR}/init.ini"
|
||||||
local upper_value
|
local upper_value
|
||||||
|
upper_key=$(echo "$key" | tr '[:lower:]' '[:upper:]')
|
||||||
upper_value=$(echo "$value" | tr '[:lower:]' '[:upper:]')
|
upper_value=$(echo "$value" | tr '[:lower:]' '[:upper:]')
|
||||||
echo "${key}=${upper_value}" >> "$init_file"
|
echo "${upper_key}=${upper_value}" >> "$init_file"
|
||||||
}
|
}
|
||||||
|
|
||||||
load_state() {
|
load_state() {
|
||||||
@@ -64,6 +65,31 @@ load_state() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
toggle_block() {
|
||||||
|
local target_file="$1"
|
||||||
|
local start_marker="$2"
|
||||||
|
local end_marker="$3"
|
||||||
|
local keep_markers="$4" # "true" or "false"
|
||||||
|
|
||||||
|
if [[ -z "$target_file" ]]; then
|
||||||
|
echo "Error: Output file path is required for toggle_block." >&2
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -f "$target_file" ]]; then
|
||||||
|
echo "Error: Target file '$target_file' not found." >&2
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$keep_markers" == "true" ]]; then
|
||||||
|
# Remove lines containing markers individually
|
||||||
|
sed -i "/${start_marker}/d; /${end_marker}/d" "$target_file"
|
||||||
|
else
|
||||||
|
# Remove block from start to end
|
||||||
|
sed -i "/${start_marker},/${end_marker}/d" "$target_file"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
clear_state() {
|
clear_state() {
|
||||||
local init_file="${INIT_DIR}/init.ini"
|
local init_file="${INIT_DIR}/init.ini"
|
||||||
> "$init_file"
|
> "$init_file"
|
||||||
@@ -110,7 +136,6 @@ prompt_var() {
|
|||||||
final_value="$input"
|
final_value="$input"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Escape special characters for .env file
|
|
||||||
final_value="${final_value//\\/\\\\}"
|
final_value="${final_value//\\/\\\\}"
|
||||||
final_value="${final_value//\"/\\\"}"
|
final_value="${final_value//\"/\\\"}"
|
||||||
final_value="${final_value//\$/\\\$}"
|
final_value="${final_value//\$/\\\$}"
|
||||||
@@ -119,6 +144,24 @@ prompt_var() {
|
|||||||
echo "${var_name}=\"${final_value}\"" >> "$ENV_FILE"
|
echo "${var_name}=\"${final_value}\"" >> "$ENV_FILE"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto_var() {
|
||||||
|
local name="$1"
|
||||||
|
local default="$2"
|
||||||
|
local is_pass="$3"
|
||||||
|
|
||||||
|
if [[ "$is_pass" == "yes" ]]; then
|
||||||
|
local secret
|
||||||
|
secret=$(generate_secret 32)
|
||||||
|
echo "${name}=\"${secret}\"" >> "$ENV_FILE"
|
||||||
|
log_info " Generated ${name}"
|
||||||
|
else
|
||||||
|
echo "${name}=\"${default}\"" >> "$ENV_FILE"
|
||||||
|
log_info " Set ${name} to default: ${default}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# --- File Permissions ---
|
# --- File Permissions ---
|
||||||
fix_ownership() {
|
fix_ownership() {
|
||||||
local target="$1"
|
local target="$1"
|
||||||
|
|||||||
+28
-10
@@ -5,22 +5,40 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|||||||
source "${SCRIPT_DIR}/functions.sh"
|
source "${SCRIPT_DIR}/functions.sh"
|
||||||
resolve_paths
|
resolve_paths
|
||||||
|
|
||||||
require_command "openssl" || require_command "pwgen"
|
|
||||||
|
|
||||||
main() {
|
main() {
|
||||||
> "$ENV_FILE"
|
> "$ENV_FILE"
|
||||||
|
|
||||||
read -r -p "Base Domain (e.g. example.org) [example.org]: " DOMAIN_INPUT
|
read -r -p "Base Domain (e.g. example.org) [example.org]: " DOMAIN_INPUT
|
||||||
BASE_DOMAIN="${DOMAIN_INPUT:-example.org}"
|
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."
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
cat >> "$ENV_FILE" <<EOF
|
|
||||||
DOMAIN="${BASE_DOMAIN}"
|
|
||||||
HOMESERVER_FQDN="matrix.${BASE_DOMAIN}"
|
|
||||||
MAS_FQDN="auth.${BASE_DOMAIN}"
|
|
||||||
APP_FQDN="app.${BASE_DOMAIN}"
|
|
||||||
EOF
|
|
||||||
|
|
||||||
log_info "Base Domain set to: ${BASE_DOMAIN}"
|
|
||||||
|
|
||||||
prompt_var "USER_ID" "Docker UserId" "1000" "no"
|
prompt_var "USER_ID" "Docker UserId" "1000" "no"
|
||||||
prompt_var "GROUP_ID" "Docker GroupID" "1000" "no"
|
prompt_var "GROUP_ID" "Docker GroupID" "1000" "no"
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ source "${SCRIPT_DIR}/init/scripts/functions.sh"
|
|||||||
resolve_paths
|
resolve_paths
|
||||||
|
|
||||||
ENV_FILE="${ROOT_DIR}/.env"
|
ENV_FILE="${ROOT_DIR}/.env"
|
||||||
BACKUP_DIR="${ROOT_DIR}/backups"
|
|
||||||
|
|
||||||
log_info "=== AMMIDS Setup Orchestrator ==="
|
log_info "=== AMMIDS Setup Orchestrator ==="
|
||||||
|
|
||||||
@@ -20,7 +19,7 @@ if [[ -f "$ENV_FILE" ]]; then
|
|||||||
read -r -p " Overwrite and create backup? [y/N]: " confirm
|
read -r -p " Overwrite and create backup? [y/N]: " confirm
|
||||||
if [[ "$confirm" =~ ^[Yy]$ ]]; then
|
if [[ "$confirm" =~ ^[Yy]$ ]]; then
|
||||||
mkdir -p "$BACKUP_DIR"
|
mkdir -p "$BACKUP_DIR"
|
||||||
BACKUP_FILE="${BACKUP_DIR}/.env.$(date +%Y%m%d_%H%M%S)"
|
BACKUP_FILE="${SCRIPT_DIR}/.env.$(date +%Y%m%d_%H%M%S)"
|
||||||
cp "$ENV_FILE" "$BACKUP_FILE"
|
cp "$ENV_FILE" "$BACKUP_FILE"
|
||||||
log_info "Backup created: $BACKUP_FILE"
|
log_info "Backup created: $BACKUP_FILE"
|
||||||
"${SCRIPT_DIR}/init/scripts/set_env.sh"
|
"${SCRIPT_DIR}/init/scripts/set_env.sh"
|
||||||
|
|||||||
Reference in New Issue
Block a user