34 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Docker
		
	
	
	
	
	
			
		
		
	
	
			34 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Docker
		
	
	
	
	
	
| FROM node:20-alpine
 | |
| # สำหรับอ่านค่า .env ที่วางไว้ระดับ compose (ไม่ copy เข้า image)
 | |
| ENV NODE_ENV=production
 | |
| ENV TZ=Asia/Bangkok
 | |
| 
 | |
| WORKDIR /app
 | |
| 
 | |
| # สร้าง user ไม่ใช่ root (ปลอดภัยขึ้น)
 | |
| RUN addgroup -S app && adduser -S app -G app
 | |
| 
 | |
| # runtime tools + build deps ชั่วคราว (สำหรับ bcrypt ฯลฯ)
 | |
| RUN apk add --no-cache curl \
 | |
|  && apk add --no-cache --virtual build-deps python3 make g++
 | |
| # ติดตั้ง deps ของ npm (เช่น bcrypt ต้องมี python3/make/g++)
 | |
| # ใช้ virtual package ชื่อ build-deps (ไม่ต้องมีจุด)
 | |
| COPY package.json package-lock.json* ./
 | |
| RUN (npm ci --omit=dev || npm install --omit=dev)
 | |
| 
 | |
| # คัดลอกโค้ด + ตั้ง owner/สิทธิ์
 | |
| COPY --chown=app:app src ./src
 | |
| # COPY src ./src
 | |
| # COPY app ./app
 | |
| # เตรียม logs + สิทธิ์อ่านไฟล์ใน /app
 | |
| RUN mkdir -p /app/logs \
 | |
|  && chown -R app:app /app/logs \
 | |
|  && chmod -R a+rX /app
 | |
| 
 | |
| # ลบ build deps ลดขนาดอิมเมจ
 | |
| RUN apk del --no-network build-deps
 | |
| 
 | |
| EXPOSE 3001
 | |
| USER app
 | |
| CMD ["node", "src/index.js"]
 | |
| # backend/Dockerfile  (Node.js ESM) |