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) |