index.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. #!/usr/bin/env node
  2. const schema = require('./schema');
  3. const logger = require('./logger').global;
  4. const IP_RANGES_FETCH_ENABLED = process.env.IP_RANGES_FETCH_ENABLED !== 'false';
  5. async function appStart () {
  6. const migrate = require('./migrate');
  7. const setup = require('./setup');
  8. const app = require('./app');
  9. const internalCertificate = require('./internal/certificate');
  10. const internalIpRanges = require('./internal/ip_ranges');
  11. return migrate.latest()
  12. .then(setup)
  13. .then(schema.getCompiledSchema)
  14. .then(() => {
  15. if (IP_RANGES_FETCH_ENABLED) {
  16. logger.info('IP Ranges fetch is enabled');
  17. return internalIpRanges.fetch().catch((err) => {
  18. logger.error('IP Ranges fetch failed, continuing anyway:', err.message);
  19. });
  20. } else {
  21. logger.info('IP Ranges fetch is disabled by environment variable');
  22. }
  23. })
  24. .then(() => {
  25. internalCertificate.initTimer();
  26. internalIpRanges.initTimer();
  27. const server = app.listen(3000, () => {
  28. logger.info('Backend PID ' + process.pid + ' listening on port 3000 ...');
  29. process.on('SIGTERM', () => {
  30. logger.info('PID ' + process.pid + ' received SIGTERM');
  31. server.close(() => {
  32. logger.info('Stopping.');
  33. process.exit(0);
  34. });
  35. });
  36. });
  37. })
  38. .catch((err) => {
  39. logger.error(err.message, err);
  40. setTimeout(appStart, 1000);
  41. });
  42. }
  43. try {
  44. appStart();
  45. } catch (err) {
  46. logger.error(err.message, err);
  47. process.exit(1);
  48. }