From 99bb629e7875570332c8fccecdc72bf9bd01c250 Mon Sep 17 00:00:00 2001 From: gabrielm2q <mariano.gabriel2q@gmail.com> Date: Wed, 4 Dec 2024 00:46:04 -0300 Subject: [PATCH 1/7] fix(fga-eps-mds/2024.2-ARANDU-DOC#42): modifies docker configuration and its files --- .dockerignore | 6 +++--- .env.dev | 19 ------------------- .env.dev.template | 14 ++++++++++++++ .env.prod.template | 14 ++++++++++++++ Dockerfile | 36 ++++++++++++++++++++++++++++++------ Dockerfile.prod | 38 ++++++++++++++++++++++++++++++++++++++ Makefile | 15 +++++++++++++++ docker-compose.yml | 18 ++++++++---------- src/app.module.ts | 2 +- 9 files changed, 123 insertions(+), 39 deletions(-) delete mode 100644 .env.dev create mode 100644 .env.dev.template create mode 100644 .env.prod.template create mode 100644 Dockerfile.prod create mode 100644 Makefile diff --git a/.dockerignore b/.dockerignore index 3dc974b..c9c9bce 100644 --- a/.dockerignore +++ b/.dockerignore @@ -4,9 +4,9 @@ .dockerignore # Build dependencies -dist.do -node_modules -node_module +# dist.do +# node_modules +# node_module # Misc .eslintrc.js diff --git a/.env.dev b/.env.dev deleted file mode 100644 index 048404d..0000000 --- a/.env.dev +++ /dev/null @@ -1,19 +0,0 @@ -MONGODB_URI='' -EMAIL_USER="" -EMAIL_PASS="" -SENDGRID_API_KEY="" -JWT_SECRET="" -JWT_EXPIRATION="" -GOOGLE_CLIENT_ID="" -GOOGLE_CLIENT_SECRET="" -GOOGLE_CALLBACK_URL="" -MICROSOFT_CLIENT_ID="" -MICROSOFT_CLIENT_SECRET="" -MICROSOFT_TENANT_ID="" -MICROSOFT_CALLBACK_URL="" -FRONTEND_URL="" -EMAIL_LINK="" -# Estas etapas a baixo ainda nao sao necessarias - -# RABBIT_MQ_URI=amqp://admin:admin@rabbitmq:5672 -# RABBIT_MQ_USER_QUEUE=USER \ No newline at end of file diff --git a/.env.dev.template b/.env.dev.template new file mode 100644 index 0000000..7553a7c --- /dev/null +++ b/.env.dev.template @@ -0,0 +1,14 @@ +MONGODB_URI= +EMAIL_USER= +EMAIL_PASS= +SENDGRID_API_KEY= +JWT_SECRET= +JWT_EXPIRATION= +GOOGLE_CLIENT_ID= +GOOGLE_CLIENT_SECRET= +GOOGLE_CALLBACK_URL= +MICROSOFT_CLIENT_ID= +MICROSOFT_CLIENT_SECRET= +MICROSOFT_TENANT_ID= +MICROSOFT_CALLBACK_URL= +FRONTEND_URL= \ No newline at end of file diff --git a/.env.prod.template b/.env.prod.template new file mode 100644 index 0000000..7553a7c --- /dev/null +++ b/.env.prod.template @@ -0,0 +1,14 @@ +MONGODB_URI= +EMAIL_USER= +EMAIL_PASS= +SENDGRID_API_KEY= +JWT_SECRET= +JWT_EXPIRATION= +GOOGLE_CLIENT_ID= +GOOGLE_CLIENT_SECRET= +GOOGLE_CALLBACK_URL= +MICROSOFT_CLIENT_ID= +MICROSOFT_CLIENT_SECRET= +MICROSOFT_TENANT_ID= +MICROSOFT_CALLBACK_URL= +FRONTEND_URL= \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 20520c2..ee611b0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,14 +1,38 @@ -FROM node:22-alpine - -WORKDIR /app +FROM node:22-alpine AS base +FROM base AS deps +RUN apk add --no-cache libc6-compat -COPY package*.json ./ +WORKDIR /app -RUN npm install +COPY package.json package-lock.json* ./ +RUN \ + if [ -f package-lock.json ]; then npm ci; \ + fi +FROM base AS builder +WORKDIR /app +COPY --from=deps /app/node_modules ./node_modules COPY . . +COPY .env .env RUN npm run build -CMD ["npm", "run", "start:dev"] +FROM base AS runner +WORKDIR /app + +ENV NODE_ENV production + +RUN addgroup -g 1001 -S nodejs \ + && adduser -S arandu -u 1001 + +COPY --chown=arandu:nodejs --from=builder /app/dist ./dist +COPY --chown=arandu:nodejs --from=builder /app/node_modules ./node_modules + +USER arandu + +EXPOSE 3000 + +ENV PORT=3000 + +CMD ["node", "dist/main.js"] \ No newline at end of file diff --git a/Dockerfile.prod b/Dockerfile.prod new file mode 100644 index 0000000..c4f3a1e --- /dev/null +++ b/Dockerfile.prod @@ -0,0 +1,38 @@ +FROM node:22-alpine AS base + +FROM base AS deps +RUN apk add --no-cache libc6-compat + +WORKDIR /app + +COPY package.json package-lock.json* ./ +RUN \ + if [ -f package-lock.json ]; then npm ci; \ + fi + +FROM base AS builder +WORKDIR /app +COPY --from=deps /app/node_modules ./node_modules +COPY . . + +COPY .env.prod.template .env +RUN npm run build + +FROM base AS runner +WORKDIR /app + +ENV NODE_ENV production + +RUN addgroup -g 1001 -S nodejs \ + && adduser -S arandu -u 1001 + +COPY --chown=arandu:nodejs --from=builder /app/dist ./dist +COPY --chown=arandu:nodejs --from=builder /app/node_modules ./node_modules + +USER arandu + +EXPOSE 3000 + +ENV PORT=3000 + +CMD ["node", "dist/main.js"] \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..24082cf --- /dev/null +++ b/Makefile @@ -0,0 +1,15 @@ +.PHONY: build +build: + docker compose build + +.PHONY: start +start: + docker compose up + +.PHONY: run +run: + docker compose up --build + +.PHONY: stop +stop: + docker compose down \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index a33e9a2..9e45d5e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2,19 +2,17 @@ services: user-api: container_name: user-api restart: on-failure - build: . - environment: - - NODE_ENV=development - ports: - - 3000:3000 - volumes: - - ./src:/app/src - - ./test:/app/test + build: + context: . + dockerfile: Dockerfile + image: user-api env_file: - .env + ports: + - "3000:3000" networks: - - calculus-network + - arandu-network networks: - calculus-network: + arandu-network: driver: bridge \ No newline at end of file diff --git a/src/app.module.ts b/src/app.module.ts index 5915502..42df725 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -3,8 +3,8 @@ import { ConfigModule, ConfigService } from '@nestjs/config'; import { MongooseModule } from '@nestjs/mongoose'; import { UsersModule } from './users/users.module'; -import { AuthModule } from './auth/auth.module'; import * as Joi from 'joi'; +import { AuthModule } from './auth/auth.module'; @Module({ imports: [ From 9947a2a9036c8351723b005ca78fed09165930e7 Mon Sep 17 00:00:00 2001 From: gabrielm2q <mariano.gabriel2q@gmail.com> Date: Thu, 5 Dec 2024 21:15:19 -0300 Subject: [PATCH 2/7] fix(fga-eps-mds/2024.2-ARANDU-DOC#42): quickfixes on dockerfiles and bind application --- Dockerfile | 4 +++- src/main.ts | 10 ++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index ee611b0..4755fc6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,6 +10,7 @@ RUN \ if [ -f package-lock.json ]; then npm ci; \ fi + FROM base AS builder WORKDIR /app COPY --from=deps /app/node_modules ./node_modules @@ -21,13 +22,14 @@ RUN npm run build FROM base AS runner WORKDIR /app -ENV NODE_ENV production +ENV NODE_ENV=production RUN addgroup -g 1001 -S nodejs \ && adduser -S arandu -u 1001 COPY --chown=arandu:nodejs --from=builder /app/dist ./dist COPY --chown=arandu:nodejs --from=builder /app/node_modules ./node_modules +COPY --chown=arandu:nodejs --from=builder /app/.env ./.env USER arandu diff --git a/src/main.ts b/src/main.ts index 49335f2..8369ded 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,7 +1,7 @@ +import { Logger, ValidationPipe } from '@nestjs/common'; +import { ConfigService } from '@nestjs/config'; import { NestFactory } from '@nestjs/core'; import { AppModule } from './app.module'; -import { ConfigService } from '@nestjs/config'; -import { Logger, ValidationPipe } from '@nestjs/common'; const configService = new ConfigService(); const logger = new Logger('Main'); @@ -10,7 +10,9 @@ async function bootstrap() { const app = await NestFactory.create(AppModule); app.useGlobalPipes(new ValidationPipe()); app.enableCors(); - await app.listen(configService.get('PORT')); - logger.log(`Application listening on port ${configService.get('PORT')}`); + await app.listen(configService.get('PORT'), '0.0.0.0', () => { + logger.log(`Application listening on port ${configService.get('PORT')}`); + }); + } bootstrap(); From cf4e00e695fbc223d9110a260fba881eec758196 Mon Sep 17 00:00:00 2001 From: gabrielm2q <mariano.gabriel2q@gmail.com> Date: Thu, 5 Dec 2024 21:57:39 -0300 Subject: [PATCH 3/7] feat(fga-eps-mds/2024.2-ARANDU-DOC#42): adding local mongo and mongo express to docker compose --- .env.dev.template | 8 ++++++++ .env.prod.template | 8 ++++++++ docker-compose.yml | 34 ++++++++++++++++++++++++++++++++++ 3 files changed, 50 insertions(+) diff --git a/.env.dev.template b/.env.dev.template index 7553a7c..e458e0c 100644 --- a/.env.dev.template +++ b/.env.dev.template @@ -1,3 +1,11 @@ +MONGO_INITDB_ROOT_USERNAME= +MONGO_INITDB_ROOT_PASSWORD= +ME_CONFIG_MONGODB_ADMINUSERNAME= +ME_CONFIG_MONGODB_ADMINPASSWORD= +ME_CONFIG_MONGODB_URL= +ME_CONFIG_BASICAUTH= +ME_CONFIG_BASICAUTH_USERNAME= +ME_CONFIG_BASICAUTH_PASSWORD= MONGODB_URI= EMAIL_USER= EMAIL_PASS= diff --git a/.env.prod.template b/.env.prod.template index 7553a7c..e458e0c 100644 --- a/.env.prod.template +++ b/.env.prod.template @@ -1,3 +1,11 @@ +MONGO_INITDB_ROOT_USERNAME= +MONGO_INITDB_ROOT_PASSWORD= +ME_CONFIG_MONGODB_ADMINUSERNAME= +ME_CONFIG_MONGODB_ADMINPASSWORD= +ME_CONFIG_MONGODB_URL= +ME_CONFIG_BASICAUTH= +ME_CONFIG_BASICAUTH_USERNAME= +ME_CONFIG_BASICAUTH_PASSWORD= MONGODB_URI= EMAIL_USER= EMAIL_PASS= diff --git a/docker-compose.yml b/docker-compose.yml index 9e45d5e..3d7007b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -12,7 +12,41 @@ services: - "3000:3000" networks: - arandu-network + + mongo: + image: mongo + restart: always + env_file: + - .env + environment: + MONGO_INITDB_ROOT_USERNAME: ${MONGO_INITDB_ROOT_USERNAME} + MONGO_INITDB_ROOT_PASSWORD: ${MONGO_INITDB_ROOT_PASSWORD} + ports: + - "27017:27017" + command: ["--quiet"] + networks: + - arandu-network + + mongo-express: + image: mongo-express + restart: always + env_file: + - .env + environment: + ME_CONFIG_MONGODB_ADMINUSERNAME: ${ME_CONFIG_MONGODB_ADMINUSERNAME} + ME_CONFIG_MONGODB_ADMINPASSWORD: ${ME_CONFIG_MONGODB_ADMINPASSWORD} + ME_CONFIG_MONGODB_URL: ${MONGODB_URI} + ME_CONFIG_BASICAUTH: ${ME_CONFIG_BASICAUTH} + ME_CONFIG_BASICAUTH_USERNAME: ${ME_CONFIG_BASICAUTH_USERNAME} + ME_CONFIG_BASICAUTH_PASSWORD: ${ME_CONFIG_BASICAUTH_PASSWORD} + ports: + - "8081:8081" + networks: + - arandu-network + depends_on: + - mongo networks: arandu-network: + name: arandu-network driver: bridge \ No newline at end of file From 2b6c8e80581b993f9c2f6c5388fc3da6e974bde0 Mon Sep 17 00:00:00 2001 From: gabrielm2q <mariano.gabriel2q@gmail.com> Date: Thu, 5 Dec 2024 23:20:34 -0300 Subject: [PATCH 4/7] fix(fga-eps-mds/2024.2-ARANDU-DOC#42): quickfix on dockerfile env --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 4755fc6..55f1fcb 100644 --- a/Dockerfile +++ b/Dockerfile @@ -22,7 +22,7 @@ RUN npm run build FROM base AS runner WORKDIR /app -ENV NODE_ENV=production +ENV NODE_ENV=development RUN addgroup -g 1001 -S nodejs \ && adduser -S arandu -u 1001 From a5c007c23bbcc4358e9c87b9ca280889e380f24e Mon Sep 17 00:00:00 2001 From: gabrielm2q <mariano.gabriel2q@gmail.com> Date: Sat, 7 Dec 2024 12:27:46 -0300 Subject: [PATCH 5/7] fix(fga-eps-mds/2024.2-ARANDU-DOC#42): quickfix on network at docker compose file --- docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index 3d7007b..989235e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -49,4 +49,4 @@ services: networks: arandu-network: name: arandu-network - driver: bridge \ No newline at end of file + external: true From c187ce7475b8097f249f7c9de596f27b261f5069 Mon Sep 17 00:00:00 2001 From: gabrielm2q <mariano.gabriel2q@gmail.com> Date: Sat, 7 Dec 2024 23:38:38 -0300 Subject: [PATCH 6/7] fix(fga-eps-mds/2024.2-ARANDU-DOC#42): fix on production dockerfile Co-authored-by: dartmol203 <andre.correa.silva203@gmail.com> --- Dockerfile.prod | 25 +++++++++---------------- Makefile | 8 ++++---- package.json | 2 +- 3 files changed, 14 insertions(+), 21 deletions(-) diff --git a/Dockerfile.prod b/Dockerfile.prod index c4f3a1e..592db50 100644 --- a/Dockerfile.prod +++ b/Dockerfile.prod @@ -1,7 +1,4 @@ -FROM node:22-alpine AS base - -FROM base AS deps -RUN apk add --no-cache libc6-compat +FROM node:22 AS base WORKDIR /app @@ -10,29 +7,25 @@ RUN \ if [ -f package-lock.json ]; then npm ci; \ fi +RUN npm install nodemon --save-dev + FROM base AS builder WORKDIR /app -COPY --from=deps /app/node_modules ./node_modules +RUN npm install COPY . . -COPY .env.prod.template .env +COPY .env .env RUN npm run build FROM base AS runner -WORKDIR /app - -ENV NODE_ENV production - -RUN addgroup -g 1001 -S nodejs \ - && adduser -S arandu -u 1001 -COPY --chown=arandu:nodejs --from=builder /app/dist ./dist -COPY --chown=arandu:nodejs --from=builder /app/node_modules ./node_modules +ENV NODE_ENV=production -USER arandu +COPY --from=builder /app/node_modules ./node_modules +COPY --from=builder /app/ ./ EXPOSE 3000 ENV PORT=3000 -CMD ["node", "dist/main.js"] \ No newline at end of file +CMD ["npm", "run", "start:prod"] \ No newline at end of file diff --git a/Makefile b/Makefile index 24082cf..208a30e 100644 --- a/Makefile +++ b/Makefile @@ -1,15 +1,15 @@ .PHONY: build build: - docker compose build + npm install && docker-compose build .PHONY: start start: - docker compose up + docker-compose up .PHONY: run run: - docker compose up --build + npm install & docker-compose up --build .PHONY: stop stop: - docker compose down \ No newline at end of file + docker-compose down \ No newline at end of file diff --git a/package.json b/package.json index 390e5e2..1b9a865 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "start": "nest start", "start:dev": "nest start --watch", "start:debug": "nest start --debug --watch", - "start:prod": "node dist/main", + "start:prod": "nest start --watch", "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix", "test": "jest --passWithNoTests --no-cache --runInBand", "test:all": "npm run test -- --coverage --config jest.config.ts", From 67cb55aa415045434ba73de82f926cb2ae3c653c Mon Sep 17 00:00:00 2001 From: gabrielm2q <mariano.gabriel2q@gmail.com> Date: Sun, 8 Dec 2024 03:33:38 -0300 Subject: [PATCH 7/7] fix(fga-eps-mds/2024.2-ARANDU-DOC#42): fix development dockerfile and makefile --- Dockerfile | 20 ++++++-------------- Makefile | 4 ++-- docker-compose.yml | 4 ++-- 3 files changed, 10 insertions(+), 18 deletions(-) diff --git a/Dockerfile b/Dockerfile index 55f1fcb..7dbb019 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,4 @@ -FROM node:22-alpine AS base - -FROM base AS deps -RUN apk add --no-cache libc6-compat +FROM node:22 AS base WORKDIR /app @@ -10,10 +7,11 @@ RUN \ if [ -f package-lock.json ]; then npm ci; \ fi +RUN npm install nodemon --save-dev FROM base AS builder WORKDIR /app -COPY --from=deps /app/node_modules ./node_modules +RUN npm install COPY . . COPY .env .env @@ -24,17 +22,11 @@ WORKDIR /app ENV NODE_ENV=development -RUN addgroup -g 1001 -S nodejs \ - && adduser -S arandu -u 1001 - -COPY --chown=arandu:nodejs --from=builder /app/dist ./dist -COPY --chown=arandu:nodejs --from=builder /app/node_modules ./node_modules -COPY --chown=arandu:nodejs --from=builder /app/.env ./.env - -USER arandu +COPY --from=builder /app/node_modules ./node_modules +COPY --from=builder /app/ ./ EXPOSE 3000 ENV PORT=3000 -CMD ["node", "dist/main.js"] \ No newline at end of file +CMD ["npm", "run", "start:dev"] \ No newline at end of file diff --git a/Makefile b/Makefile index 208a30e..b2ee1f7 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ .PHONY: build build: - npm install && docker-compose build + npm install && docker-compose build --no-cache .PHONY: start start: @@ -8,7 +8,7 @@ start: .PHONY: run run: - npm install & docker-compose up --build + npm install & docker-compose build --no-cache && docker-compose up .PHONY: stop stop: diff --git a/docker-compose.yml b/docker-compose.yml index 989235e..b20bcdf 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2,12 +2,12 @@ services: user-api: container_name: user-api restart: on-failure + env_file: + - .env build: context: . dockerfile: Dockerfile image: user-api - env_file: - - .env ports: - "3000:3000" networks: