From b10cd14c96b0c1638f1b7f0dca5a4498005dbfab Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Kratochv=C3=ADl?= <xkrato10@fi.muni.cz>
Date: Sun, 12 Jun 2022 10:00:21 +0200
Subject: [PATCH] fix: nestjs server port is specified .env file and it applies
 everywhere - it's not hard-coded anymore

---
 backend/package-lock.json             | 54 +++++++++++++++++++++++++++
 backend/package.json                  |  1 +
 backend/src/app.module.ts             |  5 ++-
 backend/src/main.ts                   |  5 ++-
 docker-compose.yml                    |  3 +-
 nginx/templates/default.conf.template |  7 ++--
 6 files changed, 68 insertions(+), 7 deletions(-)

diff --git a/backend/package-lock.json b/backend/package-lock.json
index a85dbef..ca5a6ee 100644
--- a/backend/package-lock.json
+++ b/backend/package-lock.json
@@ -10,6 +10,7 @@
       "license": "UNLICENSED",
       "dependencies": {
         "@nestjs/common": "^8.0.0",
+        "@nestjs/config": "^2.1.0",
         "@nestjs/core": "^8.0.0",
         "@nestjs/platform-express": "^8.0.0",
         "jshint": "^2.13.4",
@@ -1541,6 +1542,22 @@
         }
       }
     },
+    "node_modules/@nestjs/config": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/@nestjs/config/-/config-2.1.0.tgz",
+      "integrity": "sha512-wUpt1/QJEN7xnJl4pM3c9rHrY1widq2yPOZfjaMD1//XAP9LLHTaW+RxSEG6BSGIm3w4wGtjco+gKNB2WL7yRg==",
+      "dependencies": {
+        "dotenv": "16.0.1",
+        "dotenv-expand": "8.0.3",
+        "lodash": "4.17.21",
+        "uuid": "8.3.2"
+      },
+      "peerDependencies": {
+        "@nestjs/common": "^7.0.0 || ^8.0.0",
+        "reflect-metadata": "^0.1.13",
+        "rxjs": "^6.0.0 || ^7.2.0"
+      }
+    },
     "node_modules/@nestjs/core": {
       "version": "8.4.6",
       "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-8.4.6.tgz",
@@ -3523,6 +3540,22 @@
         "domelementtype": "1"
       }
     },
+    "node_modules/dotenv": {
+      "version": "16.0.1",
+      "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.1.tgz",
+      "integrity": "sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ==",
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/dotenv-expand": {
+      "version": "8.0.3",
+      "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-8.0.3.tgz",
+      "integrity": "sha512-SErOMvge0ZUyWd5B0NXMQlDkN+8r+HhVUsxgOO7IoPDOdDRD2JjExpN6y3KnFR66jsJMwSn1pqIivhU5rcJiNg==",
+      "engines": {
+        "node": ">=12"
+      }
+    },
     "node_modules/ee-first": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
@@ -9979,6 +10012,17 @@
         "uuid": "8.3.2"
       }
     },
+    "@nestjs/config": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/@nestjs/config/-/config-2.1.0.tgz",
+      "integrity": "sha512-wUpt1/QJEN7xnJl4pM3c9rHrY1widq2yPOZfjaMD1//XAP9LLHTaW+RxSEG6BSGIm3w4wGtjco+gKNB2WL7yRg==",
+      "requires": {
+        "dotenv": "16.0.1",
+        "dotenv-expand": "8.0.3",
+        "lodash": "4.17.21",
+        "uuid": "8.3.2"
+      }
+    },
     "@nestjs/core": {
       "version": "8.4.6",
       "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-8.4.6.tgz",
@@ -11518,6 +11562,16 @@
         "domelementtype": "1"
       }
     },
+    "dotenv": {
+      "version": "16.0.1",
+      "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.1.tgz",
+      "integrity": "sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ=="
+    },
+    "dotenv-expand": {
+      "version": "8.0.3",
+      "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-8.0.3.tgz",
+      "integrity": "sha512-SErOMvge0ZUyWd5B0NXMQlDkN+8r+HhVUsxgOO7IoPDOdDRD2JjExpN6y3KnFR66jsJMwSn1pqIivhU5rcJiNg=="
+    },
     "ee-first": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
diff --git a/backend/package.json b/backend/package.json
index 8c71fb3..21cdb97 100644
--- a/backend/package.json
+++ b/backend/package.json
@@ -22,6 +22,7 @@
   },
   "dependencies": {
     "@nestjs/common": "^8.0.0",
+    "@nestjs/config": "^2.1.0",
     "@nestjs/core": "^8.0.0",
     "@nestjs/platform-express": "^8.0.0",
     "jshint": "^2.13.4",
diff --git a/backend/src/app.module.ts b/backend/src/app.module.ts
index 8662803..c3a23fc 100644
--- a/backend/src/app.module.ts
+++ b/backend/src/app.module.ts
@@ -1,9 +1,12 @@
 import { Module } from '@nestjs/common';
+import { ConfigModule } from '@nestjs/config';
 import { AppController } from './app.controller';
 import { AppService } from './app.service';
 
 @Module({
-  imports: [],
+  imports: [ConfigModule.forRoot({
+    envFilePath: '../.env',
+  })],
   controllers: [AppController],
   providers: [AppService],
 })
diff --git a/backend/src/main.ts b/backend/src/main.ts
index 13cad38..55127cb 100644
--- a/backend/src/main.ts
+++ b/backend/src/main.ts
@@ -1,8 +1,11 @@
 import { NestFactory } from '@nestjs/core';
+import { ConfigService } from '@nestjs/config';
 import { AppModule } from './app.module';
 
 async function bootstrap() {
   const app = await NestFactory.create(AppModule);
-  await app.listen(3000);
+  const configService = new ConfigService();
+  console.log('NestJS server is listening on: http://localhost:' + configService.get('SERVER_PORT'));
+  await app.listen(configService.get('SERVER_PORT'));
 }
 bootstrap();
diff --git a/docker-compose.yml b/docker-compose.yml
index d407385..a04f092 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -10,7 +10,7 @@ services:
     command: npm run start:debug
     env_file: .env
     ports:
-      - 127.0.0.1:${SERVER_PORT}:3000
+      - 127.0.0.1:${SERVER_PORT}:${SERVER_PORT}
     volumes:
       # changes in host's ./backend directory will be propagated to the container
       - ./backend:/usr/src/app
@@ -53,6 +53,7 @@ services:
   nginx:
     container_name: nginx
     image: nginx:1.21.6-alpine
+    env_file: .env
     ports:
       - 127.0.0.1:${NGINX_PORT}:${NGINX_PORT}
     volumes:
diff --git a/nginx/templates/default.conf.template b/nginx/templates/default.conf.template
index 1b0ec6a..831ce45 100644
--- a/nginx/templates/default.conf.template
+++ b/nginx/templates/default.conf.template
@@ -1,6 +1,5 @@
-upstream nest_server {
-  # TODO: must be same port as the nestJS server container port
-  server server:3000;
+upstream nestjs_server {
+  server server:${SERVER_PORT};
 }
 
 server {
@@ -22,6 +21,6 @@ server {
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
     proxy_set_header X-Forwarded-Proto $scheme;
 
-    proxy_pass http://nest_server;
+    proxy_pass http://nestjs_server;
   }
 }
-- 
GitLab