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

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

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

322 lines
9.8 KiB
Bash
Executable File
Raw 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 优化版启动脚本 - 解决所有警告
# 作者: 小齐
# 最后更新: 2025-09-11
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"; }
# 显示启动横幅
show_banner() {
echo -e "${BLUE}"
echo "╔══════════════════════════════════════╗"
echo "║ n8n 中文版优化启动脚本 ║"
echo "║ 版本: n8n-1.109.2 (无警告版) ║"
echo "║ 维护者: xiaoqi ║"
echo "╚══════════════════════════════════════╝"
echo -e "${NC}"
}
# 修复配置文件权限
fix_permissions() {
print_info "检查配置文件权限..."
# 检查并修复 .n8n 目录权限
if [ -d "$HOME/.n8n" ]; then
if [ -f "$HOME/.n8n/config" ]; then
chmod 600 "$HOME/.n8n/config"
print_success "配置文件权限已修复"
fi
else
mkdir -p "$HOME/.n8n"
touch "$HOME/.n8n/config"
chmod 600 "$HOME/.n8n/config"
print_success "创建并设置了配置文件权限"
fi
}
# 检查依赖
check_dependencies() {
print_info "正在检查系统依赖..."
if ! command -v node &> /dev/null; then
print_error "Node.js 未安装或未在 PATH 中"
exit 1
fi
if ! command -v pnpm &> /dev/null; then
print_error "pnpm 未安装或未在 PATH 中"
print_info "请先安装 pnpm: npm install -g pnpm"
exit 1
fi
print_success "依赖检查通过"
}
# 检查端口占用
check_port() {
local port=5678
if lsof -Pi :$port -sTCP:LISTEN -t >/dev/null 2>&1; then
print_warning "端口 $port 已被占用"
print_info "正在查看占用进程..."
lsof -i :$port | head -5
read -p "是否杀死占用进程?(y/N): " kill_process
if [[ $kill_process =~ ^[Yy]$ ]]; then
print_info "正在终止占用进程..."
lsof -ti:$port | xargs kill -9 2>/dev/null || true
sleep 1
print_success "进程已终止"
else
print_error "无法启动 n8n端口被占用"
exit 1
fi
fi
}
# 停止现有的 n8n 进程
stop_existing() {
print_info "正在停止现有的 n8n 进程..."
pkill -f "pnpm.*dev" 2>/dev/null || true
pkill -f "pnpm.*start" 2>/dev/null || true
pkill -f "turbo.*dev" 2>/dev/null || true
pkill -f "n8n" 2>/dev/null || true
sleep 2
print_success "已停止现有进程"
}
# 设置环境变量
setup_environment() {
print_info "正在设置优化的环境变量..."
# 获取局域网IP地址
local lan_ip=""
if [[ "$OSTYPE" == "darwin"* ]]; then
lan_ip=$(ifconfig | grep "inet " | grep -v 127.0.0.1 | head -1 | awk '{print $2}')
else
lan_ip=$(hostname -I | awk '{print $1}')
fi
# 基础配置
export N8N_DEFAULT_LOCALE=zh-CN
export N8N_HOST=0.0.0.0
export N8N_PORT=5678
# 权限配置 - 解决权限警告
export N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
# 安全配置
export N8N_SECURE_COOKIE=false
export N8N_SESSION_COOKIE_SAME_SITE=lax
export N8N_SESSION_COOKIE_SECURE=false
# 性能优化
export DB_SQLITE_POOL_SIZE=5
export N8N_RUNNERS_ENABLED=true
export N8N_BLOCK_ENV_ACCESS_IN_NODE=false
# Node.js 优化 - 避免废弃警告
export NODE_NO_WARNINGS=1
export NODE_OPTIONS="--no-deprecation"
# 设置URL
if [ -n "$lan_ip" ]; then
export N8N_EDITOR_BASE_URL="http://${lan_ip}:5678"
export WEBHOOK_URL="http://${lan_ip}:5678"
export N8N_PROTOCOL=http
fi
# CORS配置
export N8N_CORS_ENABLED=true
if [ -n "$lan_ip" ]; then
export N8N_CORS_ORIGINS="http://localhost:5678,http://${lan_ip}:5678,http://127.0.0.1:5678"
fi
print_success "环境变量已优化设置"
echo " - 中文界面: 已启用"
echo " - 权限检查: 已启用"
echo " - 废弃警告: 已禁用"
echo " - 网络监听: 0.0.0.0:5678"
if [ -n "$lan_ip" ]; then
echo " - 局域网IP: ${lan_ip}"
fi
}
# 检查构建状态
check_build() {
if [ ! -d "packages/cli/dist" ] || [ ! -d "packages/core/dist" ]; then
print_warning "检测到项目需要构建"
read -p "是否现在构建项目?(y/N): " build_project
if [[ $build_project =~ ^[Yy]$ ]]; then
print_info "正在构建项目..."
pnpm build > build.log 2>&1 &
BUILD_PID=$!
while kill -0 $BUILD_PID 2>/dev/null; do
echo -n "."
sleep 2
done
echo
if wait $BUILD_PID; then
print_success "项目构建完成"
else
print_error "构建失败,请查看 build.log"
tail -20 build.log
exit 1
fi
fi
fi
}
# 启动 n8n
start_n8n() {
print_info "正在启动优化版 n8n 中文版..."
# 创建日志文件
local log_file="n8n-$(date +%Y%m%d-%H%M%S).log"
# 启动 n8n带优化参数
echo -e "${GREEN}正在启动 n8n 服务(无警告模式)...${NC}"
NODE_NO_WARNINGS=1 NODE_OPTIONS="--no-deprecation" pnpm start > "$log_file" 2>&1 &
N8N_PID=$!
# 等待启动
echo -n "等待 n8n 启动"
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 启动成功!"
# 获取局域网IP地址
local lan_ip=""
if [[ "$OSTYPE" == "darwin"* ]]; then
lan_ip=$(ifconfig | grep "inet " | grep -v 127.0.0.1 | head -1 | awk '{print $2}')
else
lan_ip=$(hostname -I | awk '{print $1}')
fi
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}"
if [ -n "$lan_ip" ]; then
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}"
fi
echo -e "${GREEN}╠════════════════════════════════════════╣${NC}"
echo -e "${GREEN}${NC} 🌏 界面语言: ${GREEN}中文 (zh-CN)${NC}"
echo -e "${GREEN}${NC} 📋 进程 PID: ${YELLOW}$N8N_PID${NC}"
echo -e "${GREEN}${NC} 📝 日志文件: ${YELLOW}$log_file${NC}"
echo -e "${GREEN}${NC} ✅ 无警告模式: ${GREEN}已启用${NC}"
echo -e "${GREEN}╚════════════════════════════════════════╝${NC}"
echo
print_info "使用 Ctrl+C 停止服务"
if [ -n "$lan_ip" ]; then
echo
print_success "优化项:"
echo " ✓ 配置文件权限已修复"
echo " ✓ Node.js 废弃警告已禁用"
echo " ✓ 局域网访问已配置"
echo " ✓ CORS 已正确设置"
fi
# 保持脚本运行并显示日志(过滤警告)
trap 'print_info "正在停止 n8n..."; kill $N8N_PID 2>/dev/null; exit 0' INT
tail -f "$log_file" | grep -v "DeprecationWarning" | grep -v "DEP0060"
else
print_error "n8n 启动失败"
print_info "查看日志文件: $log_file"
tail -20 "$log_file"
exit 1
fi
}
# 检查并切换到正确目录
check_and_change_directory() {
local current_dir="$(pwd)"
local script_path="$(readlink -f "$0" 2>/dev/null || realpath "$0" 2>/dev/null || echo "$0")"
local script_dir="$(dirname "$script_path")"
if [[ -f "package.json" && -d "packages" ]]; then
print_info "检测到当前已在 n8n 项目目录"
return 0
fi
if [[ "$script_dir" == *"n8n-n8n-1.109.2"* ]]; then
print_info "切换到脚本所在的 n8n 项目目录: $script_dir"
cd "$script_dir" || {
print_error "无法切换到目录: $script_dir"
exit 1
}
print_success "已切换到正确的 n8n 项目目录"
return 0
fi
print_error "未找到 n8n 项目目录"
exit 1
}
# 主函数
main() {
# 显示横幅
show_banner
# 检查并切换到正确目录
check_and_change_directory
# 修复权限
fix_permissions
# 检查依赖
check_dependencies
# 检查端口
check_port
# 停止现有进程
stop_existing
# 设置环境变量
setup_environment
# 检查构建状态
check_build
# 正常启动
start_n8n
}
# 运行主函数
main "$@"