// 宝塔环境下的Node项目启动脚本 const { spawn } = require('child_process'); const path = require('path'); const fs = require('fs'); // 获取项目根目录 const rootDir = __dirname; const serverPath = path.join(rootDir, 'server', 'index.js'); // 检查日志目录 const logDir = path.join(rootDir, 'logs'); if (!fs.existsSync(logDir)) { fs.mkdirSync(logDir, { recursive: true }); } // 创建日志文件流 const logFile = path.join(logDir, 'server.log'); const logStream = fs.createWriteStream(logFile, { flags: 'a' }); console.log('启动后端服务器...'); console.log(`日志文件: ${logFile}`); // 创建前端构建目录 const distDir = path.join(rootDir, 'server', 'dist'); if (!fs.existsSync(distDir)) { console.log(`创建前端构建目录: ${distDir}`); fs.mkdirSync(distDir, { recursive: true }); // 如果dist目录不存在,尝试从dist目录复制 const srcDistDir = path.join(rootDir, 'dist'); if (fs.existsSync(srcDistDir)) { console.log(`从 ${srcDistDir} 复制前端文件到 ${distDir}`); fs.cpSync(srcDistDir, distDir, { recursive: true }); } else { console.log('警告: 前端构建文件不存在,请先运行 npm run build'); // 创建一个临时index.html,避免服务器报错 fs.writeFileSync(path.join(distDir, 'index.html'), '

抽奖系统

前端文件未构建,请先运行 npm run build

'); } } // 使用start:node server.js启动服务器 const server = spawn('node', ['server/index.js'], { cwd: rootDir, env: { ...process.env, PORT: 3010, NODE_ENV: 'production' }, stdio: ['ignore', 'pipe', 'pipe'] }); console.log('使用启动命令: start:node server.js'); // 将输出写入日志 server.stdout.pipe(logStream); server.stderr.pipe(logStream); server.stdout.on('data', (data) => { console.log(`[服务器输出] ${data.toString().trim()}`); }); server.stderr.on('data', (data) => { console.error(`[服务器错误] ${data.toString().trim()}`); }); server.on('close', (code) => { console.log(`服务器进程退出,退出码: ${code}`); logStream.end(); }); console.log(`后端服务已启动,端口: 3010`); console.log('使用 pm2 或 forever 保持此脚本运行');