first commit

This commit is contained in:
2025-09-23 07:35:11 +00:00
commit a5dd3f1335
110 changed files with 46108 additions and 0 deletions

169
start-simple.cjs Normal file
View File

@@ -0,0 +1,169 @@
/**
* 宝塔面板简化启动脚本 - 兼容Node.js v16
* 专门用于后端服务启动
*/
const { spawn } = require('child_process');
const path = require('path');
const fs = require('fs');
// 设置环境变量
process.env.PORT = process.env.PORT || 4001;
process.env.NODE_ENV = 'production';
console.log('=== 宝塔面板简化启动脚本 ===');
console.log(`端口: ${process.env.PORT}`);
console.log(`环境: ${process.env.NODE_ENV}`);
console.log(`工作目录: ${process.cwd()}`);
console.log(`Node.js版本: ${process.version}`);
// 检查关键文件
const requiredFiles = [
'api/server.ts',
'api/app.ts',
'package.json'
];
for (const file of requiredFiles) {
if (!fs.existsSync(file)) {
console.error(`错误: 缺少必要文件 ${file}`);
process.exit(1);
}
}
console.log('✓ 必要文件检查通过');
// 首先尝试编译TypeScript文件仅后端
console.log('正在编译后端TypeScript文件...');
const tscProcess = spawn('npx', ['tsc', '--project', 'tsconfig.server.json'], {
cwd: process.cwd(),
stdio: 'inherit'
});
tscProcess.on('exit', (code) => {
if (code === 0) {
console.log('✓ 后端TypeScript编译成功');
startCompiledServer();
} else {
console.log('后端TypeScript编译失败尝试直接启动...');
startWithTsNode();
}
});
tscProcess.on('error', (err) => {
console.log('TypeScript编译器不可用尝试直接启动...');
startWithTsNode();
});
function startCompiledServer() {
console.log('使用编译后的JS文件启动服务器...');
const server = spawn('node', ['dist/api/server.js'], {
cwd: process.cwd(),
stdio: 'inherit',
env: {
...process.env,
PORT: process.env.PORT || 4001,
NODE_ENV: 'production'
}
});
setupServerHandlers(server);
}
function startWithTsNode() {
console.log('使用ts-node启动服务器...');
// 使用ts-node指定服务器专用配置
const server = spawn('npx', ['ts-node', '--project', 'tsconfig.server.json', '--esm', 'api/server.ts'], {
cwd: process.cwd(),
stdio: 'inherit',
env: {
...process.env,
PORT: process.env.PORT || 4001,
NODE_ENV: 'production'
}
});
server.on('error', (err) => {
console.log('ts-node启动失败尝试使用tsx...');
startWithTsx();
});
server.on('exit', (code) => {
if (code !== 0) {
console.log('ts-node启动失败尝试使用tsx...');
startWithTsx();
}
});
setupServerHandlers(server);
}
function startWithTsx() {
console.log('使用tsx启动服务器...');
const server = spawn('npx', ['tsx', 'api/server.ts'], {
cwd: process.cwd(),
stdio: 'inherit',
env: {
...process.env,
PORT: process.env.PORT || 4001,
NODE_ENV: 'production'
}
});
server.on('error', (err) => {
console.error('所有启动方式都失败了:', err);
process.exit(1);
});
setupServerHandlers(server);
}
function setupServerHandlers(server) {
server.on('error', (err) => {
console.error('服务器启动失败:', err);
process.exit(1);
});
server.on('exit', (code, signal) => {
console.log(`服务器进程退出,代码: ${code}, 信号: ${signal}`);
if (code !== 0) {
console.error('服务器异常退出');
process.exit(1);
}
});
// 处理进程退出信号
process.on('SIGTERM', () => {
console.log('收到SIGTERM信号正在关闭服务...');
if (server) {
server.kill('SIGTERM');
}
setTimeout(() => {
process.exit(0);
}, 5000);
});
process.on('SIGINT', () => {
console.log('收到SIGINT信号正在关闭服务...');
if (server) {
server.kill('SIGINT');
}
setTimeout(() => {
process.exit(0);
}, 5000);
});
}
// 防止进程意外退出
process.on('uncaughtException', (err) => {
console.error('未捕获的异常:', err);
});
process.on('unhandledRejection', (reason, promise) => {
console.error('未处理的Promise拒绝:', reason);
});
console.log('✓ 启动脚本初始化完成');