index.js 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. const config = require('./config');
  2. const {initLogger, getLog} = require('./core/getLogger');
  3. initLogger(config);
  4. const log = 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('Initializing');
  28. await init();
  29. log('Opening database');
  30. const connPool = new SqliteConnectionPool(20, config);
  31. await connPool.init();
  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());
  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, connPool, 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.message);
  76. process.exit(1);
  77. }
  78. })();