Я делаю приложение, которое создает демонстрации других моих приложений. Человек видит модальное окно, вводит поддомен и информацию об учетной записи администратора, и в идеале он создаст приложение через git clone и разместит его. Он работает, но когда я запускаю приложение через node app.js
, он показывает мне вывод функции router.post, и, по всей видимости, команда вызывается дважды. Мой код выглядит следующим образом:
const express = require('express');
const router = express.Router();
const App = require('../models/App');
const {execSync} = require('child_process');
const fs = require('fs');
router.post('/install-livechats', async (req, res) => {
const {subdomain, title, email, name, password} = req.body;
const existingApp = await App.findOne({subdomain: subdomain.toLowerCase()});
if (existingApp) {
return res.status(500).send({
message: 'Subdomain already exists'
})
}
const serverContent = `
server {
server_name ${subdomain}.mikolaj.dk;
root /var/www/${subdomain}_app/public/;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
# pass the PHP scripts to FastCGI server listening on /var/run/php7.2-fpm.sock
location ~ \\.php$ {
try_files $uri /index.php =404;
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
`
fs.writeFileSync(subdomain, serverContent);
execSync(`mv ${subdomain} /etc/nginx/sites-enabled/${subdomain}`);
execSync(`service nginx restart`);
console.log('NGINX Configuration File written successfully.');
execSync(`cd /var/www && git clone https://github.com/miko1991/livechats.git ${subdomain}_app`);
console.log('Cloned successfully');
execSync(`cp /var/www/${subdomain}_app/.env.example /var/www/${subdomain}_app/.env`);
execSync(`chown -R www-data.www-data /var/www/${subdomain}_app`);
console.log('Changed permissions successfully');
execSync(`cd /var/www/${subdomain}_app && composer install -q`);
const dbName = subdomain.replace('-', '_');
execSync(`echo "create database ${dbName}_app" | mysql`);
execSync(`php /var/www/${subdomain}_app/artisan key:generate`);
execSync(`echo "DB_DATABASE=${dbName}_app" >> /var/www/${subdomain}_app/.env`);
execSync(`echo "DB_USERNAME=admin" >> /var/www/${subdomain}_app/.env`);
execSync(`echo "DB_PASSWORD=Admin123" >> /var/www/${subdomain}_app/.env`);
execSync(`echo "PUSHER_APP_ID=714182" >> /var/www/${subdomain}_app/.env`);
execSync(`echo "PUSHER_APP_KEY=93f1dbf6b4e7717cc933" >> /var/www/${subdomain}_app/.env`);
execSync(`echo "PUSHER_APP_SECRET=3d41c19442920dcf50b5" >> /var/www/${subdomain}_app/.env`);
execSync(`echo "BROADCAST_DRIVER=pusher" >> /var/www/${subdomain}_app/.env`);
execSync(`php /var/www/${subdomain}_app/artisan migrate`);
execSync(`php /var/www/${subdomain}_app/artisan admin:add "${name}" "${email}" "${password}"`);
console.log('App installed successfully');
res.sendStatus(201);
})
module.exports = router;