mirror of
https://github.com/kossakovsky/n8n-install.git
synced 2026-04-01 10:04:33 +00:00
Compare commits
14 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7861dee1b1 | ||
|
|
6fe028d01b | ||
|
|
804b81f6cb | ||
|
|
d344291c21 | ||
|
|
463258fb06 | ||
|
|
e8a8a5a511 | ||
|
|
944e0465bd | ||
|
|
a6a3c2cb05 | ||
|
|
5859fc9d25 | ||
|
|
c33998043f | ||
|
|
174fce7527 | ||
|
|
52845d1ed9 | ||
|
|
b0564ea0d8 | ||
|
|
888347e110 |
26
.env.example
26
.env.example
@@ -183,6 +183,7 @@ SEARXNG_HOSTNAME=searxng.yourdomain.com
|
||||
SUPABASE_HOSTNAME=supabase.yourdomain.com
|
||||
WAHA_HOSTNAME=waha.yourdomain.com
|
||||
WEAVIATE_HOSTNAME=weaviate.yourdomain.com
|
||||
UPTIME_KUMA_HOSTNAME=uptime-kuma.yourdomain.com
|
||||
WEBUI_HOSTNAME=webui.yourdomain.com
|
||||
WELCOME_HOSTNAME=welcome.yourdomain.com
|
||||
|
||||
@@ -225,6 +226,10 @@ N8N_LOG_LEVEL=info
|
||||
NODES_EXCLUDE="[]"
|
||||
N8N_LOG_OUTPUT=console
|
||||
|
||||
# Maximum payload size in MB for n8n requests (default: 256 MB).
|
||||
# Increase if you need to handle large files or webhook payloads.
|
||||
N8N_PAYLOAD_SIZE_MAX=256
|
||||
|
||||
# Timezone for n8n and workflows (https://docs.n8n.io/hosting/configuration/environment-variables/timezone-localization/)
|
||||
GENERIC_TIMEZONE=America/New_York
|
||||
|
||||
@@ -420,6 +425,25 @@ IMGPROXY_ENABLE_WEBP_DETECTION=true
|
||||
# Add your OpenAI API key to enable SQL Editor Assistant
|
||||
OPENAI_API_KEY=
|
||||
|
||||
|
||||
############
|
||||
# Storage - Configuration for S3 protocol endpoint
|
||||
############
|
||||
|
||||
# S3 bucket when using S3 backend, directory name when using 'file'
|
||||
GLOBAL_S3_BUCKET=stub
|
||||
|
||||
# Used for S3 protocol endpoint configuration
|
||||
REGION=stub
|
||||
|
||||
# Equivalent to project_ref (S3 session token authentication)
|
||||
STORAGE_TENANT_ID=stub
|
||||
|
||||
# Access to Storage via S3 protocol endpoint
|
||||
S3_PROTOCOL_ACCESS_KEY_ID=
|
||||
S3_PROTOCOL_ACCESS_KEY_SECRET=
|
||||
|
||||
|
||||
# ============================================
|
||||
# Cloudflare Tunnel Configuration (Optional)
|
||||
# ============================================
|
||||
@@ -446,7 +470,7 @@ GOST_UPSTREAM_PROXY=
|
||||
|
||||
# Internal services bypass list (prevents internal Docker traffic from going through proxy)
|
||||
# Includes: Docker internal networks (172.16-31.*, 10.*), Docker DNS (127.0.0.11), and all service hostnames
|
||||
GOST_NO_PROXY=localhost,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,.local,appsmith,postgres,postgres:5432,redis,redis:6379,caddy,ollama,neo4j,qdrant,weaviate,clickhouse,minio,searxng,crawl4ai,gotenberg,langfuse-web,langfuse-worker,flowise,n8n,n8n-import,n8n-worker-1,n8n-worker-2,n8n-worker-3,n8n-worker-4,n8n-worker-5,n8n-worker-6,n8n-worker-7,n8n-worker-8,n8n-worker-9,n8n-worker-10,n8n-runner-1,n8n-runner-2,n8n-runner-3,n8n-runner-4,n8n-runner-5,n8n-runner-6,n8n-runner-7,n8n-runner-8,n8n-runner-9,n8n-runner-10,letta,lightrag,docling,postiz,temporal,temporal-ui,ragflow,ragflow-mysql,ragflow-minio,ragflow-redis,ragflow-elasticsearch,ragapp,open-webui,comfyui,waha,libretranslate,paddleocr,nocodb,db,studio,kong,auth,rest,realtime,storage,imgproxy,meta,functions,analytics,vector,supavisor,gost,api.telegram.org,telegram.org,t.me,core.telegram.org
|
||||
GOST_NO_PROXY=localhost,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,.local,appsmith,postgres,postgres:5432,redis,redis:6379,caddy,ollama,neo4j,qdrant,weaviate,clickhouse,minio,searxng,crawl4ai,gotenberg,langfuse-web,langfuse-worker,flowise,n8n,n8n-import,n8n-worker-1,n8n-worker-2,n8n-worker-3,n8n-worker-4,n8n-worker-5,n8n-worker-6,n8n-worker-7,n8n-worker-8,n8n-worker-9,n8n-worker-10,n8n-runner-1,n8n-runner-2,n8n-runner-3,n8n-runner-4,n8n-runner-5,n8n-runner-6,n8n-runner-7,n8n-runner-8,n8n-runner-9,n8n-runner-10,letta,lightrag,docling,postiz,temporal,temporal-ui,ragflow,ragflow-mysql,ragflow-minio,ragflow-redis,ragflow-elasticsearch,ragapp,open-webui,comfyui,waha,libretranslate,paddleocr,nocodb,db,studio,kong,auth,rest,realtime,storage,imgproxy,meta,functions,analytics,vector,supavisor,gost,uptime-kuma,api.telegram.org,telegram.org,t.me,core.telegram.org
|
||||
|
||||
############
|
||||
# Functions - Configuration for Functions
|
||||
|
||||
17
CHANGELOG.md
17
CHANGELOG.md
@@ -2,6 +2,23 @@
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
## [1.4.2] - 2026-03-28
|
||||
|
||||
### Fixed
|
||||
- **n8n** - Make `N8N_PAYLOAD_SIZE_MAX` configurable via `.env` (was hardcoded to 256, ignoring user overrides)
|
||||
|
||||
## [1.4.1] - 2026-03-23
|
||||
|
||||
### Fixed
|
||||
- **Supabase Storage** - Fix crash-loop (`Region is missing`) by adding missing S3 storage configuration variables (`REGION`, `GLOBAL_S3_BUCKET`, `STORAGE_TENANT_ID`) from upstream Supabase
|
||||
- **Supabase** - Sync new environment variables to existing `supabase/docker/.env` during updates (previously only populated on first install)
|
||||
|
||||
## [1.4.0] - 2026-03-15
|
||||
|
||||
### Added
|
||||
- **Uptime Kuma** - Self-hosted uptime monitoring with 90+ notification services
|
||||
- **pgvector** - Switch PostgreSQL image to `pgvector/pgvector` for vector similarity search support
|
||||
|
||||
## [1.3.3] - 2026-02-27
|
||||
|
||||
### Fixed
|
||||
|
||||
@@ -107,6 +107,12 @@ import /etc/caddy/addons/tls-snippet.conf
|
||||
reverse_proxy temporal-ui:8080
|
||||
}
|
||||
|
||||
# Uptime Kuma
|
||||
{$UPTIME_KUMA_HOSTNAME} {
|
||||
import service_tls
|
||||
reverse_proxy uptime-kuma:3001
|
||||
}
|
||||
|
||||
# Databasus
|
||||
{$DATABASUS_HOSTNAME} {
|
||||
import service_tls
|
||||
|
||||
@@ -112,6 +112,8 @@ The installer also makes the following powerful open-source tools **available fo
|
||||
|
||||
✅ [**Supabase**](https://supabase.com/) - An open-source alternative to Firebase, providing database storage, user authentication, and more. It's a popular choice for AI applications.
|
||||
|
||||
✅ [**Uptime Kuma**](https://github.com/louislam/uptime-kuma) - Self-hosted uptime monitoring tool with notifications
|
||||
|
||||
✅ [**WAHA**](https://waha.devlike.pro/) - WhatsApp HTTP API (REST API) that you can configure in a click! 3 engines: WEBJS (browser based), NOWEB (websocket nodejs), GOWS (websocket go).
|
||||
|
||||
✅ [**Weaviate**](https://weaviate.io/) - An open-source AI-native vector database with a focus on scalability and ease of use. It can be used for RAG, hybrid search, and more.
|
||||
@@ -204,6 +206,7 @@ After successful installation, your services are up and running! Here's how to g
|
||||
- **RAGFlow:** `ragflow.yourdomain.com`
|
||||
- **SearXNG:** `searxng.yourdomain.com`
|
||||
- **Supabase (Dashboard):** `supabase.yourdomain.com`
|
||||
- **Uptime Kuma:** `uptime-kuma.yourdomain.com` (Uptime monitoring dashboard)
|
||||
- **WAHA:** `waha.yourdomain.com` (WhatsApp HTTP API; engines: WEBJS, NOWEB, GOWS)
|
||||
- **Weaviate:** `weaviate.yourdomain.com`
|
||||
|
||||
|
||||
@@ -36,6 +36,7 @@ volumes:
|
||||
ragflow_redis_data:
|
||||
temporal_elasticsearch_data:
|
||||
valkey-data:
|
||||
uptime_kuma_data:
|
||||
weaviate_data:
|
||||
|
||||
# Shared logging configuration for services
|
||||
@@ -82,7 +83,7 @@ x-n8n: &service-n8n
|
||||
N8N_LOG_LEVEL: ${N8N_LOG_LEVEL:-info}
|
||||
N8N_LOG_OUTPUT: ${N8N_LOG_OUTPUT:-console}
|
||||
N8N_METRICS: true
|
||||
N8N_PAYLOAD_SIZE_MAX: 256
|
||||
N8N_PAYLOAD_SIZE_MAX: ${N8N_PAYLOAD_SIZE_MAX:-256}
|
||||
N8N_PERSONALIZATION_ENABLED: false
|
||||
N8N_RESTRICT_FILE_ACCESS_TO: /data/shared
|
||||
N8N_RUNNERS_AUTH_TOKEN: ${N8N_RUNNERS_AUTH_TOKEN}
|
||||
@@ -380,6 +381,7 @@ services:
|
||||
SEARXNG_PASSWORD_HASH: ${SEARXNG_PASSWORD_HASH}
|
||||
SEARXNG_USERNAME: ${SEARXNG_USERNAME}
|
||||
SUPABASE_HOSTNAME: ${SUPABASE_HOSTNAME}
|
||||
UPTIME_KUMA_HOSTNAME: ${UPTIME_KUMA_HOSTNAME}
|
||||
WAHA_HOSTNAME: ${WAHA_HOSTNAME}
|
||||
WEAVIATE_HOSTNAME: ${WEAVIATE_HOSTNAME}
|
||||
WEBUI_HOSTNAME: ${WEBUI_HOSTNAME}
|
||||
@@ -542,7 +544,7 @@ services:
|
||||
|
||||
postgres:
|
||||
container_name: postgres
|
||||
image: postgres:${POSTGRES_VERSION:-17}
|
||||
image: pgvector/pgvector:pg${POSTGRES_VERSION:-17}
|
||||
restart: unless-stopped
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U postgres"]
|
||||
@@ -1276,3 +1278,21 @@ services:
|
||||
timeout: 10s
|
||||
retries: 5
|
||||
start_period: 30s
|
||||
|
||||
uptime-kuma:
|
||||
image: louislam/uptime-kuma:2
|
||||
container_name: uptime-kuma
|
||||
profiles: ["uptime-kuma"]
|
||||
restart: unless-stopped
|
||||
logging: *default-logging
|
||||
environment:
|
||||
<<: *proxy-env
|
||||
UPTIME_KUMA_WS_ORIGIN_CHECK: bypass
|
||||
volumes:
|
||||
- uptime_kuma_data:/app/data
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "http_proxy= https_proxy= HTTP_PROXY= HTTPS_PROXY= wget -qO- http://localhost:3001/ || exit 1"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 5
|
||||
start_period: 30s
|
||||
|
||||
@@ -115,6 +115,8 @@ declare -A VARS_TO_GENERATE=(
|
||||
["RAGFLOW_MINIO_ROOT_PASSWORD"]="password:32"
|
||||
["RAGFLOW_MYSQL_ROOT_PASSWORD"]="password:32"
|
||||
["RAGFLOW_REDIS_PASSWORD"]="password:32"
|
||||
["S3_PROTOCOL_ACCESS_KEY_ID"]="hex:32"
|
||||
["S3_PROTOCOL_ACCESS_KEY_SECRET"]="hex:64"
|
||||
["SEARXNG_PASSWORD"]="password:32" # Added SearXNG admin password
|
||||
["SECRET_KEY_BASE"]="base64:64" # 48 bytes -> 64 chars
|
||||
["TEMPORAL_UI_PASSWORD"]="password:32" # Temporal UI basic auth password
|
||||
|
||||
@@ -67,6 +67,7 @@ base_services_data=(
|
||||
"ragflow" "RAGFlow (Deep document understanding RAG engine)"
|
||||
"searxng" "SearXNG (Private Metasearch Engine)"
|
||||
"supabase" "Supabase (Backend as a Service)"
|
||||
"uptime-kuma" "Uptime Kuma (Uptime Monitoring)"
|
||||
"waha" "WAHA – WhatsApp HTTP API (NOWEB engine)"
|
||||
"weaviate" "Weaviate (Vector Database with API Key Auth)"
|
||||
)
|
||||
|
||||
@@ -103,6 +103,9 @@ fi
|
||||
if is_profile_active "postiz"; then
|
||||
echo -e " ${GREEN}*${NC} ${WHITE}Postiz${NC}: Create your account on first login"
|
||||
fi
|
||||
if is_profile_active "uptime-kuma"; then
|
||||
echo -e " ${GREEN}*${NC} ${WHITE}Uptime Kuma${NC}: Create your account on first login"
|
||||
fi
|
||||
if is_profile_active "gost"; then
|
||||
echo -e " ${GREEN}*${NC} ${WHITE}Gost Proxy${NC}: Routing AI traffic through external proxy"
|
||||
fi
|
||||
|
||||
@@ -354,6 +354,16 @@ if is_profile_active "postiz"; then
|
||||
}")
|
||||
fi
|
||||
|
||||
# Uptime Kuma
|
||||
if is_profile_active "uptime-kuma"; then
|
||||
SERVICES_ARRAY+=(" \"uptime-kuma\": {
|
||||
\"hostname\": \"$(json_escape "$UPTIME_KUMA_HOSTNAME")\",
|
||||
\"credentials\": {
|
||||
\"note\": \"Create account on first login\"
|
||||
}
|
||||
}")
|
||||
fi
|
||||
|
||||
# WAHA
|
||||
if is_profile_active "waha"; then
|
||||
SERVICES_ARRAY+=(" \"waha\": {
|
||||
|
||||
@@ -72,7 +72,7 @@ echo ""
|
||||
|
||||
# Core services (always checked)
|
||||
log_subheader "Core Services"
|
||||
check_image_update "postgres" "postgres:${POSTGRES_VERSION:-17}-alpine"
|
||||
check_image_update "postgres" "pgvector/pgvector:pg${POSTGRES_VERSION:-17}"
|
||||
check_image_update "redis" "valkey/valkey:8-alpine"
|
||||
check_image_update "caddy" "caddy:2-alpine"
|
||||
|
||||
@@ -139,6 +139,11 @@ if is_profile_active "appsmith"; then
|
||||
check_image_update "appsmith" "appsmith/appsmith-ce:release"
|
||||
fi
|
||||
|
||||
if is_profile_active "uptime-kuma"; then
|
||||
log_subheader "Uptime Kuma"
|
||||
check_image_update "uptime-kuma" "louislam/uptime-kuma:2"
|
||||
fi
|
||||
|
||||
# Summary
|
||||
log_divider
|
||||
echo ""
|
||||
|
||||
@@ -71,18 +71,40 @@ def clone_supabase_repo():
|
||||
os.chdir("..")
|
||||
|
||||
def prepare_supabase_env():
|
||||
"""Copy .env to .env in supabase/docker."""
|
||||
"""Copy .env to supabase/docker/.env, or sync new variables if it already exists."""
|
||||
if not is_supabase_enabled():
|
||||
print("Supabase is not enabled, skipping env preparation.")
|
||||
return
|
||||
env_path = os.path.join("supabase", "docker", ".env")
|
||||
env_example_path = os.path.join(".env")
|
||||
# Do not overwrite existing Supabase env to avoid credential drift
|
||||
root_env_path = ".env"
|
||||
if os.path.exists(env_path):
|
||||
print(f"Supabase env already exists at {env_path}, not overwriting.")
|
||||
# Sync new variables from root .env that don't exist in supabase .env
|
||||
print(f"Syncing new variables from root .env to {env_path}...")
|
||||
root_env = dotenv_values(root_env_path)
|
||||
supabase_env = dotenv_values(env_path)
|
||||
new_vars = []
|
||||
for key, value in root_env.items():
|
||||
if key not in supabase_env and value is not None:
|
||||
# Quote values to handle special characters safely
|
||||
if '$' in value:
|
||||
new_vars.append(f"{key}='{value}'")
|
||||
else:
|
||||
new_vars.append(f'{key}="{value}"')
|
||||
if new_vars:
|
||||
with open(env_path, 'r') as f:
|
||||
existing_content = f.read()
|
||||
sync_header = "# --- Variables synced from root .env ---"
|
||||
with open(env_path, 'a') as f:
|
||||
if sync_header not in existing_content:
|
||||
f.write(f"\n{sync_header}\n")
|
||||
for var in new_vars:
|
||||
f.write(f"{var}\n")
|
||||
print(f"Synced {len(new_vars)} new variable(s) to Supabase env.")
|
||||
else:
|
||||
print("Supabase env is up to date, no new variables to sync.")
|
||||
return
|
||||
print("Copying .env in root to .env in supabase/docker...")
|
||||
shutil.copyfile(env_example_path, env_path)
|
||||
shutil.copyfile(root_env_path, env_path)
|
||||
|
||||
def clone_dify_repo():
|
||||
"""Clone the Dify repository using sparse checkout if not already present."""
|
||||
|
||||
@@ -420,6 +420,14 @@
|
||||
category: 'tools',
|
||||
docsUrl: 'https://docs.python.org'
|
||||
},
|
||||
'uptime-kuma': {
|
||||
name: 'Uptime Kuma',
|
||||
description: 'Uptime Monitoring Dashboard',
|
||||
icon: 'UK',
|
||||
color: 'bg-[#5CDD8B]',
|
||||
category: 'monitoring',
|
||||
docsUrl: 'https://github.com/louislam/uptime-kuma'
|
||||
},
|
||||
'cloudflare-tunnel': {
|
||||
name: 'Cloudflare Tunnel',
|
||||
description: 'Zero-Trust Network Access',
|
||||
|
||||
Reference in New Issue
Block a user