mirror of
https://github.com/kossakovsky/n8n-install.git
synced 2026-03-09 15:25:33 +00:00
Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6a1301bfc0 | ||
|
|
19325191c3 |
10
CHANGELOG.md
10
CHANGELOG.md
@@ -2,6 +2,16 @@
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
## [1.3.2] - 2026-02-27
|
||||
|
||||
### Fixed
|
||||
- **Docker Compose** - Respect `docker-compose.override.yml` for user customizations (#44). All compose file assembly points now include the override file when present.
|
||||
|
||||
## [1.3.1] - 2026-02-27
|
||||
|
||||
### Fixed
|
||||
- **Installer** - Skip n8n workflow import and worker configuration prompts when n8n profile is not selected
|
||||
|
||||
## [1.3.0] - 2026-02-27
|
||||
|
||||
### Added
|
||||
|
||||
@@ -27,6 +27,10 @@ init_paths
|
||||
# Ensure .env exists
|
||||
ensure_file_exists "$ENV_FILE"
|
||||
|
||||
# Load COMPOSE_PROFILES early so is_profile_active works for all sections
|
||||
COMPOSE_PROFILES_VALUE="$(read_env_var COMPOSE_PROFILES)"
|
||||
COMPOSE_PROFILES="$COMPOSE_PROFILES_VALUE"
|
||||
|
||||
# ----------------------------------------------------------------
|
||||
# Prompt for OpenAI API key (optional) using .env value as source of truth
|
||||
# ----------------------------------------------------------------
|
||||
@@ -48,87 +52,89 @@ fi
|
||||
# ----------------------------------------------------------------
|
||||
# Logic for n8n workflow import (RUN_N8N_IMPORT)
|
||||
# ----------------------------------------------------------------
|
||||
log_subheader "n8n Workflow Import"
|
||||
final_run_n8n_import_decision="false"
|
||||
require_whiptail
|
||||
if wt_yesno "Import n8n Workflows" "Import ~300 ready-made n8n workflows now? This can take ~30 minutes." "no"; then
|
||||
final_run_n8n_import_decision="true"
|
||||
else
|
||||
if is_profile_active "n8n"; then
|
||||
log_subheader "n8n Workflow Import"
|
||||
final_run_n8n_import_decision="false"
|
||||
fi
|
||||
require_whiptail
|
||||
if wt_yesno "Import n8n Workflows" "Import ~300 ready-made n8n workflows now? This can take ~30 minutes." "no"; then
|
||||
final_run_n8n_import_decision="true"
|
||||
else
|
||||
final_run_n8n_import_decision="false"
|
||||
fi
|
||||
|
||||
# Persist RUN_N8N_IMPORT to .env
|
||||
write_env_var "RUN_N8N_IMPORT" "$final_run_n8n_import_decision"
|
||||
# Persist RUN_N8N_IMPORT to .env
|
||||
write_env_var "RUN_N8N_IMPORT" "$final_run_n8n_import_decision"
|
||||
else
|
||||
write_env_var "RUN_N8N_IMPORT" "false"
|
||||
fi
|
||||
|
||||
|
||||
# ----------------------------------------------------------------
|
||||
# Prompt for number of n8n workers
|
||||
# ----------------------------------------------------------------
|
||||
log_subheader "n8n Worker Configuration"
|
||||
EXISTING_N8N_WORKER_COUNT="$(read_env_var N8N_WORKER_COUNT)"
|
||||
require_whiptail
|
||||
if [[ -n "$EXISTING_N8N_WORKER_COUNT" ]]; then
|
||||
N8N_WORKER_COUNT_CURRENT="$EXISTING_N8N_WORKER_COUNT"
|
||||
N8N_WORKER_COUNT_INPUT_RAW=$(wt_input "n8n Workers (instances)" "Enter new number of n8n workers, or leave as current ($N8N_WORKER_COUNT_CURRENT)." "") || true
|
||||
if [[ -z "$N8N_WORKER_COUNT_INPUT_RAW" ]]; then
|
||||
N8N_WORKER_COUNT="$N8N_WORKER_COUNT_CURRENT"
|
||||
else
|
||||
if [[ "$N8N_WORKER_COUNT_INPUT_RAW" =~ ^0*[1-9][0-9]*$ ]]; then
|
||||
N8N_WORKER_COUNT_TEMP="$((10#$N8N_WORKER_COUNT_INPUT_RAW))"
|
||||
if [[ "$N8N_WORKER_COUNT_TEMP" -ge 1 ]]; then
|
||||
if wt_yesno "Confirm Workers" "Update n8n workers to $N8N_WORKER_COUNT_TEMP?" "yes"; then
|
||||
N8N_WORKER_COUNT="$N8N_WORKER_COUNT_TEMP"
|
||||
if is_profile_active "n8n"; then
|
||||
log_subheader "n8n Worker Configuration"
|
||||
EXISTING_N8N_WORKER_COUNT="$(read_env_var N8N_WORKER_COUNT)"
|
||||
require_whiptail
|
||||
if [[ -n "$EXISTING_N8N_WORKER_COUNT" ]]; then
|
||||
N8N_WORKER_COUNT_CURRENT="$EXISTING_N8N_WORKER_COUNT"
|
||||
N8N_WORKER_COUNT_INPUT_RAW=$(wt_input "n8n Workers (instances)" "Enter new number of n8n workers, or leave as current ($N8N_WORKER_COUNT_CURRENT)." "") || true
|
||||
if [[ -z "$N8N_WORKER_COUNT_INPUT_RAW" ]]; then
|
||||
N8N_WORKER_COUNT="$N8N_WORKER_COUNT_CURRENT"
|
||||
else
|
||||
if [[ "$N8N_WORKER_COUNT_INPUT_RAW" =~ ^0*[1-9][0-9]*$ ]]; then
|
||||
N8N_WORKER_COUNT_TEMP="$((10#$N8N_WORKER_COUNT_INPUT_RAW))"
|
||||
if [[ "$N8N_WORKER_COUNT_TEMP" -ge 1 ]]; then
|
||||
if wt_yesno "Confirm Workers" "Update n8n workers to $N8N_WORKER_COUNT_TEMP?" "yes"; then
|
||||
N8N_WORKER_COUNT="$N8N_WORKER_COUNT_TEMP"
|
||||
else
|
||||
N8N_WORKER_COUNT="$N8N_WORKER_COUNT_CURRENT"
|
||||
log_info "Change declined. Keeping N8N_WORKER_COUNT at $N8N_WORKER_COUNT."
|
||||
fi
|
||||
else
|
||||
log_warning "Invalid input '$N8N_WORKER_COUNT_INPUT_RAW'. Number must be positive. Keeping $N8N_WORKER_COUNT_CURRENT."
|
||||
N8N_WORKER_COUNT="$N8N_WORKER_COUNT_CURRENT"
|
||||
log_info "Change declined. Keeping N8N_WORKER_COUNT at $N8N_WORKER_COUNT."
|
||||
fi
|
||||
else
|
||||
log_warning "Invalid input '$N8N_WORKER_COUNT_INPUT_RAW'. Number must be positive. Keeping $N8N_WORKER_COUNT_CURRENT."
|
||||
log_warning "Invalid input '$N8N_WORKER_COUNT_INPUT_RAW'. Please enter a positive integer. Keeping $N8N_WORKER_COUNT_CURRENT."
|
||||
N8N_WORKER_COUNT="$N8N_WORKER_COUNT_CURRENT"
|
||||
fi
|
||||
else
|
||||
log_warning "Invalid input '$N8N_WORKER_COUNT_INPUT_RAW'. Please enter a positive integer. Keeping $N8N_WORKER_COUNT_CURRENT."
|
||||
N8N_WORKER_COUNT="$N8N_WORKER_COUNT_CURRENT"
|
||||
fi
|
||||
fi
|
||||
else
|
||||
while true; do
|
||||
N8N_WORKER_COUNT_INPUT_RAW=$(wt_input "n8n Workers" "Enter number of n8n workers to run (default 1)." "1") || true
|
||||
N8N_WORKER_COUNT_CANDIDATE="${N8N_WORKER_COUNT_INPUT_RAW:-1}"
|
||||
if [[ "$N8N_WORKER_COUNT_CANDIDATE" =~ ^0*[1-9][0-9]*$ ]]; then
|
||||
N8N_WORKER_COUNT_VALIDATED="$((10#$N8N_WORKER_COUNT_CANDIDATE))"
|
||||
if [[ "$N8N_WORKER_COUNT_VALIDATED" -ge 1 ]]; then
|
||||
if wt_yesno "Confirm Workers" "Run $N8N_WORKER_COUNT_VALIDATED n8n worker(s)?" "yes"; then
|
||||
N8N_WORKER_COUNT="$N8N_WORKER_COUNT_VALIDATED"
|
||||
break
|
||||
else
|
||||
while true; do
|
||||
N8N_WORKER_COUNT_INPUT_RAW=$(wt_input "n8n Workers" "Enter number of n8n workers to run (default 1)." "1") || true
|
||||
N8N_WORKER_COUNT_CANDIDATE="${N8N_WORKER_COUNT_INPUT_RAW:-1}"
|
||||
if [[ "$N8N_WORKER_COUNT_CANDIDATE" =~ ^0*[1-9][0-9]*$ ]]; then
|
||||
N8N_WORKER_COUNT_VALIDATED="$((10#$N8N_WORKER_COUNT_CANDIDATE))"
|
||||
if [[ "$N8N_WORKER_COUNT_VALIDATED" -ge 1 ]]; then
|
||||
if wt_yesno "Confirm Workers" "Run $N8N_WORKER_COUNT_VALIDATED n8n worker(s)?" "yes"; then
|
||||
N8N_WORKER_COUNT="$N8N_WORKER_COUNT_VALIDATED"
|
||||
break
|
||||
fi
|
||||
else
|
||||
log_error "Number of workers must be a positive integer."
|
||||
fi
|
||||
else
|
||||
log_error "Number of workers must be a positive integer."
|
||||
log_error "Invalid input '$N8N_WORKER_COUNT_CANDIDATE'. Please enter a positive integer (e.g., 1, 2)."
|
||||
fi
|
||||
else
|
||||
log_error "Invalid input '$N8N_WORKER_COUNT_CANDIDATE'. Please enter a positive integer (e.g., 1, 2)."
|
||||
fi
|
||||
done
|
||||
done
|
||||
fi
|
||||
# Ensure N8N_WORKER_COUNT is definitely set (should be by logic above)
|
||||
N8N_WORKER_COUNT="${N8N_WORKER_COUNT:-1}"
|
||||
|
||||
# Persist N8N_WORKER_COUNT to .env
|
||||
write_env_var "N8N_WORKER_COUNT" "$N8N_WORKER_COUNT"
|
||||
|
||||
# Generate worker-runner pairs configuration
|
||||
# Each worker gets its own dedicated task runner sidecar
|
||||
log_info "Generating n8n worker-runner pairs configuration..."
|
||||
bash "$SCRIPT_DIR/generate_n8n_workers.sh"
|
||||
fi
|
||||
# Ensure N8N_WORKER_COUNT is definitely set (should be by logic above)
|
||||
N8N_WORKER_COUNT="${N8N_WORKER_COUNT:-1}"
|
||||
|
||||
# Persist N8N_WORKER_COUNT to .env
|
||||
write_env_var "N8N_WORKER_COUNT" "$N8N_WORKER_COUNT"
|
||||
|
||||
# Generate worker-runner pairs configuration
|
||||
# Each worker gets its own dedicated task runner sidecar
|
||||
log_info "Generating n8n worker-runner pairs configuration..."
|
||||
bash "$SCRIPT_DIR/generate_n8n_workers.sh"
|
||||
|
||||
|
||||
# ----------------------------------------------------------------
|
||||
# Cloudflare Tunnel Token (if cloudflare-tunnel profile is active)
|
||||
# ----------------------------------------------------------------
|
||||
COMPOSE_PROFILES_VALUE="$(read_env_var COMPOSE_PROFILES)"
|
||||
# Set COMPOSE_PROFILES for is_profile_active to work
|
||||
COMPOSE_PROFILES="$COMPOSE_PROFILES_VALUE"
|
||||
|
||||
if is_profile_active "cloudflare-tunnel"; then
|
||||
log_subheader "Cloudflare Tunnel"
|
||||
existing_cf_token="$(read_env_var CLOUDFLARE_TUNNEL_TOKEN)"
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
# - docker-compose.n8n-workers.yml (if exists and n8n profile active)
|
||||
# - supabase/docker/docker-compose.yml (if exists and supabase profile active)
|
||||
# - dify/docker/docker-compose.yaml (if exists and dify profile active)
|
||||
# - docker-compose.override.yml (if exists, user overrides with highest precedence)
|
||||
#
|
||||
# Usage: bash scripts/restart.sh
|
||||
# =============================================================================
|
||||
@@ -71,6 +72,10 @@ MAIN_COMPOSE_FILES=("-f" "$PROJECT_ROOT/docker-compose.yml")
|
||||
if path=$(get_n8n_workers_compose); then
|
||||
MAIN_COMPOSE_FILES+=("-f" "$path")
|
||||
fi
|
||||
OVERRIDE_COMPOSE="$PROJECT_ROOT/docker-compose.override.yml"
|
||||
if [ -f "$OVERRIDE_COMPOSE" ]; then
|
||||
MAIN_COMPOSE_FILES+=("-f" "$OVERRIDE_COMPOSE")
|
||||
fi
|
||||
|
||||
# Start main services
|
||||
log_info "Starting main services..."
|
||||
|
||||
@@ -353,6 +353,7 @@ get_dify_compose() {
|
||||
}
|
||||
|
||||
# Build array of all active compose files (main + external services)
|
||||
# Appends docker-compose.override.yml last if it exists (user overrides, highest precedence)
|
||||
# IMPORTANT: Requires COMPOSE_PROFILES to be set before calling (via load_env)
|
||||
# Usage: build_compose_files_array; docker compose "${COMPOSE_FILES[@]}" up -d
|
||||
# Result is stored in global COMPOSE_FILES array
|
||||
@@ -369,6 +370,12 @@ build_compose_files_array() {
|
||||
if path=$(get_dify_compose); then
|
||||
COMPOSE_FILES+=("-f" "$path")
|
||||
fi
|
||||
|
||||
# Include user overrides last (highest precedence)
|
||||
local override="$PROJECT_ROOT/docker-compose.override.yml"
|
||||
if [ -f "$override" ]; then
|
||||
COMPOSE_FILES+=("-f" "$override")
|
||||
fi
|
||||
}
|
||||
|
||||
#=============================================================================
|
||||
|
||||
@@ -195,6 +195,11 @@ def stop_existing_containers():
|
||||
if os.path.exists(n8n_workers_compose_path):
|
||||
cmd.extend(["-f", n8n_workers_compose_path])
|
||||
|
||||
# Include user overrides if present
|
||||
override_path = "docker-compose.override.yml"
|
||||
if os.path.exists(override_path):
|
||||
cmd.extend(["-f", override_path])
|
||||
|
||||
cmd.extend(["down"])
|
||||
run_command(cmd)
|
||||
|
||||
@@ -230,6 +235,11 @@ def start_local_ai():
|
||||
if os.path.exists(n8n_workers_compose_path):
|
||||
compose_files.extend(["-f", n8n_workers_compose_path])
|
||||
|
||||
# Include user overrides if present (must be last for highest precedence)
|
||||
override_path = "docker-compose.override.yml"
|
||||
if os.path.exists(override_path):
|
||||
compose_files.extend(["-f", override_path])
|
||||
|
||||
# Explicitly build services and pull newer base images first.
|
||||
print("Checking for newer base images and building services...")
|
||||
build_cmd = ["docker", "compose", "-p", "localai"] + compose_files + ["build", "--pull"]
|
||||
|
||||
Reference in New Issue
Block a user