mirror of
https://github.com/kossakovsky/n8n-install.git
synced 2026-03-07 22:33:11 +00:00
295 lines
9.4 KiB
Bash
295 lines
9.4 KiB
Bash
#!/bin/bash
|
|
# =============================================================================
|
|
# local.sh - Local installation mode utilities
|
|
# =============================================================================
|
|
# Encapsulates all logic related to local vs VPS installation modes.
|
|
# Provides functions for mode detection, environment configuration,
|
|
# and mode-specific settings.
|
|
#
|
|
# Usage: source "$(dirname "$0")/local.sh"
|
|
#
|
|
# Functions:
|
|
# - get_install_mode: Get current installation mode (vps|local)
|
|
# - is_local_mode: Check if running in local mode
|
|
# - is_vps_mode: Check if running in VPS mode
|
|
# - get_protocol: Get protocol based on mode (http|https)
|
|
# - get_caddy_auto_https: Get Caddy auto_https setting (on|off)
|
|
# - get_n8n_secure_cookie: Get n8n secure cookie setting (true|false)
|
|
# - get_local_domain: Get default domain for local mode (.local)
|
|
# - configure_mode_env: Set all mode-specific environment variables
|
|
# - print_local_hosts_instructions: Display hosts file setup instructions
|
|
# =============================================================================
|
|
|
|
#=============================================================================
|
|
# CONSTANTS
|
|
#=============================================================================
|
|
|
|
# Local mode defaults
|
|
LOCAL_MODE_DOMAIN="local"
|
|
LOCAL_MODE_PROTOCOL="http"
|
|
LOCAL_MODE_CADDY_AUTO_HTTPS="off"
|
|
LOCAL_MODE_N8N_SECURE_COOKIE="false"
|
|
|
|
# VPS mode defaults
|
|
VPS_MODE_PROTOCOL="https"
|
|
VPS_MODE_CADDY_AUTO_HTTPS="on"
|
|
VPS_MODE_N8N_SECURE_COOKIE="true"
|
|
|
|
#=============================================================================
|
|
# MODE DETECTION
|
|
#=============================================================================
|
|
|
|
# Get the current installation mode
|
|
# Checks: 1) exported INSTALL_MODE, 2) .env file, 3) defaults to "vps"
|
|
# Usage: mode=$(get_install_mode)
|
|
get_install_mode() {
|
|
local mode="${INSTALL_MODE:-}"
|
|
|
|
# If not set, try to read from .env
|
|
if [[ -z "$mode" && -n "${ENV_FILE:-}" && -f "$ENV_FILE" ]]; then
|
|
mode=$(grep "^INSTALL_MODE=" "$ENV_FILE" 2>/dev/null | cut -d'=' -f2- | tr -d '"'"'" || true)
|
|
fi
|
|
|
|
# Default to vps for backward compatibility
|
|
echo "${mode:-vps}"
|
|
}
|
|
|
|
# Check if running in local mode
|
|
# Usage: is_local_mode && echo "Local mode"
|
|
is_local_mode() {
|
|
[[ "$(get_install_mode)" == "local" ]]
|
|
}
|
|
|
|
# Check if running in VPS mode
|
|
# Usage: is_vps_mode && echo "VPS mode"
|
|
is_vps_mode() {
|
|
[[ "$(get_install_mode)" != "local" ]]
|
|
}
|
|
|
|
#=============================================================================
|
|
# MODE-SPECIFIC GETTERS
|
|
#=============================================================================
|
|
|
|
# Get protocol based on installation mode
|
|
# Usage: protocol=$(get_protocol)
|
|
get_protocol() {
|
|
if is_local_mode; then
|
|
echo "$LOCAL_MODE_PROTOCOL"
|
|
else
|
|
echo "$VPS_MODE_PROTOCOL"
|
|
fi
|
|
}
|
|
|
|
# Get Caddy auto_https setting based on installation mode
|
|
# Usage: auto_https=$(get_caddy_auto_https)
|
|
get_caddy_auto_https() {
|
|
if is_local_mode; then
|
|
echo "$LOCAL_MODE_CADDY_AUTO_HTTPS"
|
|
else
|
|
echo "$VPS_MODE_CADDY_AUTO_HTTPS"
|
|
fi
|
|
}
|
|
|
|
# Get n8n secure cookie setting based on installation mode
|
|
# Usage: secure_cookie=$(get_n8n_secure_cookie)
|
|
get_n8n_secure_cookie() {
|
|
if is_local_mode; then
|
|
echo "$LOCAL_MODE_N8N_SECURE_COOKIE"
|
|
else
|
|
echo "$VPS_MODE_N8N_SECURE_COOKIE"
|
|
fi
|
|
}
|
|
|
|
# Get default domain for local mode
|
|
# Usage: domain=$(get_local_domain)
|
|
get_local_domain() {
|
|
echo "$LOCAL_MODE_DOMAIN"
|
|
}
|
|
|
|
#=============================================================================
|
|
# ENVIRONMENT CONFIGURATION
|
|
#=============================================================================
|
|
|
|
# Configure all mode-specific environment variables
|
|
# Populates the provided associative array with mode settings
|
|
# Usage: declare -A settings; configure_mode_env settings "local"
|
|
# Arguments:
|
|
# $1 - nameref to associative array for storing values
|
|
# $2 - mode (optional, defaults to get_install_mode())
|
|
configure_mode_env() {
|
|
local -n _env_ref=$1
|
|
local mode="${2:-$(get_install_mode)}"
|
|
|
|
_env_ref["INSTALL_MODE"]="$mode"
|
|
|
|
if [[ "$mode" == "local" ]]; then
|
|
_env_ref["PROTOCOL"]="$LOCAL_MODE_PROTOCOL"
|
|
_env_ref["CADDY_AUTO_HTTPS"]="$LOCAL_MODE_CADDY_AUTO_HTTPS"
|
|
_env_ref["N8N_SECURE_COOKIE"]="$LOCAL_MODE_N8N_SECURE_COOKIE"
|
|
else
|
|
_env_ref["PROTOCOL"]="$VPS_MODE_PROTOCOL"
|
|
_env_ref["CADDY_AUTO_HTTPS"]="$VPS_MODE_CADDY_AUTO_HTTPS"
|
|
_env_ref["N8N_SECURE_COOKIE"]="$VPS_MODE_N8N_SECURE_COOKIE"
|
|
fi
|
|
}
|
|
|
|
#=============================================================================
|
|
# HOSTS FILE UTILITIES
|
|
#=============================================================================
|
|
|
|
# All hostname variables used in the project
|
|
# Used by generate_hosts.sh and other scripts that need hostname list
|
|
get_all_hostname_vars() {
|
|
local vars=(
|
|
"N8N_HOSTNAME"
|
|
"WEBUI_HOSTNAME"
|
|
"FLOWISE_HOSTNAME"
|
|
"DIFY_HOSTNAME"
|
|
"RAGAPP_HOSTNAME"
|
|
"RAGFLOW_HOSTNAME"
|
|
"LANGFUSE_HOSTNAME"
|
|
"SUPABASE_HOSTNAME"
|
|
"GRAFANA_HOSTNAME"
|
|
"WAHA_HOSTNAME"
|
|
"PROMETHEUS_HOSTNAME"
|
|
"PORTAINER_HOSTNAME"
|
|
"POSTIZ_HOSTNAME"
|
|
"POSTGRESUS_HOSTNAME"
|
|
"LETTA_HOSTNAME"
|
|
"LIGHTRAG_HOSTNAME"
|
|
"WEAVIATE_HOSTNAME"
|
|
"QDRANT_HOSTNAME"
|
|
"COMFYUI_HOSTNAME"
|
|
"LT_HOSTNAME"
|
|
"NEO4J_HOSTNAME"
|
|
"NOCODB_HOSTNAME"
|
|
"PADDLEOCR_HOSTNAME"
|
|
"DOCLING_HOSTNAME"
|
|
"WELCOME_HOSTNAME"
|
|
"SEARXNG_HOSTNAME"
|
|
)
|
|
printf '%s\n' "${vars[@]}"
|
|
}
|
|
|
|
# Print instructions for setting up /etc/hosts for local mode
|
|
# Usage: print_local_hosts_instructions
|
|
print_local_hosts_instructions() {
|
|
# Requires color variables from utils.sh
|
|
local cyan="${CYAN:-}"
|
|
local white="${WHITE:-}"
|
|
local dim="${DIM:-}"
|
|
local nc="${NC:-}"
|
|
|
|
echo ""
|
|
echo -e " ${white}Before accessing services, add entries to your hosts file:${nc}"
|
|
echo ""
|
|
echo -e " ${cyan}sudo bash -c 'cat hosts.txt >> /etc/hosts'${nc}"
|
|
echo ""
|
|
echo -e " ${dim}Then flush your DNS cache:${nc}"
|
|
echo -e " ${cyan}macOS: sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder${nc}"
|
|
echo -e " ${cyan}Linux: sudo systemd-resolve --flush-caches${nc}"
|
|
}
|
|
|
|
#=============================================================================
|
|
# PREREQUISITES CHECK (for local mode)
|
|
#=============================================================================
|
|
|
|
# Check if all prerequisites for local mode are met
|
|
# Returns 0 if all prerequisites are met, 1 otherwise
|
|
# Usage: check_local_prerequisites || exit 1
|
|
check_local_prerequisites() {
|
|
local missing=()
|
|
|
|
# Check Docker
|
|
if ! command -v docker &> /dev/null; then
|
|
missing+=("docker")
|
|
elif ! docker info > /dev/null 2>&1; then
|
|
missing+=("docker-daemon")
|
|
fi
|
|
|
|
# Check Docker Compose
|
|
if ! docker compose version &> /dev/null 2>&1; then
|
|
missing+=("docker-compose")
|
|
fi
|
|
|
|
# Check whiptail
|
|
if ! command -v whiptail &> /dev/null; then
|
|
missing+=("whiptail")
|
|
fi
|
|
|
|
# Check openssl
|
|
if ! command -v openssl &> /dev/null; then
|
|
missing+=("openssl")
|
|
fi
|
|
|
|
# Check git
|
|
if ! command -v git &> /dev/null; then
|
|
missing+=("git")
|
|
fi
|
|
|
|
# Check Python3
|
|
if ! command -v python3 &> /dev/null; then
|
|
missing+=("python3")
|
|
fi
|
|
|
|
if [[ ${#missing[@]} -gt 0 ]]; then
|
|
echo "Missing prerequisites: ${missing[*]}"
|
|
return 1
|
|
fi
|
|
|
|
return 0
|
|
}
|
|
|
|
# Print installation instructions for missing prerequisites
|
|
# Usage: print_prerequisite_instructions "docker" "whiptail"
|
|
print_prerequisite_instructions() {
|
|
local os_type
|
|
os_type=$(uname)
|
|
|
|
for dep in "$@"; do
|
|
case "$dep" in
|
|
docker)
|
|
echo " Docker:"
|
|
case "$os_type" in
|
|
Darwin) echo " Install Docker Desktop: https://www.docker.com/products/docker-desktop" ;;
|
|
Linux) echo " Install Docker: https://docs.docker.com/engine/install/" ;;
|
|
esac
|
|
;;
|
|
docker-daemon)
|
|
echo " Docker daemon is not running:"
|
|
case "$os_type" in
|
|
Darwin) echo " Start Docker Desktop from Applications" ;;
|
|
Linux) echo " Run: sudo systemctl start docker" ;;
|
|
esac
|
|
;;
|
|
docker-compose)
|
|
echo " Docker Compose:"
|
|
echo " Should be included with Docker Desktop"
|
|
echo " Or install: https://docs.docker.com/compose/install/"
|
|
;;
|
|
whiptail)
|
|
echo " whiptail:"
|
|
case "$os_type" in
|
|
Darwin) echo " Run: brew install newt" ;;
|
|
Linux) echo " Run: sudo apt-get install -y whiptail" ;;
|
|
esac
|
|
;;
|
|
openssl)
|
|
echo " openssl:"
|
|
case "$os_type" in
|
|
Darwin) echo " Usually pre-installed, or: brew install openssl" ;;
|
|
Linux) echo " Run: sudo apt-get install -y openssl" ;;
|
|
esac
|
|
;;
|
|
git)
|
|
echo " git:"
|
|
echo " Install: https://git-scm.com/downloads"
|
|
;;
|
|
python3)
|
|
echo " Python3:"
|
|
echo " Install: https://www.python.org/downloads/"
|
|
;;
|
|
esac
|
|
done
|
|
}
|