77 lines
2.4 KiB
JavaScript
77 lines
2.4 KiB
JavaScript
// 宝塔环境下的Node项目启动脚本
|
||
import { spawn } from 'child_process';
|
||
import path from 'path';
|
||
import fs from 'fs';
|
||
import { fileURLToPath } from 'url';
|
||
|
||
// 获取当前文件的目录路径
|
||
const __filename = fileURLToPath(import.meta.url);
|
||
const __dirname = path.dirname(__filename);
|
||
|
||
// 获取项目根目录
|
||
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'), '<html><body><h1>抽奖系统</h1><p>前端文件未构建,请先运行 npm run build</p></body></html>');
|
||
}
|
||
}
|
||
|
||
// 使用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 保持此脚本运行'); |