61 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			61 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| # STAGE 1: build - สร้าง stage พื้นฐานสำหรับติดตั้ง dependencies ทั้งหมด
 | |
| # เราจะใช้ stage นี้เป็น cache ร่วมกันระหว่าง development และ production เพื่อความรวดเร็ว
 | |
| FROM node:20-alpine AS build
 | |
| # USER node
 | |
| WORKDIR /app
 | |
| # สร้าง user ไม่ใช่ root (ปลอดภัยขึ้น)
 | |
| # RUN addgroup -S dms && adduser -S dms -G dms
 | |
| 
 | |
| # runtime tools + build deps ชั่วคราว (สำหรับ bcrypt ฯลฯ)
 | |
| #RUN apk add --no-cache curl \
 | |
| # && apk add --no-cache --virtual build-deps python3 make g++
 | |
| RUN apk add --no-cache --virtual build-deps python3 make g++
 | |
| # COPY --chown=node:node package*.json package-lock.json* ./
 | |
| # COPY package*.json package-lock.json* ./
 | |
| # COPY package.json ./
 | |
| 
 | |
| # RUN (npm ci --omit=dev || npm install --omit=dev)
 | |
| # ติดตั้ง deps แบบ clean + ติดตั้ง dev tooling ที่จำเป็น
 | |
| # RUN npm ci --include=dev || npm install --include=dev && \
 | |
| #  npx --yes nodemon --version > /dev/null 2>&1 || npm i -D nodemon
 | |
| # RUN npm ci
 | |
| RUN npm install
 | |
| 
 | |
| # คัดลอกโค้ด + ตั้ง owner/สิทธิ์
 | |
| # COPY --chown=app:app src ./src
 | |
| # ไม่ COPY src เข้ามา — เราจะใช้ bind mount แทน
 | |
| # เพื่อ hot-reload จากโค้ดบน QNAP ได้ทันที
 | |
| 
 | |
| 
 | |
| # ลบ build deps ลดขนาดอิมเมจ
 | |
| # RUN apk del --no-network build-deps
 | |
| 
 | |
| # STAGE 2: development - สำหรับการพัฒนาใน local โดยเฉพาะ
 | |
| # stage นี้จะใช้ dependencies ทั้งหมดจาก 'base'
 | |
| FROM base AS development
 | |
| # (ต้องมี script "dev" ใน package.json, เช่น "dev": "nodemon src/index.js")
 | |
| CMD ["npm", "run", "dev"]
 | |
| 
 | |
| # ---------- Runtime stage ----------
 | |
| FROM node:20-alpine AS production
 | |
| WORKDIR /app
 | |
| 
 | |
| # สร้าง user และ group ที่ไม่ใช่ root สำหรับรันแอปพลิเคชัน
 | |
| RUN addgroup -S dms && adduser -S dms -G dms
 | |
| # COPY --from=build /app /app
 | |
| ENV NODE_ENV=production
 | |
| # คัดลอกไฟล์ package.json และ node_modules จาก stage 'base'
 | |
| COPY --from=build /app/package*.json ./
 | |
| COPY --from=build /app/node_modules ./node_modules
 | |
| 
 | |
| # ลบ devDependencies ที่ไม่จำเป็นสำหรับ production ออก
 | |
| RUN npm prune --production
 | |
| 
 | |
| # เปลี่ยนไปใช้ user ที่ไม่ใช่ root
 | |
| USER dms
 | |
| 
 | |
| EXPOSE 3001
 | |
| 
 | |
| CMD ["npm","start"]
 | |
| # backend/Dockerfile  (Node.js ESM)
 | 
