6408984074
Deploy momo-erp / deploy (push) Successful in 49s
장바구니: - /m/items 우측 패널 lg: → md: 브레이크포인트 (768px+ 부터 노출) - 패널 테두리 강조 (emerald-300 2px) + 그림자 강화 - [담기] 클릭 시 우측 상단 토스트 피드백 (장바구니 추가됨) 이미지 업로드: - docker-compose.prod.yml 에 ./public/uploads:/app/public/uploads 볼륨 마운트 (컨테이너 재빌드 시에도 이미지 보존) - Dockerfile: /app/public/uploads/items 디렉토리 + nextjs 소유권 미리 설정 - scripts/deploy.sh: 호스트 public/uploads/items 디렉토리 보장 + 권한 777 - /api/m/items/upload-image: 저장 경로 fallback (3개 후보) + 명확한 에러 메시지
46 lines
1.1 KiB
Docker
46 lines
1.1 KiB
Docker
# Multi-stage build for FITO Next.js 풀스택 — production
|
|
# Stage 1: 의존성 설치
|
|
FROM node:20-alpine AS deps
|
|
WORKDIR /app
|
|
COPY package.json package-lock.json ./
|
|
RUN npm ci
|
|
|
|
# Stage 2: 빌드
|
|
FROM node:20-alpine AS builder
|
|
WORKDIR /app
|
|
COPY --from=deps /app/node_modules ./node_modules
|
|
COPY . .
|
|
|
|
# 환경변수 (빌드 타임에 주입되는 NEXT_PUBLIC_* 변수)
|
|
ENV NEXT_TELEMETRY_DISABLED=1
|
|
ENV NODE_ENV=production
|
|
|
|
RUN npm run build
|
|
|
|
# Stage 3: 런타임 (최소 이미지)
|
|
FROM node:20-alpine AS runner
|
|
WORKDIR /app
|
|
|
|
ENV NODE_ENV=production
|
|
ENV NEXT_TELEMETRY_DISABLED=1
|
|
ENV PORT=3000
|
|
ENV HOSTNAME=0.0.0.0
|
|
|
|
# 비루트 사용자 (보안)
|
|
RUN addgroup --system --gid 1001 nodejs && \
|
|
adduser --system --uid 1001 nextjs
|
|
|
|
# standalone 번들 복사
|
|
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
|
|
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
|
|
COPY --from=builder --chown=nextjs:nodejs /app/public ./public
|
|
|
|
# 파일 업로드 디렉토리
|
|
RUN mkdir -p /data_storage /app/public/uploads/items && \
|
|
chown -R nextjs:nodejs /data_storage /app/public/uploads
|
|
|
|
USER nextjs
|
|
EXPOSE 3000
|
|
|
|
CMD ["node", "server.js"]
|