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

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

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

248 lines
7.7 KiB
Bash
Executable File

#!/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 "$@"