#!/bin/bash # n8n 演示模式启动脚本 - 完全跳过设置 # 仅用于演示和测试 set -e # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # 打印函数 print_info() { echo -e "${BLUE}[信息]${NC} $1"; } print_success() { echo -e "${GREEN}[成功]${NC} $1"; } print_warning() { echo -e "${YELLOW}[警告]${NC} $1"; } print_error() { echo -e "${RED}[错误]${NC} $1"; } # 获取局域网IP get_lan_ip() { if [[ "$OSTYPE" == "darwin"* ]]; then ifconfig | grep "inet " | grep -v 127.0.0.1 | head -1 | awk '{print $2}' else hostname -I | awk '{print $1}' fi } # 停止现有进程 stop_existing() { print_info "正在停止现有的 n8n 进程..." pkill -f "n8n" 2>/dev/null || true pkill -f "pnpm" 2>/dev/null || true sleep 2 print_success "已清理现有进程" } # 创建预配置的数据库 setup_demo_database() { print_info "设置演示数据库..." # 备份现有数据库 if [ -f "$HOME/.n8n/database.sqlite" ]; then cp "$HOME/.n8n/database.sqlite" "$HOME/.n8n/database.sqlite.backup.$(date +%Y%m%d%H%M%S)" print_info "已备份现有数据库" fi # 创建配置文件 mkdir -p "$HOME/.n8n" # 创建一个已初始化的配置 cat > "$HOME/.n8n/config" << 'EOF' { "instanceId": "demo-instance", "version": "1.109.2", "isNpmAvailable": false, "skipOwnerSetup": true } EOF print_success "演示配置已创建" } # 主函数 main() { echo -e "${BLUE}╔════════════════════════════════════════╗${NC}" echo -e "${BLUE}║ n8n 演示模式启动脚本 ║${NC}" echo -e "${BLUE}╚════════════════════════════════════════╝${NC}" echo # 切换到n8n目录 cd "$(dirname "$0")" # 停止现有进程 stop_existing # 设置演示数据库 setup_demo_database # 获取IP地址 LAN_IP=$(get_lan_ip) if [ -z "$LAN_IP" ]; then print_error "无法获取局域网IP地址" exit 1 fi print_success "检测到局域网IP: $LAN_IP" # 设置环境变量 - 演示模式 print_info "配置演示模式环境变量..." # 基础配置 export N8N_DEFAULT_LOCALE=zh-CN export N8N_HOST=0.0.0.0 export N8N_PORT=5678 export N8N_LOG_LEVEL=error # 只显示错误,减少日志 # URL配置 export N8N_EDITOR_BASE_URL="http://${LAN_IP}:5678" export WEBHOOK_URL="http://${LAN_IP}:5678" export N8N_PROTOCOL=http # 完全跳过认证和设置 export N8N_BASIC_AUTH_ACTIVE=false export N8N_AUTH_EXCLUDE_ENDPOINTS="/**" export N8N_USER_MANAGEMENT_DISABLED=true export N8N_SKIP_OWNER_SETUP=true export N8N_DEPLOYMENT_TYPE=demo export N8N_PUBLIC_API_DISABLED=false export N8N_PUBLIC_API_ENDPOINT="http://${LAN_IP}:5678/api" # Cookie和Session配置 - 最宽松 export N8N_SECURE_COOKIE=false export N8N_SESSION_COOKIE_SAME_SITE=none export N8N_SESSION_COOKIE_SECURE=false export N8N_SESSION_COOKIE_DOMAIN="" # CORS配置 - 允许所有 export N8N_CORS_ENABLED=true export N8N_CORS_ORIGINS="*" export N8N_CORS_ALLOW_HEADERS="*" export N8N_CORS_ALLOW_METHODS="*" export N8N_CORS_ALLOW_CREDENTIALS=true # WebSocket配置 export N8N_PUSH_BACKEND=websocket # 性能优化 export N8N_RUNNERS_ENABLED=true export N8N_BLOCK_ENV_ACCESS_IN_NODE=false export DB_SQLITE_POOL_SIZE=10 export N8N_WORKFLOW_TAGS_DISABLED=false export N8N_PERSONALIZATION_ENABLED=false export N8N_DIAGNOSTICS_ENABLED=false export N8N_VERSION_NOTIFICATIONS_ENABLED=false # 禁用遥测 export N8N_DIAGNOSTICS_DISABLED=true export N8N_TELEMETRY_DISABLED=true print_success "演示环境变量配置完成" # 创建演示配置文件 cat > .env.demo << EOF # n8n 演示模式配置 N8N_DEFAULT_LOCALE=zh-CN N8N_HOST=0.0.0.0 N8N_PORT=5678 N8N_EDITOR_BASE_URL=http://${LAN_IP}:5678 WEBHOOK_URL=http://${LAN_IP}:5678 N8N_PROTOCOL=http # 跳过所有认证和设置 N8N_BASIC_AUTH_ACTIVE=false N8N_AUTH_EXCLUDE_ENDPOINTS=/** N8N_USER_MANAGEMENT_DISABLED=true N8N_SKIP_OWNER_SETUP=true # CORS配置 N8N_CORS_ENABLED=true N8N_CORS_ORIGINS=* N8N_CORS_ALLOW_CREDENTIALS=true # 禁用遥测 N8N_DIAGNOSTICS_DISABLED=true N8N_TELEMETRY_DISABLED=true EOF print_info "已生成配置文件 .env.demo" # 检查构建状态 if [ ! -d "packages/cli/dist" ]; then print_warning "项目需要构建,正在构建..." pnpm build > build.log 2>&1 || { print_error "构建失败,查看 build.log" exit 1 } fi # 启动n8n print_info "正在启动 n8n 演示模式..." # 创建日志文件 LOG_FILE="n8n-demo-$(date +%Y%m%d-%H%M%S).log" # 启动命令(带错误过滤) pnpm start 2>&1 | grep -v "401" | grep -v "Unauthorized" | tee "$LOG_FILE" & N8N_PID=$! # 等待启动 echo -n "等待服务启动" for i in {1..30}; do if curl -s "http://localhost:5678" >/dev/null 2>&1; then break fi echo -n "." sleep 1 done echo # 检查启动状态 if curl -s "http://localhost:5678" >/dev/null 2>&1; then print_success "n8n 演示模式启动成功!" echo echo -e "${GREEN}╔════════════════════════════════════════╗${NC}" echo -e "${GREEN}║ n8n 演示模式 ║${NC}" echo -e "${GREEN}╠════════════════════════════════════════╣${NC}" echo -e "${GREEN}║${NC} 🏠 本地访问:" echo -e "${GREEN}║${NC} ${BLUE}http://localhost:5678${NC}" echo -e "${GREEN}║${NC}" echo -e "${GREEN}║${NC} 🌐 局域网访问:" echo -e "${GREEN}║${NC} ${BLUE}http://${LAN_IP}:5678${NC}" echo -e "${GREEN}║${NC}" echo -e "${GREEN}║${NC} 📱 移动设备访问:" echo -e "${GREEN}║${NC} ${BLUE}http://${LAN_IP}:5678${NC}" echo -e "${GREEN}╠════════════════════════════════════════╣${NC}" echo -e "${GREEN}║${NC} ✅ 无需注册或登录" echo -e "${GREEN}║${NC} ✅ 直接创建工作流" echo -e "${GREEN}║${NC} ✅ 适合演示和测试" echo -e "${GREEN}║${NC} ⚠️ 仅用于开发环境" echo -e "${GREEN}╠════════════════════════════════════════╣${NC}" echo -e "${GREEN}║${NC} 进程PID: ${YELLOW}$N8N_PID${NC}" echo -e "${GREEN}║${NC} 日志文件: ${YELLOW}$LOG_FILE${NC}" echo -e "${GREEN}║${NC} 界面语言: 中文" echo -e "${GREEN}╚════════════════════════════════════════╝${NC}" echo print_success "所有设置已完成,无需任何认证即可使用!" echo print_info "按 Ctrl+C 停止服务" # 捕获退出信号 trap 'print_info "正在停止 n8n..."; kill $N8N_PID 2>/dev/null; exit 0' INT # 保持运行 wait $N8N_PID else print_error "n8n 启动失败" echo "查看日志: $LOG_FILE" tail -20 "$LOG_FILE" exit 1 fi } # 运行 main "$@"