2025-09-16 13:47:15 +00:00
|
|
|
# Menggunakan image Node.js yang lebih ringan
|
|
|
|
|
FROM node:23.5.0-alpine
|
|
|
|
|
|
|
|
|
|
# Mengatur port
|
|
|
|
|
ENV PORT 3000
|
|
|
|
|
|
2026-01-19 10:56:19 +00:00
|
|
|
# Build arguments untuk environment variables (build-time)
|
|
|
|
|
# Bisa di-override saat docker build dengan --build-arg
|
|
|
|
|
ARG NEXT_PUBLIC_API_URL
|
|
|
|
|
ARG NEXT_PUBLIC_SITE_URL
|
|
|
|
|
|
|
|
|
|
# Set sebagai environment variables untuk build
|
|
|
|
|
# Next.js membaca NEXT_PUBLIC_* variables saat BUILD TIME
|
|
|
|
|
ENV NEXT_PUBLIC_API_URL=${NEXT_PUBLIC_API_URL}
|
|
|
|
|
ENV NEXT_PUBLIC_SITE_URL=${NEXT_PUBLIC_SITE_URL}
|
|
|
|
|
|
2025-09-16 13:47:15 +00:00
|
|
|
# Install pnpm secara global
|
|
|
|
|
RUN npm install -g pnpm
|
|
|
|
|
|
|
|
|
|
# Membuat direktori aplikasi dan mengatur sebagai working directory
|
|
|
|
|
WORKDIR /usr/src/app
|
|
|
|
|
|
|
|
|
|
# Menyalin file penting terlebih dahulu untuk caching
|
|
|
|
|
COPY package.json ./
|
|
|
|
|
|
|
|
|
|
# Menyalin direktori ckeditor5 jika diperlukan
|
|
|
|
|
COPY vendor/ckeditor5 ./vendor/ckeditor5
|
|
|
|
|
|
|
|
|
|
# Install dependencies
|
|
|
|
|
RUN pnpm install
|
|
|
|
|
# RUN pnpm install --frozen-lockfile
|
|
|
|
|
|
2026-01-19 10:56:19 +00:00
|
|
|
# Menyalin source code aplikasi (termasuk .env jika ada)
|
|
|
|
|
# PENTING: Next.js akan membaca file .env otomatis jika ada
|
|
|
|
|
# Tapi jika ARG di-set, ARG akan override nilai dari .env
|
2025-09-16 13:47:15 +00:00
|
|
|
COPY . .
|
|
|
|
|
|
|
|
|
|
# Build aplikasi
|
2026-01-19 10:56:19 +00:00
|
|
|
# Next.js membaca NEXT_PUBLIC_* dari:
|
|
|
|
|
# 1. Environment variables (ENV) - prioritas tertinggi
|
|
|
|
|
# 2. File .env - jika ENV tidak di-set
|
2025-09-16 13:47:15 +00:00
|
|
|
RUN NODE_OPTIONS="--max-old-space-size=4096" pnpm next build
|
|
|
|
|
|
|
|
|
|
# Expose port untuk server
|
|
|
|
|
EXPOSE 3000
|
|
|
|
|
|
|
|
|
|
# Perintah untuk menjalankan aplikasi
|
|
|
|
|
CMD ["pnpm", "run", "start"]
|