Files
Agent-n8n/n8n-n8n-1.109.2/start-lan.sh
Yep_Q 2fcaf21842 docs: 创建专业的项目 README 文档
详细说明:
- 添加完整的项目介绍和架构说明
- 包含 7 个 AI Agent 的详细介绍
- 添加技术栈和 Mermaid 架构图
- 完善安装和使用指南
- 添加开发指南和 Git 工作流
- 新增 Windows 快速部署文档
- 更新前端组件和启动脚本
- 添加多种环境配置文件

修改的文件:
- 新增 README.md 主文档
- 新增 doc/ 目录及部署文档
- 更新前端演示系统组件
- 添加多个启动脚本变体
- 配置文件优化

影响的功能模块:
- 项目文档体系
- 部署和启动流程
- 前端展示系统
- 环境配置管理
2025-09-14 18:53:27 +08:00

224 lines
6.7 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# n8n 局域网完整访问解决方案
# 解决认证、Cookie和CORS问题
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 "pnpm.*dev" 2>/dev/null || true
pkill -f "pnpm.*start" 2>/dev/null || true
pkill -f "n8n" 2>/dev/null || true
sleep 2
print_success "已清理现有进程"
}
# 主函数
main() {
print_info "n8n 局域网完整访问解决方案"
# 切换到n8n目录
cd "$(dirname "$0")"
# 停止现有进程
stop_existing
# 获取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=debug
# URL配置 - 统一使用IP地址
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="/**"
# 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=""
export N8N_SESSION_COOKIE_NAME=n8n.sessionId
# CORS配置 - 允许所有源(开发环境)
export N8N_CORS_ENABLED=true
export N8N_CORS_ORIGINS="*"
export N8N_CORS_ALLOW_HEADERS="*"
export N8N_CORS_ALLOW_METHODS="*"
# WebSocket配置
export N8N_PUSH_BACKEND=websocket
# 其他优化
export N8N_RUNNERS_ENABLED=true
export N8N_BLOCK_ENV_ACCESS_IN_NODE=false
export DB_SQLITE_POOL_SIZE=5
export N8N_SKIP_AUTH_ROUTES=true
export N8N_PUBLIC_API_DISABLED=false
# 创建数据目录(如果不存在)
if [ ! -d "$HOME/.n8n" ]; then
mkdir -p "$HOME/.n8n"
print_info "创建了 n8n 数据目录"
fi
print_success "环境变量配置完成"
# 创建.env文件作为备份
cat > .env.lan << 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_SKIP_AUTH_ROUTES=true
# Cookie配置
N8N_SECURE_COOKIE=false
N8N_SESSION_COOKIE_SAME_SITE=none
N8N_SESSION_COOKIE_SECURE=false
N8N_SESSION_COOKIE_DOMAIN=
# CORS配置开发环境 - 允许所有)
N8N_CORS_ENABLED=true
N8N_CORS_ORIGINS=*
N8N_CORS_ALLOW_HEADERS=*
N8N_CORS_ALLOW_METHODS=*
# WebSocket
N8N_PUSH_BACKEND=websocket
# 其他
N8N_RUNNERS_ENABLED=true
N8N_BLOCK_ENV_ACCESS_IN_NODE=false
DB_SQLITE_POOL_SIZE=5
N8N_PUBLIC_API_DISABLED=false
EOF
print_info "已生成配置文件 .env.lan"
# 检查构建状态
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-lan-$(date +%Y%m%d-%H%M%S).log"
# 启动命令
pnpm start > "$LOG_FILE" 2>&1 &
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} 模式: ${YELLOW}开发模式(无需认证)${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_warning "注意事项:"
echo " ✓ 开发模式已禁用认证,任何人都可以访问"
echo " ✓ 局域网访问直接使用: http://${LAN_IP}:5678"
echo " ✓ 无需登录即可使用"
echo " ✓ 确保防火墙允许 5678 端口"
echo " ✓ 生产环境请勿使用此配置!"
echo
print_info "按 Ctrl+C 停止服务"
# 捕获退出信号
trap 'print_info "正在停止 n8n..."; kill $N8N_PID 2>/dev/null; exit 0' INT
# 显示日志
tail -f "$LOG_FILE"
else
print_error "n8n 启动失败"
echo "查看日志: $LOG_FILE"
tail -20 "$LOG_FILE"
exit 1
fi
}
# 运行
main "$@"