#!/bin/bash # PromptForge 自动化安装脚本 # 适用于 Linux 和 macOS 系统 set -e # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # 打印带颜色的消息 print_message() { echo -e "${GREEN}[INFO]${NC} $1" } print_warning() { echo -e "${YELLOW}[WARNING]${NC} $1" } print_error() { echo -e "${RED}[ERROR]${NC} $1" } print_header() { echo -e "${BLUE}================================${NC}" echo -e "${BLUE} PromptForge 自动化安装脚本${NC}" echo -e "${BLUE}================================${NC}" } # 检查系统要求 check_system_requirements() { print_message "检查系统要求..." # 检查操作系统 if [[ "$OSTYPE" == "linux-gnu"* ]]; then print_message "检测到 Linux 系统" elif [[ "$OSTYPE" == "darwin"* ]]; then print_message "检测到 macOS 系统" else print_error "不支持的操作系统: $OSTYPE" exit 1 fi # 检查内存 if [[ "$OSTYPE" == "linux-gnu"* ]]; then MEMORY=$(free -m | awk 'NR==2{printf "%.0f", $2/1024}') else MEMORY=$(sysctl -n hw.memsize | awk '{printf "%.0f", $1/1024/1024/1024}') fi if [ "$MEMORY" -lt 4 ]; then print_warning "内存不足,推荐至少 4GB RAM,当前: ${MEMORY}GB" else print_message "内存检查通过: ${MEMORY}GB" fi # 检查磁盘空间 DISK_SPACE=$(df -BG . | awk 'NR==2{print $4}' | sed 's/G//') if [ "$DISK_SPACE" -lt 2 ]; then print_warning "磁盘空间不足,推荐至少 2GB,当前: ${DISK_SPACE}GB" else print_message "磁盘空间检查通过: ${DISK_SPACE}GB" fi } # 检查 Node.js check_nodejs() { print_message "检查 Node.js..." if command -v node &> /dev/null; then NODE_VERSION=$(node --version | sed 's/v//') NODE_MAJOR=$(echo $NODE_VERSION | cut -d. -f1) if [ "$NODE_MAJOR" -ge 18 ]; then print_message "Node.js 版本检查通过: v$NODE_VERSION" else print_error "Node.js 版本过低,需要 v18.0.0 或更高版本,当前: v$NODE_VERSION" install_nodejs fi else print_warning "Node.js 未安装" install_nodejs fi if command -v npm &> /dev/null; then NPM_VERSION=$(npm --version) print_message "npm 版本: v$NPM_VERSION" else print_error "npm 未安装" exit 1 fi } # 安装 Node.js install_nodejs() { print_message "安装 Node.js..." if [[ "$OSTYPE" == "linux-gnu"* ]]; then # Linux 安装 curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - sudo apt-get install -y nodejs elif [[ "$OSTYPE" == "darwin"* ]]; then # macOS 安装 if command -v brew &> /dev/null; then brew install node else print_error "请先安装 Homebrew: https://brew.sh/" exit 1 fi fi print_message "Node.js 安装完成" } # 检查 MySQL check_mysql() { print_message "检查 MySQL..." if command -v mysql &> /dev/null; then MYSQL_VERSION=$(mysql --version | awk '{print $5}' | sed 's/,//') print_message "MySQL 版本检查通过: $MYSQL_VERSION" else print_warning "MySQL 未安装" install_mysql fi } # 安装 MySQL install_mysql() { print_message "安装 MySQL..." if [[ "$OSTYPE" == "linux-gnu"* ]]; then # Linux 安装 sudo apt update sudo apt install -y mysql-server sudo systemctl start mysql sudo systemctl enable mysql elif [[ "$OSTYPE" == "darwin"* ]]; then # macOS 安装 if command -v brew &> /dev/null; then brew install mysql brew services start mysql else print_error "请先安装 Homebrew: https://brew.sh/" exit 1 fi fi print_message "MySQL 安装完成" } # 检查 Git check_git() { print_message "检查 Git..." if command -v git &> /dev/null; then GIT_VERSION=$(git --version | awk '{print $3}') print_message "Git 版本检查通过: $GIT_VERSION" else print_warning "Git 未安装" install_git fi } # 安装 Git install_git() { print_message "安装 Git..." if [[ "$OSTYPE" == "linux-gnu"* ]]; then sudo apt update sudo apt install -y git elif [[ "$OSTYPE" == "darwin"* ]]; then if command -v brew &> /dev/null; then brew install git else print_error "请先安装 Homebrew: https://brew.sh/" exit 1 fi fi print_message "Git 安装完成" } # 安装项目依赖 install_dependencies() { print_message "安装项目依赖..." if [ -f "package.json" ]; then npm install print_message "项目依赖安装完成" else print_error "package.json 文件不存在" exit 1 fi } # 配置环境变量 setup_environment() { print_message "配置环境变量..." if [ ! -f ".env.local" ]; then if [ -f ".env.example" ]; then cp .env.example .env.local print_message "已创建 .env.local 文件" print_warning "请编辑 .env.local 文件,填入您的配置信息" else print_warning ".env.example 文件不存在,请手动创建 .env.local 文件" fi else print_message ".env.local 文件已存在" fi } # 设置数据库 setup_database() { print_message "设置数据库..." # 检查数据库脚本是否存在 if [ -f "create-tables-final.js" ]; then print_message "创建数据库表..." node create-tables-final.js else print_warning "数据库脚本不存在,跳过数据库设置" fi if [ -f "create-template-data.js" ]; then print_message "创建测试数据..." node create-template-data.js else print_warning "测试数据脚本不存在,跳过数据创建" fi } # 验证安装 verify_installation() { print_message "验证安装..." # 检查关键文件 FILES=("package.json" "next.config.js" "src/app/layout.tsx") for file in "${FILES[@]}"; do if [ -f "$file" ]; then print_message "✓ $file 存在" else print_warning "⚠ $file 不存在" fi done # 检查依赖 if [ -d "node_modules" ]; then print_message "✓ node_modules 目录存在" else print_error "✗ node_modules 目录不存在" fi # 类型检查 if npm run type-check &> /dev/null; then print_message "✓ TypeScript 类型检查通过" else print_warning "⚠ TypeScript 类型检查失败" fi } # 显示后续步骤 show_next_steps() { echo -e "${BLUE}================================${NC}" echo -e "${BLUE} 安装完成!后续步骤:${NC}" echo -e "${BLUE}================================${NC}" echo "" echo "1. 编辑 .env.local 文件,配置数据库和 API 密钥" echo "2. 启动开发服务器: npm run dev" echo "3. 访问 http://localhost:3000" echo "4. 注册新账户并开始使用" echo "" echo "📖 更多信息请查看:" echo " - 安装指南: INSTALLATION_GUIDE.md" echo " - 环境配置: ENV_SETUP_GUIDE.md" echo " - 模板教程: TEMPLATE_TUTORIAL.md" echo "" echo "🚀 祝您使用愉快!" } # 主函数 main() { print_header check_system_requirements check_nodejs check_mysql check_git install_dependencies setup_environment setup_database verify_installation show_next_steps } # 运行主函数 main "$@"