详细说明: - 添加完整的项目介绍和架构说明 - 包含 7 个 AI Agent 的详细介绍 - 添加技术栈和 Mermaid 架构图 - 完善安装和使用指南 - 添加开发指南和 Git 工作流 - 新增 Windows 快速部署文档 - 更新前端组件和启动脚本 - 添加多种环境配置文件 修改的文件: - 新增 README.md 主文档 - 新增 doc/ 目录及部署文档 - 更新前端演示系统组件 - 添加多个启动脚本变体 - 配置文件优化 影响的功能模块: - 项目文档体系 - 部署和启动流程 - 前端展示系统 - 环境配置管理
224 lines
6.7 KiB
Bash
Executable File
224 lines
6.7 KiB
Bash
Executable File
#!/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 "$@" |