settings.defaults.js 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. /* eslint-disable camelcase */
  2. const settings = {
  3. redis: {
  4. pubsub: {
  5. host:
  6. process.env.PUBSUB_REDIS_HOST || process.env.REDIS_HOST || '127.0.0.1',
  7. port: process.env.PUBSUB_REDIS_PORT || process.env.REDIS_PORT || '6379',
  8. password:
  9. process.env.PUBSUB_REDIS_PASSWORD || process.env.REDIS_PASSWORD || '',
  10. maxRetriesPerRequest: parseInt(
  11. process.env.PUBSUB_REDIS_MAX_RETRIES_PER_REQUEST ||
  12. process.env.REDIS_MAX_RETRIES_PER_REQUEST ||
  13. '20'
  14. ),
  15. },
  16. realtime: {
  17. host:
  18. process.env.REAL_TIME_REDIS_HOST ||
  19. process.env.REDIS_HOST ||
  20. '127.0.0.1',
  21. port:
  22. process.env.REAL_TIME_REDIS_PORT || process.env.REDIS_PORT || '6379',
  23. password:
  24. process.env.REAL_TIME_REDIS_PASSWORD ||
  25. process.env.REDIS_PASSWORD ||
  26. '',
  27. key_schema: {
  28. clientsInProject({ project_id }) {
  29. return `clients_in_project:{${project_id}}`
  30. },
  31. connectedUser({ project_id, client_id }) {
  32. return `connected_user:{${project_id}}:${client_id}`
  33. },
  34. },
  35. maxRetriesPerRequest: parseInt(
  36. process.env.REAL_TIME_REDIS_MAX_RETRIES_PER_REQUEST ||
  37. process.env.REDIS_MAX_RETRIES_PER_REQUEST ||
  38. '20'
  39. ),
  40. },
  41. documentupdater: {
  42. host:
  43. process.env.DOC_UPDATER_REDIS_HOST ||
  44. process.env.REDIS_HOST ||
  45. '127.0.0.1',
  46. port:
  47. process.env.DOC_UPDATER_REDIS_PORT || process.env.REDIS_PORT || '6379',
  48. password:
  49. process.env.DOC_UPDATER_REDIS_PASSWORD ||
  50. process.env.REDIS_PASSWORD ||
  51. '',
  52. key_schema: {
  53. pendingUpdates({ doc_id }) {
  54. return `PendingUpdates:{${doc_id}}`
  55. },
  56. },
  57. maxRetriesPerRequest: parseInt(
  58. process.env.DOC_UPDATER_REDIS_MAX_RETRIES_PER_REQUEST ||
  59. process.env.REDIS_MAX_RETRIES_PER_REQUEST ||
  60. '20'
  61. ),
  62. },
  63. websessions: {
  64. host:
  65. process.env.SESSIONS_REDIS_HOST ||
  66. process.env.REDIS_HOST ||
  67. '127.0.0.1',
  68. port: process.env.SESSIONS_REDIS_PORT || process.env.REDIS_PORT || '6379',
  69. password:
  70. process.env.SESSIONS_REDIS_PASSWORD || process.env.REDIS_PASSWORD || '',
  71. maxRetriesPerRequest: parseInt(
  72. process.env.SESSIONS_REDIS_MAX_RETRIES_PER_REQUEST ||
  73. process.env.REDIS_MAX_RETRIES_PER_REQUEST ||
  74. '20'
  75. ),
  76. },
  77. },
  78. internal: {
  79. realTime: {
  80. port: 3026,
  81. host: process.env.LISTEN_ADDRESS || '127.0.0.1',
  82. },
  83. },
  84. apis: {
  85. web: {
  86. url: `http://${
  87. process.env.WEB_API_HOST || process.env.WEB_HOST || '127.0.0.1'
  88. }:${process.env.WEB_API_PORT || process.env.WEB_PORT || 3000}`,
  89. user: process.env.WEB_API_USER || 'overleaf',
  90. pass: process.env.WEB_API_PASSWORD || 'password',
  91. },
  92. documentupdater: {
  93. url: `http://${
  94. process.env.DOCUMENT_UPDATER_HOST ||
  95. process.env.DOCUPDATER_HOST ||
  96. '127.0.0.1'
  97. }:3003`,
  98. },
  99. },
  100. security: {
  101. sessionSecret: process.env.SESSION_SECRET,
  102. sessionSecretUpcoming: process.env.SESSION_SECRET_UPCOMING,
  103. sessionSecretFallback: process.env.SESSION_SECRET_FALLBACK,
  104. },
  105. cookieName: process.env.COOKIE_NAME || 'overleaf.sid',
  106. // Expose the hostname in the `debug.getHostname` rpc
  107. exposeHostname: process.env.EXPOSE_HOSTNAME === 'true',
  108. max_doc_length: 2 * 1024 * 1024, // 2mb
  109. // should be set to the same same as dispatcherCount in document updater
  110. pendingUpdateListShardCount: parseInt(
  111. process.env.PENDING_UPDATE_LIST_SHARD_COUNT || 10,
  112. 10
  113. ),
  114. // combine
  115. // max_doc_length (2mb see above) * 2 (delete + insert)
  116. // max_ranges_size (3mb see MAX_RANGES_SIZE in document-updater)
  117. // overhead for JSON serialization
  118. maxUpdateSize:
  119. parseInt(process.env.MAX_UPDATE_SIZE) || 7 * 1024 * 1024 + 64 * 1024,
  120. shutdownDrainTimeWindow: process.env.SHUTDOWN_DRAIN_TIME_WINDOW || 9,
  121. // The shutdown procedure asks clients to reconnect gracefully.
  122. // 3rd-party/buggy clients may not act upon receiving the message and keep
  123. // stale connections alive. We forcefully disconnect them after X ms:
  124. gracefulReconnectTimeoutMs:
  125. parseInt(process.env.GRACEFUL_RECONNECT_TIMEOUT_MS, 10) ||
  126. // The frontend allows actively editing users to keep the connection open
  127. // for up-to ConnectionManager.MAX_RECONNECT_GRACEFULLY_INTERVAL=45s
  128. // Permit an extra delay to account for slow/flaky connections.
  129. (45 + 30) * 1000,
  130. continualPubsubTraffic: process.env.CONTINUAL_PUBSUB_TRAFFIC || false,
  131. checkEventOrder: process.env.CHECK_EVENT_ORDER || false,
  132. publishOnIndividualChannels:
  133. process.env.PUBLISH_ON_INDIVIDUAL_CHANNELS || false,
  134. statusCheckInterval: parseInt(process.env.STATUS_CHECK_INTERVAL || '0'),
  135. // The deployment colour for this app (if any). Used for blue green deploys.
  136. deploymentColour: process.env.DEPLOYMENT_COLOUR,
  137. // Load balancer health checks will return 200 only when this file contains
  138. // the deployment colour for this app.
  139. deploymentFile: process.env.DEPLOYMENT_FILE,
  140. sentry: {
  141. dsn: process.env.SENTRY_DSN,
  142. },
  143. errors: {
  144. catchUncaughtErrors: true,
  145. shutdownOnUncaughtError: true,
  146. },
  147. behindProxy: process.env.BEHIND_PROXY === 'true',
  148. trustedProxyIps: process.env.TRUSTED_PROXY_IPS,
  149. keepAliveTimeoutMs: parseInt(process.env.KEEPALIVE_TIMEOUT_MS ?? '5000', 10),
  150. }
  151. // console.log settings.redis
  152. module.exports = settings