diff --git a/docker-compose-speckle.yml b/docker-compose-speckle.yml index 396682b039..ce6d28d190 100644 --- a/docker-compose-speckle.yml +++ b/docker-compose-speckle.yml @@ -86,7 +86,8 @@ services: mem_limit: '3000m' memswap_limit: '3000m' environment: - HOST: '127.0.0.1' + HOST: '127.0.0.1' # Only accept connections from localhost, as preview service does not need to be exposed outside the container. + METRICS_HOST: '127.0.0.1' # Amend if you want to expose Prometheus metrics outside of the container LOG_LEVEL: 'info' PG_CONNECTION_STRING: 'postgres://speckle:speckle@postgres/speckle' diff --git a/packages/preview-service/src/server/server.ts b/packages/preview-service/src/server/server.ts index d504a853e4..785786c481 100644 --- a/packages/preview-service/src/server/server.ts +++ b/packages/preview-service/src/server/server.ts @@ -1,7 +1,7 @@ import { serverLogger } from '@/observability/logging.js' import { appFactory as metricsAppFactory } from '@/observability/metricsApp.js' import { appFactory } from '@/server/app.js' -import { getAppPort, getHost, getMetricsPort } from '@/utils/env.js' +import { getAppPort, getHost, getMetricsHost, getMetricsPort } from '@/utils/env.js' import http from 'http' import type { Knex } from 'knex' import { isNaN, isString, toNumber } from 'lodash-es' @@ -39,12 +39,14 @@ export const startServer = (params: { db: Knex; serveOnRandomPort?: boolean }) = onListening(server) }) server.listen(inputPort, host) + + const metricsHost = getMetricsHost() metricsServer.on('error', onErrorFactory(inputPort)) metricsServer.on('listening', () => { serverLogger.info('📊 Started Preview Service metrics server') onListening(metricsServer) }) - metricsServer.listen(inputMetricsPort, host) + metricsServer.listen(inputMetricsPort, metricsHost) return { app, server, metricsServer } } diff --git a/packages/preview-service/src/utils/env.ts b/packages/preview-service/src/utils/env.ts index 8d8a69999d..102cfd5952 100644 --- a/packages/preview-service/src/utils/env.ts +++ b/packages/preview-service/src/utils/env.ts @@ -6,6 +6,7 @@ export const getChromiumExecutablePath = () => { export const getHealthCheckFilePath = () => process.env.HEALTHCHECK_FILE_PATH || '/tmp/last_successful_query' export const getHost = () => process.env.HOST || '127.0.0.1' +export const getMetricsHost = () => process.env.METRICS_HOST || '127.0.0.1' export const getLogLevel = () => process.env.LOG_LEVEL || 'info' export const getMetricsPort = () => process.env.PROMETHEUS_METRICS_PORT || '9094' export const getNodeEnv = () => process.env.NODE_ENV || 'production' diff --git a/utils/helm/speckle-server/templates/preview_service/deployment.yml b/utils/helm/speckle-server/templates/preview_service/deployment.yml index e5c3d82d60..85b1240c89 100644 --- a/utils/helm/speckle-server/templates/preview_service/deployment.yml +++ b/utils/helm/speckle-server/templates/preview_service/deployment.yml @@ -62,6 +62,10 @@ spec: {{- end }} env: + - name: HOST + value: '127.0.0.1' # Only accept connections from localhost, as preview service does not need to be exposed outside the container. + - name: METRICS_HOST + value: '0.0.0.0' # Expose metrics outside of the container so it can be scraped by Prometheus - name: PORT value: {{ .Values.preview_service.port | quote }}