This commit is contained in:
2025-08-19 12:09:53 +03:30
commit e46e9b5676
2 changed files with 156 additions and 0 deletions

142
index.js Normal file
View File

@@ -0,0 +1,142 @@
const http = require('http');
const PORT = process.env.PORT || 3000;
const server = http.createServer((req, res) => {
// Set CORS headers
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');
// Handle preflight requests
if (req.method === 'OPTIONS') {
res.writeHead(200);
res.end();
return;
}
// Set content type
res.setHeader('Content-Type', 'text/html; charset=utf-8');
// Handle different routes
switch (req.url) {
case '/api/deploy':
if (req.method === 'POST') {
let body = '';
req.on('data', chunk => {
body += chunk.toString();
});
req.on('end', async () => {
try {
await deploy();
console.log('Deployed');
} catch (error) {
console.error('Error deploying:', error);
}
res.writeHead(200, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({
message: 'Echo response',
received: body,
timestamp: new Date().toISOString()
}));
});
} else {
res.writeHead(405, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({ error: 'Method not allowed. Use POST.' }));
}
break;
case '/api/deploy-crm-admin':
if (req.method === 'POST') {
let body = '';
req.on('data', chunk => {
body += chunk.toString();
});
req.on('end', async () => {
try {
await deployCrmAdmin();
console.log('Deployed CRM Admin');
} catch (error) {
console.error('Error deploying:', error);
}
res.writeHead(200, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({
message: 'Echo response',
received: body,
timestamp: new Date().toISOString()
}));
});
} else {
res.writeHead(405, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({ error: 'Method not allowed. Use POST.' }));
}
break;
default:
res.writeHead(404, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({ error: 'Not found' }));
}
});
server.listen(PORT, () => {
console.log(`🚀 Server running at http://localhost:${PORT}`);
console.log(`📱 API endpoints available at http://localhost:${PORT}/api/*`);
console.log(`⏰ Started at ${new Date().toLocaleString()}`);
});
// Graceful shutdown
process.on('SIGTERM', () => {
console.log('SIGTERM received, shutting down gracefully');
server.close(() => {
console.log('Process terminated');
});
});
process.on('SIGINT', () => {
console.log('SIGINT received, shutting down gracefully');
server.close(() => {
console.log('Process terminated');
});
});
const deploy = () => {
console.log('Deploying...');
return new Promise((resolve, reject) => {
const { exec } = require('child_process');
exec('cd ../gitea-backend && bash dummy.sh', (error, stdout, stderr) => {
if (error) {
console.error(`Error: ${error.message}`);
reject(error);
return;
}
//if (stderr) {
//console.error(`Error: ${stderr}`);
//reject(stderr);
//return;
//}
console.log(`Output: ${stdout}`);
resolve();
});
});
}
const deployCrmAdmin = () => {
console.log('Deploying...');
return new Promise((resolve, reject) => {
const { exec } = require('child_process');
exec('cd ../next-ava-crm-admin-panel && bash deploy.sh', (error, stdout, stderr) => {
if (error) {
console.error(`Error: ${error.message}`);
reject(error);
return;
}
//if (stderr) {
//console.error(`Error: ${stderr}`);
//reject(stderr);
//return;
//}
console.log(`Output: ${stdout}`);
resolve();
});
});
}

14
package.json Normal file
View File

@@ -0,0 +1,14 @@
{
"name": "deployer",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"start": "node index.js",
"dev": "node index.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"description": "A simple HTTP server with API endpoints"
}