83 lines
2.7 KiB
JavaScript
83 lines
2.7 KiB
JavaScript
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();
|
|
});
|