auto-deploy-demo/server/index.js

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();
});