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

165 lines
5.1 KiB
JavaScript
Raw Normal View History

const Path = require('path')
2014-04-02 16:59:44 -04:00
module.exports = {
compileSizeLimit: process.env.COMPILE_SIZE_LIMIT || '7mb',
2014-04-02 16:59:44 -04:00
processLifespanLimitMs:
2020-04-23 06:32:33 -04:00
parseInt(process.env.PROCESS_LIFE_SPAN_LIMIT_MS) || 60 * 60 * 24 * 1000 * 2,
2021-01-26 09:08:29 -05:00
catchErrors: process.env.CATCH_ERRORS === 'true',
path: {
compilesDir:
process.env.CLSI_COMPILES_PATH || Path.resolve(__dirname, '../compiles'),
outputDir:
process.env.CLSI_OUTPUT_PATH || Path.resolve(__dirname, '../output'),
clsiCacheDir:
process.env.CLSI_CACHE_PATH || Path.resolve(__dirname, '../cache'),
2020-06-02 04:51:34 -04:00
synctexBaseDir(projectId) {
return Path.join(this.compilesDir, projectId)
2021-07-13 07:04:48 -04:00
},
},
internal: {
clsi: {
port: 3013,
2021-07-13 07:04:48 -04:00
host: process.env.LISTEN_ADDRESS || 'localhost',
},
load_balancer_agent: {
report_load: true,
load_port: 3048,
2021-07-13 07:04:48 -04:00
local_port: 3049,
},
},
apis: {
clsi: {
// Internal requests (used by tests only at the time of writing).
2021-07-13 07:04:48 -04:00
url: `http://${process.env.CLSI_HOST || 'localhost'}:3013`,
// External url prefix for output files, e.g. for requests via load-balancers.
outputUrlPrefix: `${process.env.ZONE ? `/zone/${process.env.ZONE}` : ''}`,
},
clsiPerf: {
host: `${process.env.CLSI_PERF_HOST || 'localhost'}:${
process.env.CLSI_PERF_PORT || '3043'
2021-07-13 07:04:48 -04:00
}`,
},
},
smokeTest: process.env.SMOKE_TEST || false,
project_cache_length_ms: 1000 * 60 * 60 * 24,
parallelFileDownloads: process.env.FILESTORE_PARALLEL_FILE_DOWNLOADS || 1,
filestoreDomainOveride: process.env.FILESTORE_DOMAIN_OVERRIDE,
texliveImageNameOveride: process.env.TEX_LIVE_IMAGE_NAME_OVERRIDE,
2020-06-04 06:47:22 -04:00
texliveOpenoutAny: process.env.TEXLIVE_OPENOUT_ANY,
texliveMaxPrintLine: process.env.TEXLIVE_MAX_PRINT_LINE,
sentry: {
2021-07-13 07:04:48 -04:00
dsn: process.env.SENTRY_DSN,
},
enablePdfCaching: process.env.ENABLE_PDF_CACHING === 'true',
enablePdfCachingDark: process.env.ENABLE_PDF_CACHING_DARK === 'true',
pdfCachingMinChunkSize:
parseInt(process.env.PDF_CACHING_MIN_CHUNK_SIZE, 10) || 1024,
pdfCachingMaxProcessingTime:
2021-07-13 07:04:48 -04:00
parseInt(process.env.PDF_CACHING_MAX_PROCESSING_TIME, 10) || 10 * 1000,
pdfCachingEnableWorkerPool:
process.env.PDF_CACHING_ENABLE_WORKER_POOL === 'true',
pdfCachingWorkerPoolSize:
parseInt(process.env.PDF_CACHING_WORKER_POOL_SIZE, 10) || 4,
pdfCachingWorkerPoolBackLogLimit:
parseInt(process.env.PDF_CACHING_WORKER_POOL_BACK_LOG_LIMIT, 10) || 40,
}
2020-06-11 11:01:44 -04:00
if (process.env.ALLOWED_COMPILE_GROUPS) {
try {
2021-07-13 07:04:48 -04:00
module.exports.allowedCompileGroups =
process.env.ALLOWED_COMPILE_GROUPS.split(' ')
2020-06-11 11:01:44 -04:00
} catch (error) {
console.error(error, 'could not apply allowed compile group setting')
process.exit(1)
}
}
if (process.env.DOCKER_RUNNER) {
2020-06-02 04:51:34 -04:00
let seccompProfilePath
module.exports.clsi = {
dockerRunner: process.env.DOCKER_RUNNER === 'true',
docker: {
runtime: process.env.DOCKER_RUNTIME,
image:
process.env.TEXLIVE_IMAGE || 'quay.io/sharelatex/texlive-full:2017.1',
env: {
2021-07-13 07:04:48 -04:00
HOME: '/tmp',
CLSI: 1,
},
socketPath: '/var/run/docker.sock',
2021-07-13 07:04:48 -04:00
user: process.env.TEXLIVE_IMAGE_USER || 'tex',
},
optimiseInDocker: true,
expireProjectAfterIdleMs: 24 * 60 * 60 * 1000,
2021-07-13 07:04:48 -04:00
checkProjectsIntervalMs: 10 * 60 * 1000,
}
2020-06-11 11:01:44 -04:00
try {
// Override individual docker settings using path-based keys, e.g.:
// compileGroupDockerConfigs = {
// priority: { 'HostConfig.CpuShares': 100 }
// beta: { 'dotted.path.here', 'value'}
// }
const compileGroupConfig = JSON.parse(
process.env.COMPILE_GROUP_DOCKER_CONFIGS || '{}'
)
// Automatically clean up wordcount and synctex containers
const defaultCompileGroupConfig = {
wordcount: { 'HostConfig.AutoRemove': true },
2021-07-13 07:04:48 -04:00
synctex: { 'HostConfig.AutoRemove': true },
}
module.exports.clsi.docker.compileGroupConfig = Object.assign(
defaultCompileGroupConfig,
compileGroupConfig
)
2020-06-11 11:01:44 -04:00
} catch (error) {
console.error(error, 'could not apply compile group docker configs')
process.exit(1)
}
try {
2020-06-02 04:51:34 -04:00
seccompProfilePath = Path.resolve(__dirname, '../seccomp/clsi-profile.json')
module.exports.clsi.docker.seccomp_profile = JSON.stringify(
2020-06-02 04:51:34 -04:00
JSON.parse(require('fs').readFileSync(seccompProfilePath))
)
} catch (error) {
2020-06-10 06:42:07 -04:00
console.error(
error,
2020-06-10 06:42:07 -04:00
`could not load seccomp profile from ${seccompProfilePath}`
)
2020-06-10 06:42:07 -04:00
process.exit(1)
}
2021-07-21 09:53:35 -04:00
if (process.env.APPARMOR_PROFILE) {
try {
module.exports.clsi.docker.apparmor_profile = process.env.APPARMOR_PROFILE
} catch (error) {
console.error(error, 'could not apply apparmor profile setting')
process.exit(1)
}
}
if (process.env.ALLOWED_IMAGES) {
try {
2021-07-13 07:04:48 -04:00
module.exports.clsi.docker.allowedImages =
process.env.ALLOWED_IMAGES.split(' ')
} catch (error) {
console.error(error, 'could not apply allowed images setting')
process.exit(1)
}
}
module.exports.path.synctexBaseDir = () => '/compile'
module.exports.path.sandboxedCompilesHostDir = process.env.COMPILES_HOST_DIR
module.exports.path.synctexBinHostPath = process.env.SYNCTEX_BIN_HOST_PATH
}