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

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

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

185 lines
5.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
# URL配置 - 关键必须设置正确的URL
export N8N_EDITOR_BASE_URL="http://${LAN_IP}:5678"
export WEBHOOK_URL="http://${LAN_IP}:5678"
export N8N_PROTOCOL=http
# Cookie和Session配置
export N8N_SECURE_COOKIE=false
export N8N_SESSION_COOKIE_SAME_SITE=lax
export N8N_SESSION_COOKIE_SECURE=false
# CORS配置
export N8N_CORS_ENABLED=true
export N8N_CORS_ORIGINS="http://localhost:5678,http://${LAN_IP}:5678,http://127.0.0.1:5678"
# 认证配置
export N8N_AUTH_EXCLUDE_ENDPOINTS="rest/health,/healthz,/metrics"
export N8N_PUSH_BACKEND=websocket
# 其他优化
export N8N_RUNNERS_ENABLED=true
export N8N_BLOCK_ENV_ACCESS_IN_NODE=false
export DB_SQLITE_POOL_SIZE=5
print_success "环境变量配置完成"
# 创建.env文件作为备份
cat > .env.network << 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_SECURE_COOKIE=false
N8N_SESSION_COOKIE_SAME_SITE=lax
N8N_SESSION_COOKIE_SECURE=false
N8N_CORS_ENABLED=true
N8N_CORS_ORIGINS=http://localhost:5678,http://${LAN_IP}:5678,http://127.0.0.1:5678
EOF
print_info "已生成配置文件 .env.network"
# 检查构建状态
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-network-$(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/rest/health" >/dev/null 2>&1; then
break
fi
echo -n "."
sleep 1
done
echo
# 检查启动状态
if curl -s "http://localhost:5678/rest/health" >/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} 进程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 " ✓ 局域网访问请统一使用: http://${LAN_IP}:5678"
echo " ✓ 不要混用 localhost 和 IP 地址"
echo " ✓ 首次访问需要创建管理员账户"
echo " ✓ 确保防火墙允许 5678 端口"
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 "$@"