index.js 3.2 KB

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