settings.defaults.js 5.6 KB

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