diff --git a/libraries/object-persistor/src/S3Persistor.js b/libraries/object-persistor/src/S3Persistor.js index e9c4fe0565..8b1a63c44e 100644 --- a/libraries/object-persistor/src/S3Persistor.js +++ b/libraries/object-persistor/src/S3Persistor.js @@ -361,7 +361,7 @@ module.exports = class S3Persistor extends AbstractPersistor { options.s3ForcePathStyle = true } - for (const opt of ['httpOptions', 'maxRetries']) { + for (const opt of ['httpOptions', 'maxRetries', 'region']) { if (this.settings[opt]) { options[opt] = this.settings[opt] } diff --git a/server-ce/config/settings.js b/server-ce/config/settings.js index f38585338b..68f8ae64c0 100644 --- a/server-ce/config/settings.js +++ b/server-ce/config/settings.js @@ -167,31 +167,6 @@ const settings = { }, }, - // File storage - // ------------ - - // ShareLaTeX can store binary files like images either locally or in Amazon - // S3. The default is locally: - filestore: { - backend: 'fs', - stores: { - user_files: Path.join(DATA_DIR, 'user_files'), - template_files: Path.join(DATA_DIR, 'template_files'), - }, - }, - - // To use Amazon S3 as a storage backend, comment out the above config, and - // uncomment the following, filling in your key, secret, and bucket name: - // - // filestore: - // backend: "s3" - // stores: - // user_files: "BUCKET_NAME" - // s3: - // key: "AWS_KEY" - // secret: "AWS_SECRET" - // - trackchanges: { continueOnError: true, }, @@ -299,7 +274,7 @@ const settings = { url: 'http://localhost:3100/api', user: 'staging', pass: process.env.STAGING_PASSWORD, - } + }, }, references: {}, notifications: undefined, @@ -747,10 +722,12 @@ if (process.env.SHARELATEX_TEMPLATES_USER_ID) { if (process.env.SHARELATEX_PROXY_LEARN != null) { settings.proxyLearn = parse(process.env.SHARELATEX_PROXY_LEARN) if (settings.proxyLearn) { - settings.nav.header_extras = [{ - url: '/learn', - text: 'documentation', - }].concat(settings.nav.header_extras || []) + settings.nav.header_extras = [ + { + url: '/learn', + text: 'documentation', + }, + ].concat(settings.nav.header_extras || []) } } @@ -762,6 +739,41 @@ if (process.env.SHARELATEX_ELASTICSEARCH_URL != null) { } } +// filestore +switch (process.env.SHARELATEX_FILESTORE_BACKEND) { + case 's3': + settings.filestore = { + backend: 's3', + stores: { + user_files: process.env.SHARELATEX_FILESTORE_USER_FILES_BUCKET_NAME, + template_files: + process.env.SHARELATEX_FILESTORE_TEMPLATE_FILES_BUCKET_NAME, + }, + s3: { + key: + process.env.SHARELATEX_FILESTORE_S3_ACCESS_KEY_ID || + process.env.AWS_ACCESS_KEY_ID, + secret: + process.env.SHARELATEX_FILESTORE_S3_SECRET_ACCESS_KEY || + process.env.AWS_ACCESS_KEY_ID, + endpoint: process.env.SHARELATEX_FILESTORE_S3_ENDPOINT, + pathStyle: process.env.SHARELATEX_FILESTORE_S3_PATH_STYLE === 'true', + region: + process.env.SHARELATEX_FILESTORE_S3_REGION || + process.env.AWS_DEFAULT_REGION, + }, + } + break + default: + settings.filestore = { + backend: 'fs', + stores: { + user_files: Path.join(DATA_DIR, 'user_files'), + template_files: Path.join(DATA_DIR, 'template_files'), + }, + } +} + // With lots of incoming and outgoing HTTP connections to different services, // sometimes long running, it is a good idea to increase the default number // of sockets that Node will hold open.