217 lines
6.9 KiB
Bash
217 lines
6.9 KiB
Bash
|
|
#!/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
|
|||
|
|
sleep 2
|
|||
|
|
print_success "已清理现有进程"
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 备份并清空用户数据(可选)
|
|||
|
|
handle_auth() {
|
|||
|
|
if [ -f "$HOME/.n8n/database.sqlite" ]; then
|
|||
|
|
print_warning "检测到已存在用户数据库"
|
|||
|
|
echo "选择操作:"
|
|||
|
|
echo "1) 保留现有用户(需要登录)"
|
|||
|
|
echo "2) 备份并重置(无需登录)"
|
|||
|
|
echo "3) 直接使用测试账号"
|
|||
|
|
read -p "请选择 (1/2/3): " choice
|
|||
|
|
|
|||
|
|
case $choice in
|
|||
|
|
2)
|
|||
|
|
print_info "备份现有数据库..."
|
|||
|
|
cp "$HOME/.n8n/database.sqlite" "$HOME/.n8n/database.sqlite.backup.$(date +%Y%m%d%H%M%S)"
|
|||
|
|
rm -f "$HOME/.n8n/database.sqlite"*
|
|||
|
|
print_success "数据库已备份并重置"
|
|||
|
|
;;
|
|||
|
|
3)
|
|||
|
|
print_info "将使用测试账号信息:"
|
|||
|
|
echo -e "${GREEN}邮箱: admin@test.com${NC}"
|
|||
|
|
echo -e "${GREEN}密码: n8n123456${NC}"
|
|||
|
|
;;
|
|||
|
|
*)
|
|||
|
|
print_info "保留现有用户数据"
|
|||
|
|
;;
|
|||
|
|
esac
|
|||
|
|
fi
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 主函数
|
|||
|
|
main() {
|
|||
|
|
print_info "n8n 开发环境快速启动(可选无认证)"
|
|||
|
|
|
|||
|
|
# 切换到n8n目录
|
|||
|
|
cd "$(dirname "$0")"
|
|||
|
|
|
|||
|
|
# 停止现有进程
|
|||
|
|
stop_existing
|
|||
|
|
|
|||
|
|
# 处理认证
|
|||
|
|
handle_auth
|
|||
|
|
|
|||
|
|
# 获取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=info
|
|||
|
|
|
|||
|
|
# URL配置
|
|||
|
|
export N8N_EDITOR_BASE_URL="http://${LAN_IP}:5678"
|
|||
|
|
export WEBHOOK_URL="http://${LAN_IP}:5678"
|
|||
|
|
export N8N_PROTOCOL=http
|
|||
|
|
|
|||
|
|
# 如果没有用户数据库,完全禁用认证
|
|||
|
|
if [ ! -f "$HOME/.n8n/database.sqlite" ]; then
|
|||
|
|
export N8N_BASIC_AUTH_ACTIVE=false
|
|||
|
|
export N8N_AUTH_EXCLUDE_ENDPOINTS="/**"
|
|||
|
|
export N8N_USER_MANAGEMENT_DISABLED=true
|
|||
|
|
print_warning "无用户模式:完全禁用认证"
|
|||
|
|
else
|
|||
|
|
# 有用户数据库,保持标准认证但优化CORS
|
|||
|
|
export N8N_USER_MANAGEMENT_DISABLED=false
|
|||
|
|
print_info "标准模式:需要使用账号登录"
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# Cookie和Session配置
|
|||
|
|
export N8N_SECURE_COOKIE=false
|
|||
|
|
export N8N_SESSION_COOKIE_SAME_SITE=none
|
|||
|
|
export N8N_SESSION_COOKIE_SECURE=false
|
|||
|
|
|
|||
|
|
# CORS配置
|
|||
|
|
export N8N_CORS_ENABLED=true
|
|||
|
|
export N8N_CORS_ORIGINS="*"
|
|||
|
|
|
|||
|
|
# 其他优化
|
|||
|
|
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 "环境变量配置完成"
|
|||
|
|
|
|||
|
|
# 检查构建状态
|
|||
|
|
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-dev-$(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}"
|
|||
|
|
|
|||
|
|
if [ ! -f "$HOME/.n8n/database.sqlite" ]; then
|
|||
|
|
echo -e "${GREEN}║${NC} 模式: ${YELLOW}无认证模式${NC}"
|
|||
|
|
echo -e "${GREEN}║${NC} 说明: 直接访问,无需登录"
|
|||
|
|
else
|
|||
|
|
echo -e "${GREEN}║${NC} 模式: ${YELLOW}标准认证模式${NC}"
|
|||
|
|
echo -e "${GREEN}║${NC} 说明: 使用已有账号登录"
|
|||
|
|
echo -e "${GREEN}║${NC}"
|
|||
|
|
echo -e "${GREEN}║${NC} 测试账号(如果创建过):"
|
|||
|
|
echo -e "${GREEN}║${NC} 邮箱: admin@test.com"
|
|||
|
|
echo -e "${GREEN}║${NC} 密码: n8n123456"
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
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 " ✓ 确保防火墙允许 5678 端口"
|
|||
|
|
echo " ✓ 如需重置用户,删除 ~/.n8n/database.sqlite"
|
|||
|
|
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 "$@"
|