#!/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 } # 主函数 main() { echo -e "${BLUE}╔════════════════════════════════════════╗${NC}" echo -e "${BLUE}║ n8n 无认证模式启动 ║${NC}" echo -e "${BLUE}╚════════════════════════════════════════╝${NC}" echo # 切换到n8n目录 cd "$(dirname "$0")" # 停止所有现有进程 print_info "停止现有 n8n 进程..." pkill -f "n8n" 2>/dev/null || true pkill -f "pnpm" 2>/dev/null || true sleep 2 # 清理旧数据 print_info "清理旧配置和数据..." rm -f ~/.n8n/config rm -f ~/.n8n/database.sqlite* rm -f ~/.n8n/*.json # 创建必要的目录 mkdir -p ~/.n8n # 创建预配置文件,跳过所有设置 print_info "创建跳过设置的配置..." cat > ~/.n8n/.n8n-config << 'EOF' { "instanceId": "demo-instance", "encryptionKey": "n8n-demo-key-2024", "skipOwnerSetup": true, "isNpmAvailable": false, "database": { "type": "sqlite", "sqlite": { "database": "database.sqlite" } } } EOF # 获取IP地址 LAN_IP=$(get_lan_ip) if [ -z "$LAN_IP" ]; then print_error "无法获取局域网IP地址" exit 1 fi print_success "检测到局域网IP: $LAN_IP" # 构建项目(如果需要) if [ ! -d "packages/cli/dist" ]; then print_warning "项目需要构建,正在构建..." pnpm build > build.log 2>&1 || { print_error "构建失败" tail -20 build.log exit 1 } print_success "构建完成" fi # 设置所有必要的环境变量 print_info "配置环境变量..." # 导出所有环境变量 export NODE_ENV=production export N8N_DEFAULT_LOCALE=zh-CN export N8N_HOST=0.0.0.0 export N8N_PORT=5678 export N8N_PROTOCOL=http # URL配置 export N8N_EDITOR_BASE_URL="http://${LAN_IP}:5678" export WEBHOOK_URL="http://${LAN_IP}:5678" export N8N_WEBHOOK_URL="http://${LAN_IP}:5678" # 完全禁用认证 export N8N_BASIC_AUTH_ACTIVE=false export N8N_USER_MANAGEMENT_DISABLED=true export N8N_SKIP_OWNER_SETUP=true export N8N_AUTH_SKIP_OWNER_SETUP=true export N8N_DEPLOYMENT_TYPE=n8n-internal export N8N_PERSONALIZATION_ENABLED=false # 禁用所有安全检查 export N8N_SECURE_COOKIE=false export N8N_SESSION_COOKIE_SECURE=false export N8N_SESSION_COOKIE_SAME_SITE=none 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 # 加密密钥 export N8N_ENCRYPTION_KEY="n8n-demo-key-2024" # 公共API export N8N_PUBLIC_API_DISABLED=false export N8N_PUBLIC_API_ENDPOINT="http://${LAN_IP}:5678/api" # 其他配置 export N8N_PUSH_BACKEND=websocket export N8N_WORKFLOW_TAGS_DISABLED=false export N8N_DIAGNOSTICS_ENABLED=false export N8N_VERSION_NOTIFICATIONS_ENABLED=false export N8N_TELEMETRY_DISABLED=true export N8N_DIAGNOSTICS_DISABLED=true export N8N_HIRING_BANNER_ENABLED=false export N8N_LOG_LEVEL=error export N8N_LOG_OUTPUT=console export N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=false # 数据库配置 export DB_TYPE=sqlite export DB_SQLITE_DATABASE=~/.n8n/database.sqlite # 任务运行器 export N8N_RUNNERS_ENABLED=true export N8N_BLOCK_ENV_ACCESS_IN_NODE=false print_success "环境变量配置完成" # 创建启动日志 LOG_FILE="n8n-$(date +%Y%m%d-%H%M%S).log" # 启动n8n print_info "正在启动 n8n..." # 直接运行CLI node packages/cli/bin/n8n 2>&1 | 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 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 "$@"