index.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  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 SqliteConnectionPool = require('./core/SqliteConnectionPool');
  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. log('Opening database');
  31. const connPool = new SqliteConnectionPool(20, config);
  32. await connPool.init();
  33. //servers
  34. for (let server of config.servers) {
  35. if (server.mode !== 'none') {
  36. const app = express();
  37. const serverConfig = Object.assign({}, config, server);
  38. let devModule = undefined;
  39. if (serverConfig.branch == 'development') {
  40. const devFileName = './dev.js'; //require ignored by pkg -50Mb executable size
  41. devModule = require(devFileName);
  42. devModule.webpackDevMiddleware(app);
  43. }
  44. app.use(compression({ level: 1 }));
  45. app.use(express.json());
  46. if (devModule)
  47. devModule.logQueries(app);
  48. app.use(express.static(serverConfig.publicDir, {
  49. maxAge: '30d',
  50. setHeaders: (res, filePath) => {
  51. if (path.basename(path.dirname(filePath)) == 'tmp') {
  52. res.set('Content-Type', 'text/xml');
  53. res.set('Content-Encoding', 'gzip');
  54. }
  55. }
  56. }));
  57. require('./routes').initRoutes(app, connPool, serverConfig);
  58. if (devModule) {
  59. devModule.logErrors(app);
  60. } else {
  61. app.use(function(err, req, res, next) {// eslint-disable-line no-unused-vars
  62. log(LM_ERR, err.stack);
  63. res.sendStatus(500);
  64. });
  65. }
  66. app.listen(serverConfig.port, serverConfig.ip, function() {
  67. log(`Server-${serverConfig.serverName} is ready on ${serverConfig.ip}:${serverConfig.port}, mode: ${serverConfig.mode}`);
  68. });
  69. }
  70. }
  71. }
  72. (async() => {
  73. try {
  74. await main();
  75. } catch (e) {
  76. console.error(e.message);
  77. process.exit(1);
  78. }
  79. })();