settings.defaults.js 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. const http = require('node:http')
  2. const https = require('node:https')
  3. http.globalAgent.maxSockets = 300
  4. http.globalAgent.keepAlive = false
  5. https.globalAgent.keepAlive = false
  6. const Settings = {
  7. internal: {
  8. docstore: {
  9. port: 3016,
  10. host: process.env.LISTEN_ADDRESS || '127.0.0.1',
  11. },
  12. },
  13. mongo: {
  14. options: {
  15. monitorCommands: true,
  16. },
  17. },
  18. docstore: {
  19. archiveOnSoftDelete: process.env.ARCHIVE_ON_SOFT_DELETE === 'true',
  20. keepSoftDeletedDocsArchived:
  21. process.env.KEEP_SOFT_DELETED_DOCS_ARCHIVED === 'true',
  22. backend: process.env.BACKEND,
  23. healthCheck: {
  24. project_id: process.env.HEALTH_CHECK_PROJECT_ID,
  25. },
  26. bucket: process.env.BUCKET_NAME || process.env.AWS_BUCKET || 'bucket',
  27. gcs: {
  28. unlockBeforeDelete: process.env.GCS_UNLOCK_BEFORE_DELETE === 'true',
  29. deletedBucketSuffix: process.env.GCS_DELETED_BUCKET_SUFFIX,
  30. deleteConcurrency: parseInt(process.env.GCS_DELETE_CONCURRENCY) || 50,
  31. },
  32. },
  33. max_deleted_docs: parseInt(process.env.MAX_DELETED_DOCS, 10) || 2000,
  34. max_doc_length: parseInt(process.env.MAX_DOC_LENGTH) || 2 * 1024 * 1024, // 2mb
  35. maxJsonRequestSize:
  36. parseInt(process.env.MAX_JSON_REQUEST_SIZE) || 6 * 1024 * 1024, // 6 MB
  37. unArchiveBatchSize: parseInt(process.env.UN_ARCHIVE_BATCH_SIZE, 10) || 50,
  38. parallelArchiveJobs: parseInt(process.env.PARALLEL_ARCHIVE_JOBS, 10) || 5,
  39. archivingLockDurationMs:
  40. parseInt(process.env.ARCHIVING_LOCK_DURATION_MS, 10) || 60000,
  41. }
  42. if (process.env.MONGO_CONNECTION_STRING) {
  43. Settings.mongo.url = process.env.MONGO_CONNECTION_STRING
  44. } else if (process.env.MONGO_HOST) {
  45. Settings.mongo.url = `mongodb://${process.env.MONGO_HOST}/sharelatex`
  46. } else {
  47. Settings.mongo.url = 'mongodb://127.0.0.1/sharelatex'
  48. }
  49. if (
  50. process.env.AWS_ACCESS_KEY_ID &&
  51. process.env.AWS_SECRET_ACCESS_KEY &&
  52. process.env.AWS_BUCKET
  53. ) {
  54. Settings.docstore.s3 = {
  55. key: process.env.AWS_ACCESS_KEY_ID,
  56. secret: process.env.AWS_SECRET_ACCESS_KEY,
  57. bucket: process.env.AWS_BUCKET,
  58. endpoint: process.env.AWS_S3_ENDPOINT,
  59. pathStyle: process.env.AWS_S3_PATH_STYLE,
  60. partSize: parseInt(process.env.AWS_S3_PARTSIZE) || 100 * 1024 * 1024,
  61. }
  62. }
  63. if (process.env.GCS_API_ENDPOINT) {
  64. Settings.docstore.gcs.endpoint = {
  65. apiEndpoint: process.env.GCS_API_ENDPOINT,
  66. projectId: process.env.GCS_PROJECT_ID,
  67. }
  68. }
  69. if (process.env.FALLBACK_BACKEND) {
  70. Settings.docstore.fallback = {
  71. backend: process.env.FALLBACK_BACKEND,
  72. // mapping of bucket names on the fallback, to bucket names on the primary.
  73. // e.g. { myS3UserFilesBucketName: 'myGoogleUserFilesBucketName' }
  74. buckets: JSON.parse(process.env.FALLBACK_BUCKET_MAPPING || '{}'),
  75. copyOnMiss: process.env.COPY_ON_MISS === 'true',
  76. }
  77. }
  78. module.exports = Settings