install.js 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. const responseFormat = require('../util/responseFormat');
  2. let fileUtil = require('../util/fileUtil');
  3. let log = require('../util/log');
  4. const childProcess = require('child_process');
  5. let path = require('path');
  6. let startFilePath = path.resolve(__dirname, '../../bin/start.sh');
  7. module.exports = function () {
  8. return async function (ctx) {
  9. if (ctx.originalUrl === '/api/install') {
  10. ctx.body = responseFormat.responseFormat(200, 'restart application', true);
  11. let params = ctx.request.body;
  12. let existService = ['default', 'default_qiniu', 'github_default', 'github_qiniu'];
  13. let productType = 'default';
  14. let paramStr = '';
  15. // 环境变量配置
  16. params.config.forEach(item => {
  17. if (item.name === 'productType') {
  18. productType = item.value;
  19. }
  20. paramStr += `export ${item.name}='${item.value}'; #${item.description} \n`;
  21. });
  22. await fileUtil.createFile(startFilePath, `${paramStr}npm run restart;\n`);
  23. // 登录上传服务
  24. if (existService.indexOf(productType) === -1) {
  25. let loginRootPath = path.resolve(__dirname, `../service/login/${productType}`);
  26. let uploadRootPath = path.resolve(__dirname, `../service/upload/${productType}`);
  27. // 登录
  28. if (params.login.index && params.login.config) {
  29. await fileUtil.createDirector(loginRootPath);
  30. await fileUtil.createFile(path.resolve(loginRootPath, './index.js'), params.login.index);
  31. await fileUtil.createFile(path.resolve(loginRootPath, './config.js'), params.login.config);
  32. }
  33. // 上传
  34. if (params.upload.index && params.upload.config) {
  35. await fileUtil.createDirector(uploadRootPath);
  36. await fileUtil.createFile(path.resolve(uploadRootPath, './index.js'), params.upload.index);
  37. await fileUtil.createFile(path.resolve(uploadRootPath, './config.js'), params.upload.config);
  38. }
  39. }
  40. childProcess.exec(`sh ${startFilePath}`, (err) => {
  41. if (err) {
  42. log.error(`exec error: ${err}`);
  43. }
  44. })
  45. } else {
  46. ctx.body = responseFormat.responseFormat(0, 'config params to install application', {});
  47. }
  48. }
  49. };