From ed74213c63a5dc313a88c8cd7b5192d0758a39ec Mon Sep 17 00:00:00 2001
From: yparitcher <y@paritcher.com>
Date: Mon, 15 Apr 2024 14:24:13 -0400
Subject: [PATCH] feat(server): server host binding (#8800)

* Allow setting the host address for the server & microservices

Default to listen on all interfaces as per the current behavior.

* (Docs) format: fix lint
---
 docs/docs/install/environment-variables.md | 13 +++++++------
 server/src/main.ts                         |  6 ++++--
 2 files changed, 11 insertions(+), 8 deletions(-)

diff --git a/docs/docs/install/environment-variables.md b/docs/docs/install/environment-variables.md
index a8cbe6059f..6f768a0af0 100644
--- a/docs/docs/install/environment-variables.md
+++ b/docs/docs/install/environment-variables.md
@@ -48,12 +48,13 @@ These environment variables are used by the `docker-compose.yml` file and do **N
 
 ## Ports
 
-| Variable                | Description           |  Default  | Services         |
-| :---------------------- | :-------------------- | :-------: | :--------------- |
-| `SERVER_PORT`           | Server Port           |  `3001`   | server           |
-| `MICROSERVICES_PORT`    | Microservices Port    |  `3002`   | microservices    |
-| `MACHINE_LEARNING_HOST` | Machine Learning Host | `0.0.0.0` | machine learning |
-| `MACHINE_LEARNING_PORT` | Machine Learning Port |  `3003`   | machine learning |
+| Variable                | Description           |  Default  | Services              |
+| :---------------------- | :-------------------- | :-------: | :-------------------- |
+| `HOST`                  | Host                  | `0.0.0.0` | server, microservices |
+| `SERVER_PORT`           | Server Port           |  `3001`   | server                |
+| `MICROSERVICES_PORT`    | Microservices Port    |  `3002`   | microservices         |
+| `MACHINE_LEARNING_HOST` | Machine Learning Host | `0.0.0.0` | machine learning      |
+| `MACHINE_LEARNING_PORT` | Machine Learning Port |  `3003`   | machine learning      |
 
 ## Database
 
diff --git a/server/src/main.ts b/server/src/main.ts
index 3a93038683..c26010a586 100644
--- a/server/src/main.ts
+++ b/server/src/main.ts
@@ -16,6 +16,7 @@ import { useSwagger } from 'src/utils/misc';
 
 async function bootstrapMicroservices() {
   const logger = new ImmichLogger('ImmichMicroservice');
+  const host = String(process.env.HOST || '0.0.0.0');
   const port = Number(process.env.MICROSERVICES_PORT) || 3002;
 
   otelSDK.start();
@@ -23,13 +24,14 @@ async function bootstrapMicroservices() {
   app.useLogger(app.get(ImmichLogger));
   app.useWebSocketAdapter(new WebSocketAdapter(app));
 
-  await app.listen(port);
+  await app.listen(port, host);
 
   logger.log(`Immich Microservices is listening on ${await app.getUrl()} [v${serverVersion}] [${envName}] `);
 }
 
 async function bootstrapApi() {
   const logger = new ImmichLogger('ImmichServer');
+  const host = String(process.env.HOST || '0.0.0.0');
   const port = Number(process.env.SERVER_PORT) || 3001;
 
   otelSDK.start();
@@ -65,7 +67,7 @@ async function bootstrapApi() {
   }
   app.use(app.get(ApiService).ssr(excludePaths));
 
-  const server = await app.listen(port);
+  const server = await app.listen(port, host);
   server.requestTimeout = 30 * 60 * 1000;
 
   logger.log(`Immich Server is listening on ${await app.getUrl()} [v${serverVersion}] [${envName}] `);