overleaf/services/filestore/config/settings.defaults.js

133 lines
4.5 KiB
JavaScript
Raw Normal View History

2021-05-25 14:53:36 +00:00
const Path = require('path')
// environment variables renamed for consistency
// use AWS_ACCESS_KEY_ID-style going forward
if (process.env.AWS_KEY && !process.env.AWS_ACCESS_KEY_ID) {
2021-05-25 14:53:36 +00:00
process.env.AWS_ACCESS_KEY_ID = process.env.AWS_KEY
}
if (process.env.AWS_SECRET && !process.env.AWS_SECRET_ACCESS_KEY) {
2021-05-25 14:53:36 +00:00
process.env.AWS_SECRET_ACCESS_KEY = process.env.AWS_SECRET
}
// pre-backend setting, fall back to old behaviour
if (process.env.BACKEND == null) {
2021-05-25 14:54:50 +00:00
if (process.env.AWS_ACCESS_KEY_ID || process.env.S3_BUCKET_CREDENTIALS) {
2021-05-25 14:53:36 +00:00
process.env.BACKEND = 's3'
process.env.USER_FILES_BUCKET_NAME =
process.env.AWS_S3_USER_FILES_BUCKET_NAME
process.env.TEMPLATE_FILES_BUCKET_NAME =
process.env.AWS_S3_TEMPLATE_FILES_BUCKET_NAME
process.env.PUBLIC_FILES_BUCKET_NAME =
process.env.AWS_S3_PUBLIC_FILES_BUCKET_NAME
} else {
process.env.BACKEND = 'fs'
process.env.USER_FILES_BUCKET_NAME = Path.resolve(
2021-05-25 14:54:50 +00:00
// eslint-disable-next-line no-path-concat
2021-05-25 14:53:36 +00:00
__dirname + '/../user_files'
)
process.env.TEMPLATE_FILES_BUCKET_NAME = Path.resolve(
2021-05-25 14:54:50 +00:00
// eslint-disable-next-line no-path-concat
2021-05-25 14:53:36 +00:00
__dirname + '/../template_files'
)
process.env.PUBLIC_FILES_BUCKET_NAME = Path.resolve(
2021-05-25 14:54:50 +00:00
// eslint-disable-next-line no-path-concat
2021-05-25 14:53:36 +00:00
__dirname + '/../public_files'
)
}
}
const settings = {
2021-05-25 14:53:36 +00:00
internal: {
filestore: {
port: 3009,
2021-07-13 11:04:46 +00:00
host: process.env.LISTEN_ADDRESS || 'localhost',
},
2021-05-25 14:53:36 +00:00
},
filestore: {
// Which backend persistor to use.
// Choices are
// s3 - Amazon S3
// fs - local filesystem
// gcs - Google Cloud Storage
backend: process.env.BACKEND,
gcs: {
endpoint: process.env.GCS_API_ENDPOINT
? {
apiEndpoint: process.env.GCS_API_ENDPOINT,
apiScheme: process.env.GCS_API_SCHEME,
2021-07-13 11:04:46 +00:00
projectId: process.env.GCS_PROJECT_ID,
2021-05-25 14:53:36 +00:00
}
: undefined,
unlockBeforeDelete: process.env.GCS_UNLOCK_BEFORE_DELETE === 'true', // unlock an event-based hold before deleting. default false
deletedBucketSuffix: process.env.GCS_DELETED_BUCKET_SUFFIX, // if present, copy file to another bucket on delete. default null
deleteConcurrency: parseInt(process.env.GCS_DELETE_CONCURRENCY) || 50,
2021-07-13 11:04:46 +00:00
signedUrlExpiryInMs: parseInt(process.env.LINK_EXPIRY_TIMEOUT || 60000),
2021-05-25 14:53:36 +00:00
},
s3:
2021-05-25 14:54:50 +00:00
process.env.AWS_ACCESS_KEY_ID || process.env.S3_BUCKET_CREDENTIALS
2021-05-25 14:53:36 +00:00
? {
key: process.env.AWS_ACCESS_KEY_ID,
secret: process.env.AWS_SECRET_ACCESS_KEY,
endpoint: process.env.AWS_S3_ENDPOINT,
pathStyle: process.env.AWS_S3_PATH_STYLE,
partSize: process.env.AWS_S3_PARTSIZE || 100 * 1024 * 1024,
2021-05-25 14:54:50 +00:00
bucketCreds: process.env.S3_BUCKET_CREDENTIALS
? JSON.parse(process.env.S3_BUCKET_CREDENTIALS)
2021-07-13 11:04:46 +00:00
: undefined,
2021-05-25 14:53:36 +00:00
}
: undefined,
// GCS should be configured by the service account on the kubernetes pod. See GOOGLE_APPLICATION_CREDENTIALS,
// which will be picked up automatically.
stores: {
user_files: process.env.USER_FILES_BUCKET_NAME,
template_files: process.env.TEMPLATE_FILES_BUCKET_NAME,
2021-07-13 11:04:46 +00:00
public_files: process.env.PUBLIC_FILES_BUCKET_NAME,
2021-05-25 14:53:36 +00:00
},
2021-05-25 14:54:50 +00:00
fallback: process.env.FALLBACK_BACKEND
? {
backend: process.env.FALLBACK_BACKEND,
// mapping of bucket names on the fallback, to bucket names on the primary.
// e.g. { myS3UserFilesBucketName: 'myGoogleUserFilesBucketName' }
buckets: JSON.parse(process.env.FALLBACK_BUCKET_MAPPING || '{}'),
2021-07-13 11:04:46 +00:00
copyOnMiss: process.env.COPY_ON_MISS === 'true',
2021-05-25 14:54:50 +00:00
}
: undefined,
2021-05-25 14:53:36 +00:00
2021-07-13 11:04:46 +00:00
allowRedirects: process.env.ALLOW_REDIRECTS === 'true',
2021-05-25 14:53:36 +00:00
},
path: {
2021-05-25 14:54:50 +00:00
// eslint-disable-next-line no-path-concat
2021-07-13 11:04:46 +00:00
uploadFolder: Path.resolve(__dirname + '/../uploads'),
2021-05-25 14:53:36 +00:00
},
commands: {
// Any commands to wrap the convert utility in, for example ["nice"], or ["firejail", "--profile=/etc/firejail/convert.profile"]
2021-07-13 11:04:46 +00:00
convertCommandPrefix: [],
2021-05-25 14:53:36 +00:00
},
enableConversions: process.env.ENABLE_CONVERSIONS === 'true',
sentry: {
2021-07-13 11:04:46 +00:00
dsn: process.env.SENTRY_DSN,
},
2021-05-25 14:53:36 +00:00
}
// Filestore health check
// ----------------------
// Project and file details to check in persistor when calling /health_check
2021-05-25 14:54:50 +00:00
if (process.env.HEALTH_CHECK_PROJECT_ID && process.env.HEALTH_CHECK_FILE_ID) {
2021-05-25 14:53:36 +00:00
settings.health_check = {
project_id: process.env.HEALTH_CHECK_PROJECT_ID,
2021-07-13 11:04:46 +00:00
file_id: process.env.HEALTH_CHECK_FILE_ID,
2021-05-25 14:53:36 +00:00
}
}
2018-03-23 15:26:38 +00:00
2021-05-25 14:53:36 +00:00
module.exports = settings