uchill/front_material/Dockerfile

98 lines
2.6 KiB
Docker
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Multi-stage build для оптимизации размера образа
# Development stage
FROM node:20-alpine AS development
WORKDIR /app
# Аргументы сборки для Next.js (должны быть доступны во время сборки)
ARG NEXT_PUBLIC_API_URL
ARG NEXT_PUBLIC_WS_URL
ARG NEXT_PUBLIC_LIVEKIT_URL
ENV NEXT_PUBLIC_API_URL=$NEXT_PUBLIC_API_URL
ENV NEXT_PUBLIC_WS_URL=$NEXT_PUBLIC_WS_URL
ENV NEXT_PUBLIC_LIVEKIT_URL=$NEXT_PUBLIC_LIVEKIT_URL
# Копируем package files
COPY package*.json ./
# Устанавливаем зависимости
RUN npm install
# Копируем остальные файлы
COPY . .
# Открываем порт
EXPOSE 3000
# Запускаем dev server с Turbopack
CMD ["npm", "run", "dev"]
# Production dependencies stage
FROM node:20-alpine AS production-deps
WORKDIR /app
# Копируем package files
COPY package*.json ./
# Устанавливаем только production зависимости
RUN npm ci --only=production && npm cache clean --force
# Production build stage
FROM node:20-alpine AS production-build
WORKDIR /app
# Аргументы сборки для Next.js
ARG NEXT_PUBLIC_API_URL
ARG NEXT_PUBLIC_WS_URL
ARG NEXT_PUBLIC_LIVEKIT_URL
ENV NEXT_PUBLIC_API_URL=$NEXT_PUBLIC_API_URL
ENV NEXT_PUBLIC_WS_URL=$NEXT_PUBLIC_WS_URL
ENV NEXT_PUBLIC_LIVEKIT_URL=$NEXT_PUBLIC_LIVEKIT_URL
# Копируем package files
COPY package*.json ./
# Устанавливаем все зависимости для сборки
RUN npm ci
# Копируем исходный код
COPY . .
# Папка public может отсутствовать — Next.js работает и без неё
RUN mkdir -p public
# Собираем приложение с оптимизацией
ENV NODE_ENV=production
RUN npm run build
# Production stage
FROM node:20-alpine AS production
WORKDIR /app
# Копируем собранное приложение (standalone mode)
COPY --from=production-build /app/.next/standalone ./
COPY --from=production-build /app/.next/static ./.next/static
COPY --from=production-build /app/public ./public
# Создаем непривилегированного пользователя
RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 nextjs
RUN chown -R nextjs:nodejs /app
USER nextjs
# Открываем порт
EXPOSE 3000
ENV NODE_ENV=production
ENV PORT=3000
ENV HOSTNAME="0.0.0.0"
# Запускаем production server
CMD ["node", "server.js"]