zurri / src /server.ts
nexusbert's picture
push
8db1a4b
const isHuggingFaceSpace = !!process.env.HF_SPACE_ID || !!process.env.SPACE_ID;
const isProduction = process.env.NODE_ENV === 'production';
if (!isHuggingFaceSpace && !isProduction) {
const dotenv = require('dotenv');
const path = require('path');
const fs = require('fs');
const envPath = path.join(__dirname, '../.env');
if (fs.existsSync(envPath)) {
dotenv.config({ path: envPath });
console.log(`πŸ“„ Development: Loaded .env from: ${envPath}`);
} else {
dotenv.config();
console.log('πŸ“„ Development: Using default .env location');
}
} else {
console.log('πŸ“„ Production: Using environment variables from platform secrets');
}
import 'reflect-metadata';
import { AppDataSource } from './config/database';
import app from './app';
import { initializeAdmin } from './scripts/createAdmin';
const PORT = parseInt(process.env.PORT || process.env.SPACE_PORT || '7860', 10);
console.log('πŸ”§ Starting server...');
console.log(`πŸ“‘ Environment: ${process.env.NODE_ENV || 'development'}`);
console.log(`🌐 Port: ${PORT}`);
if (process.env.DATABASE_URL) {
const dbUrl = process.env.DATABASE_URL;
const masked = dbUrl.length > 60
? `${dbUrl.substring(0, 30)}...${dbUrl.substring(dbUrl.length - 10)}`
: dbUrl;
console.log(`πŸ“Š Database URL: Set (${masked})`);
} else {
console.log(`πŸ“Š Database URL: ❌ NOT SET`);
}
AppDataSource.initialize()
.then(async () => {
console.log('βœ… Database connected');
if (process.env.DB_SYNCHRONIZE !== 'true' && process.env.NODE_ENV === 'production') {
try {
console.log('πŸ”„ Running migrations...');
await AppDataSource.runMigrations();
console.log('βœ… Migrations completed');
} catch (migrationError) {
console.warn('⚠️ Migration warning:', migrationError);
}
}
// Initialize permanent admin user from environment variables
await initializeAdmin();
app.listen(PORT, '0.0.0.0', () => {
console.log(`πŸš€ Server running on port ${PORT}`);
console.log(`🌍 Server accessible at http://0.0.0.0:${PORT}`);
console.log(`πŸ“š Swagger docs available at http://0.0.0.0:${PORT}/docs`);
console.log(`❀️ Health check at http://0.0.0.0:${PORT}/health`);
});
})
.catch((error) => {
console.error('❌ Database connection failed:', error);
console.error('Error details:', error.message);
process.exit(1);
});
// Graceful shutdown
process.on('SIGTERM', async () => {
console.log('SIGTERM received, closing server...');
await AppDataSource.destroy();
process.exit(0);
});
process.on('SIGINT', async () => {
console.log('SIGINT received, closing server...');
await AppDataSource.destroy();
process.exit(0);
});