require('dotenv').config(); const express = require('express'); const cors = require('cors'); const path = require('path'); const fs = require('fs'); const config = require('./config'); const processManager = require('./services/processManager'); const projectService = require('./services/projectService'); const app = express(); const PORT = config.port; app.use(cors()); app.use(express.json()); app.use(express.urlencoded({ extended: true })); const authRoutes = require('./routes/auth'); const projectRoutes = require('./routes/projects'); const deployRoutes = require('./routes/deploy'); app.use('/api/auth', authRoutes); app.use('/api/projects', projectRoutes); app.use('/api/deploy', deployRoutes); if (fs.existsSync(path.join(__dirname, '../client/dist'))) { app.use(express.static(path.join(__dirname, '../client/dist'))); app.get('*', (req, res) => { res.sendFile(path.join(__dirname, '../client/dist/index.html')); }); } const restoreProjects = async () => { const projects = projectService.getAllProjects(); const runningProjects = projects.filter(p => p.status === 'running'); console.log(`Found ${runningProjects.length} project(s) to restore...`); for (const project of runningProjects) { try { // Use absolute path for container environment const projectDir = path.join('/app/projects', project.id); console.log(`Checking project directory: ${projectDir}`); if (!fs.existsSync(projectDir)) { console.log(`Project ${project.name} directory not found, marking as stopped`); projectService.updateProjectStatus(project.id, 'stopped'); continue; } console.log(`Restoring project ${project.name}...`); const result = await processManager.startProject(project); projectService.updateProjectStatus(project.id, 'running', result.port, result.url); console.log(`Restored project ${project.name} on port ${result.port}`); } catch (error) { console.error(`Failed to restore project ${project.name}: ${error.message}`); projectService.updateProjectStatus(project.id, 'stopped'); } } console.log('Project restoration completed'); }; app.listen(PORT, async () => { console.log(`Server running on port ${PORT}`); const mode = config.checkNginxMode(); if (mode === 'nginx') { console.log('Running mode: Nginx dynamic routing'); console.log(`Nginx config: ${config.nginxConfigDir}/auto-deploy.conf`); } else { console.log('Running mode: Multi-port (Nginx not available)'); console.log(`Project ports: ${config.projectPortStart}-${config.projectPortEnd}`); } if (config.baseDomain) { console.log(`Base domain: ${config.baseDomain}`); } await restoreProjects(); });