index.js 2.9 KB

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