Project

General

Profile

Improvement #172

Updated by Chakkaphon Noinang (Jay) 25 days ago

* [x] 3000 = main (new) พี่ไปร์ท 
 * [ ] 3001 = masterdata 
 * [ ] 5001 = masterdata 
 * [ ] 3002 = jobpost 
 * [ ] 5002 = jobpost 
 * [ ] 3003 = candidates 
 * [ ] 4003 = candidates 
 * [ ] 5003 = candidates 
 * [ ] 3004 = users 
 * [ ] 5004 = users 
 * [ ] 5005 = document 
 * [ ] 4006 = jobapplication 
 * [ ] 5006 = jobapplication 
 * [ ] 4007 = batch 
 * [ ] 5007 = batch 
 * [ ] 5008 = candidate-consumer 
 * [ ] 5009 = complete-candidate-consumer 
 * [ ] 5010 = recruit-dlq-consumer 
 * [ ] 5011 = job-appointment 
 * [ ] 5012 = notification 







 ================== 

 ### Dockerfile please backup name (Dockerfile.backup) 


 ### Dockerfile 

 ``` 
 # ---------------------------------------------------- 
 # Stage 1: Build the Application 
 # ---------------------------------------------------- 
 FROM node:24.11.0-alpine3.22 AS builder 

 # Install build dependencies in a single layer 
 RUN apk update && \ 
     apk add --no-cache \ 
     tzdata \ 
     busybox-extras \ 
     openssl \ 
     libssl3 \ 
     libc6-compat && \ 
     cp /usr/share/zoneinfo/Asia/Bangkok /etc/localtime && \ 
     rm -rf /var/cache/apk/* 

 WORKDIR /app 

 # Copy package files for dependency installation 
 COPY package*.json ./ 

 # Install all dependencies (including devDependencies for build) 
 RUN npm install && \ 
     npm cache clean --force 

 # Copy source code 
 COPY . . 

 # Build application 
 RUN npm run build 
 # ---------------------------------------------------- 
 # Stage 2: Production Image (Minimal & Secure) 
 # ---------------------------------------------------- 
 FROM node:24.11.0-alpine3.22 AS production 

 # Install runtime dependencies 
 RUN apk update && \ 
     apk add --no-cache \ 
     tzdata \ 
     openssl \ 
     libssl3 \ 
     libc6-compat \ 
     dumb-init && \ 
     cp /usr/share/zoneinfo/Asia/Bangkok /etc/localtime && \ 
     rm -rf /var/cache/apk/* 

 WORKDIR /app 

 # Set NODE_ENV 
 ARG NODE_ENV=prod 
 ENV NODE_ENV=${NODE_ENV} 

 # Copy package files 
 COPY --from=builder /app/package*.json ./ 

 # Install production dependencies only 
 RUN npm install --omit=dev && \ 
     npm cache clean --force 

 # Copy compiled application 
 COPY --from=builder /app/dist/src ./dist 
 COPY --from=builder /app/dist/config ./config 
 COPY --from=builder /app/env ./env 

 # Set ownership 
 RUN chown -R node:node /app 

 # Use non-root user 
 USER node 

 # Set port configuration 
 ARG APPLICATION_PORT=80 
 ENV PORT=${APPLICATION_PORT} 

 EXPOSE ${APPLICATION_PORT} 

 # Health check 
 HEALTHCHECK --interval=30s --timeout=3s --start-period=40s --retries=3 \ 
     CMD node -e "require('http').get('http://localhost:' + process.env.PORT + '/health', (r) => {process.exit(r.statusCode === 200 ? 0 : 1)})" 

 # Use dumb-init for proper signal handling 
 CMD ["dumb-init", "node", "dist/main"] 

 ``` 


 package.json 

 เพิ่ม 
 ``` 
 "start:pre": "cross-env NODE_ENV=pre nest start" 
 ``` 


 config/env.ts 
 แก้เป็น 

 ``` 
 export enum ENV { 
   DEV = "dev", 
   UAT = "uat", 
   SIT = "sit", 
   PROD = "prod", 
   PRE = "pre", 
 } 
 ``` 

 env.dev 
 ลบ prefix ให้เป็นตามในตัวอย่าง 
 ``` 
 SYSTEM_JOB_POST_BASE_URL=http://localhost:5002/v1 
 ```

Back