fix: 优化应用启动配置和Docker部署设置
- 更新Dockerfile端口配置和启动路径 - 修改暴露端口从3003改为3000 - 更新健康检查端口配置 - 修正应用启动路径为dist/src/main - 增强应用启动错误处理 - 添加完整的try-catch错误处理机制 - 优化启动日志输出和错误信息 - 确保进程异常退出机制 - 完善健康检查接口类型定义 - 修复health接口返回类型注解 - 支持null返回值的类型安全
This commit is contained in:
parent
54a1bf141b
commit
573b43f171
|
|
@ -47,9 +47,9 @@ COPY --from=build --chown=nestjs:nodejs /app/dist ./dist
|
||||||
# 切换到非root用户
|
# 切换到非root用户
|
||||||
USER nestjs
|
USER nestjs
|
||||||
# 暴露端口
|
# 暴露端口
|
||||||
EXPOSE 3003
|
EXPOSE 3000
|
||||||
# 健康检查
|
# 健康检查
|
||||||
HEALTHCHECK --interval=30s --timeout=10s --start-period=30s --retries=3 \
|
HEALTHCHECK --interval=30s --timeout=10s --start-period=30s --retries=3 \
|
||||||
CMD wget --no-verbose --tries=1 --spider http://localhost:3003/health || exit 1
|
CMD wget --no-verbose --tries=1 --spider http://localhost:3000/health || exit 1
|
||||||
# 启动应用
|
# 启动应用
|
||||||
CMD ["node", "dist/main"]
|
CMD ["node", "dist/src/main"]
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ export class AppController {
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
@Get('health')
|
@Get('health')
|
||||||
async health(): Promise<ApiResponse<{ status: string; database: string; timestamp: string }>> {
|
async health(): Promise<ApiResponse<{ status: string; database: string; timestamp: string } | null>> {
|
||||||
try {
|
try {
|
||||||
// 检查数据库连接
|
// 检查数据库连接
|
||||||
await this.dataSource.query('SELECT 1');
|
await this.dataSource.query('SELECT 1');
|
||||||
|
|
|
||||||
98
src/main.ts
98
src/main.ts
|
|
@ -5,51 +5,61 @@ import { setupSwagger } from './config/swagger.config';
|
||||||
import { GlobalExceptionFilter } from './common/filters';
|
import { GlobalExceptionFilter } from './common/filters';
|
||||||
|
|
||||||
async function bootstrap() {
|
async function bootstrap() {
|
||||||
const app = await NestFactory.create(AppModule);
|
|
||||||
|
|
||||||
// 启用全局验证管道
|
|
||||||
app.useGlobalPipes(
|
|
||||||
new ValidationPipe({
|
|
||||||
whitelist: true,
|
|
||||||
forbidNonWhitelisted: true,
|
|
||||||
transform: true,
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
|
|
||||||
// 启用全局异常过滤器
|
|
||||||
app.useGlobalFilters(new GlobalExceptionFilter());
|
|
||||||
|
|
||||||
// 设置Swagger文档(在全局前缀之前)
|
|
||||||
try {
|
try {
|
||||||
setupSwagger(app);
|
const app = await NestFactory.create(AppModule);
|
||||||
console.log('✅ Swagger setup completed successfully');
|
|
||||||
|
// 启用全局验证管道
|
||||||
|
app.useGlobalPipes(
|
||||||
|
new ValidationPipe({
|
||||||
|
whitelist: true,
|
||||||
|
forbidNonWhitelisted: true,
|
||||||
|
transform: true,
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
|
||||||
|
// 启用全局异常过滤器
|
||||||
|
app.useGlobalFilters(new GlobalExceptionFilter());
|
||||||
|
|
||||||
|
// 设置Swagger文档(在全局前缀之前)
|
||||||
|
try {
|
||||||
|
setupSwagger(app);
|
||||||
|
console.log('✅ Swagger setup completed successfully');
|
||||||
|
} catch (error) {
|
||||||
|
console.error('❌ Swagger setup failed:', error.message);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 设置API前缀(排除docs和health路径)
|
||||||
|
app.setGlobalPrefix('api/v1', {
|
||||||
|
exclude: ['docs', 'docs/(.*)', 'health'],
|
||||||
|
});
|
||||||
|
|
||||||
|
// 启用 CORS 支持多平台访问
|
||||||
|
app.enableCors({
|
||||||
|
origin: true,
|
||||||
|
methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],
|
||||||
|
allowedHeaders: ['Content-Type', 'Authorization', 'X-Requested-With'],
|
||||||
|
credentials: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
const port = process.env.PORT ?? 3003;
|
||||||
|
await app.listen(port, '0.0.0.0'); // 监听所有接口,适配云函数环境
|
||||||
|
|
||||||
|
console.log(`🚀 多平台小程序后台服务启动成功!`);
|
||||||
|
console.log(`📡 服务地址: http://localhost:${port}`);
|
||||||
|
console.log(`💚 健康检查地址: http://localhost:${port}/health`);
|
||||||
|
console.log(`📖 API文档地址: http://localhost:${port}/docs`);
|
||||||
|
console.log(`📋 模板管理 API: http://localhost:${port}/api/v1/templates`);
|
||||||
|
console.log(
|
||||||
|
`🔄 增强版 API: http://localhost:${port}/api/v1/enhanced/templates`,
|
||||||
|
);
|
||||||
|
console.log(`🎯 统一异步架构已启用!支持同步和异步审核模式`);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('❌ Swagger setup failed:', error.message);
|
console.error('❌ 应用启动失败:', error);
|
||||||
|
process.exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 设置API前缀(排除docs路径)
|
|
||||||
app.setGlobalPrefix('api/v1', {
|
|
||||||
exclude: ['docs', 'docs/(.*)'],
|
|
||||||
});
|
|
||||||
|
|
||||||
// 启用 CORS 支持多平台访问
|
|
||||||
app.enableCors({
|
|
||||||
origin: true,
|
|
||||||
methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],
|
|
||||||
allowedHeaders: ['Content-Type', 'Authorization', 'X-Requested-With'],
|
|
||||||
credentials: true,
|
|
||||||
});
|
|
||||||
|
|
||||||
const port = process.env.PORT ?? 3003;
|
|
||||||
await app.listen(port);
|
|
||||||
|
|
||||||
console.log(`🚀 多平台小程序后台服务启动成功!`);
|
|
||||||
console.log(`📡 服务地址: http://localhost:${port}`);
|
|
||||||
console.log(`📖 API文档地址: http://localhost:${port}/docs`);
|
|
||||||
console.log(`📋 模板管理 API: http://localhost:${port}/api/v1/templates`);
|
|
||||||
console.log(
|
|
||||||
`🔄 增强版 API: http://localhost:${port}/api/v1/enhanced/templates`,
|
|
||||||
);
|
|
||||||
console.log(`🎯 统一异步架构已启用!支持同步和异步审核模式`);
|
|
||||||
}
|
}
|
||||||
bootstrap();
|
|
||||||
|
bootstrap().catch((error) => {
|
||||||
|
console.error('❌ Bootstrap 函数执行失败:', error);
|
||||||
|
process.exit(1);
|
||||||
|
});
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue