index.js 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. const config = require('./config');
  2. const logger = require('./core/getLogger');
  3. logger.initLogger(config);
  4. const log = logger.getLog();
  5. const configSaver = require('./config/configSaver');
  6. const argv = require('minimist')(process.argv.slice(2));
  7. const fs = require('fs-extra');
  8. const path = require('path');
  9. const express = require('express');
  10. const compression = require('compression');
  11. const connManager = require('./db/connManager');
  12. async function init() {
  13. await fs.ensureDir(config.dataDir);
  14. await fs.ensureDir(config.uploadDir);
  15. await fs.ensureDir(config.tempDir);
  16. await fs.emptyDir(config.tempDir);
  17. const appDir = `${config.publicDir}/app`;
  18. const appNewDir = `${config.publicDir}/app_new`;
  19. if (await fs.pathExists(appNewDir)) {
  20. await fs.remove(appDir);
  21. await fs.move(appNewDir, appDir);
  22. }
  23. //загружаем конфиг из файла
  24. await configSaver.load(config, argv.config);
  25. }
  26. async function main() {
  27. log(`${config.name} v${config.version}`);
  28. log('Initializing');
  29. await init();
  30. await connManager.init(config);
  31. //servers
  32. for (let server of config.servers) {
  33. if (server.mode !== 'none') {
  34. const app = express();
  35. const serverConfig = Object.assign({}, config, server);
  36. let devModule = undefined;
  37. if (serverConfig.branch == 'development') {
  38. const devFileName = './dev.js'; //require ignored by pkg -50Mb executable size
  39. devModule = require(devFileName);
  40. devModule.webpackDevMiddleware(app);
  41. }
  42. app.use(compression({ level: 1 }));
  43. app.use(express.json({limit: '10mb'}));
  44. if (devModule)
  45. devModule.logQueries(app);
  46. app.use(express.static(serverConfig.publicDir, {
  47. maxAge: '30d',
  48. setHeaders: (res, filePath) => {
  49. if (path.basename(path.dirname(filePath)) == 'tmp') {
  50. res.set('Content-Type', 'text/xml');
  51. res.set('Content-Encoding', 'gzip');
  52. }
  53. }
  54. }));
  55. require('./routes').initRoutes(app, serverConfig);
  56. if (devModule) {
  57. devModule.logErrors(app);
  58. } else {
  59. app.use(function(err, req, res, next) {// eslint-disable-line no-unused-vars
  60. log(LM_ERR, err.stack);
  61. res.sendStatus(500);
  62. });
  63. }
  64. app.listen(serverConfig.port, serverConfig.ip, function() {
  65. log(`Server-${serverConfig.serverName} is ready on ${serverConfig.ip}:${serverConfig.port}, mode: ${serverConfig.mode}`);
  66. });
  67. }
  68. }
  69. }
  70. (async() => {
  71. try {
  72. await main();
  73. } catch (e) {
  74. console.error(e);
  75. process.exit(1);
  76. }
  77. })();