settings.defaults.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. /*
  2. * decaffeinate suggestions:
  3. * DS207: Consider shorter variations of null checks
  4. * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
  5. */
  6. const http = require('http')
  7. http.globalAgent.maxSockets = 300
  8. const Settings = {
  9. internal: {
  10. docstore: {
  11. port: 3016,
  12. host: process.env.LISTEN_ADDRESS || 'localhost'
  13. }
  14. },
  15. mongo: {
  16. options: {
  17. useUnifiedTopology:
  18. (process.env.MONGO_USE_UNIFIED_TOPOLOGY || 'true') === 'true'
  19. }
  20. },
  21. docstore: {
  22. archiveOnSoftDelete: process.env.ARCHIVE_ON_SOFT_DELETE === 'true',
  23. keepSoftDeletedDocsArchived:
  24. process.env.KEEP_SOFT_DELETED_DOCS_ARCHIVED === 'true',
  25. backend: process.env.BACKEND || 's3',
  26. healthCheck: {
  27. project_id: process.env.HEALTH_CHECK_PROJECT_ID
  28. },
  29. bucket: process.env.BUCKET_NAME || process.env.AWS_BUCKET || 'bucket',
  30. gcs: {
  31. unlockBeforeDelete: process.env.GCS_UNLOCK_BEFORE_DELETE === 'true',
  32. deletedBucketSuffix: process.env.GCS_DELETED_BUCKET_SUFFIX,
  33. deleteConcurrency: parseInt(process.env.GCS_DELETE_CONCURRENCY) || 50
  34. }
  35. },
  36. max_deleted_docs: parseInt(process.env.MAX_DELETED_DOCS, 10) || 2000,
  37. max_doc_length: parseInt(process.env.MAX_DOC_LENGTH) || 2 * 1024 * 1024, // 2mb
  38. destroyBatchSize: parseInt(process.env.DESTROY_BATCH_SIZE, 10) || 2000,
  39. parallelArchiveJobs: parseInt(process.env.PARALLEL_ARCHIVE_JOBS, 10) || 5
  40. }
  41. if (process.env.MONGO_CONNECTION_STRING != null) {
  42. Settings.mongo.url = process.env.MONGO_CONNECTION_STRING
  43. } else if (process.env.MONGO_HOST != null) {
  44. Settings.mongo.url = `mongodb://${process.env.MONGO_HOST}/sharelatex`
  45. } else {
  46. Settings.mongo.url = 'mongodb://127.0.0.1/sharelatex'
  47. }
  48. if (
  49. process.env.AWS_ACCESS_KEY_ID != null &&
  50. process.env.AWS_SECRET_ACCESS_KEY != null &&
  51. process.env.AWS_BUCKET != null
  52. ) {
  53. Settings.docstore.s3 = {
  54. key: process.env.AWS_ACCESS_KEY_ID,
  55. secret: process.env.AWS_SECRET_ACCESS_KEY,
  56. bucket: process.env.AWS_BUCKET,
  57. endpoint: process.env.AWS_S3_ENDPOINT,
  58. pathStyle: process.env.AWS_S3_PATH_STYLE,
  59. partSize: parseInt(process.env.AWS_S3_PARTSIZE) || 100 * 1024 * 1024
  60. }
  61. }
  62. if (process.env.GCS_API_ENDPOINT) {
  63. Settings.docstore.gcs.endpoint = {
  64. apiEndpoint: process.env.GCS_API_ENDPOINT,
  65. apiScheme: process.env.GCS_API_SCHEME,
  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