Files
global_it24_landing/Dockerfile

91 lines
3.2 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.
# Многоступенчатая сборка для оптимизации размера образа
# Стадия 1: Установка ТОЛЬКО production зависимостей (быстро)
FROM node:18-alpine AS prod-deps
RUN apk add --no-cache libc6-compat openssl
WORKDIR /app
COPY nextjs_space/package.json nextjs_space/yarn.lock ./
ENV NODE_ENV=production
ENV SKIP_SASS_BINARY_DOWNLOAD_FOR_CI=true
ENV CYPRESS_INSTALL_BINARY=0
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
# Только production зависимости - БЫСТРО!
# --ignore-scripts: пропускаем компиляцию нативных модулей
RUN yarn install --production --network-timeout 300000 --ignore-scripts
# Стадия 2: Установка ВСЕХ зависимостей для сборки (медленно, но с кешем)
FROM node:18-alpine AS deps
RUN apk add --no-cache libc6-compat openssl python3 make g++
WORKDIR /app
COPY nextjs_space/package.json nextjs_space/yarn.lock ./
ENV NODE_ENV=development
ENV SKIP_SASS_BINARY_DOWNLOAD_FOR_CI=true
ENV CYPRESS_INSTALL_BINARY=0
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
# Все зависимости для сборки (с кешем из предыдущей стадии)
# --ignore-scripts: пропускаем компиляцию нативных модулей
RUN yarn install --network-timeout 300000 --ignore-scripts
# Стадия 3: Сборка приложения
FROM node:18-alpine AS builder
RUN apk add --no-cache libc6-compat openssl
WORKDIR /app
# Копируем зависимости из предыдущей стадии
COPY --from=deps /app/node_modules ./node_modules
COPY nextjs_space/ ./
# Используем production конфигурацию
RUN if [ -f next.config.prod.js ]; then mv next.config.prod.js next.config.js; fi
# Генерируем Prisma Client
RUN npx prisma generate
# Создаем .env файл для сборки
ARG NEXT_PUBLIC_SITE_URL
ENV NEXT_PUBLIC_SITE_URL=${NEXT_PUBLIC_SITE_URL:-http://localhost:3000}
ENV NODE_ENV=production
ENV NEXT_TELEMETRY_DISABLED=1
# Собираем приложение
RUN yarn build
# Стадия 4: Production образ (runtime)
FROM node:18-alpine AS runner
WORKDIR /app
# Устанавливаем необходимые пакеты
RUN apk add --no-cache openssl libc6-compat
ENV NODE_ENV=production
ENV NEXT_TELEMETRY_DISABLED=1
# Создаем пользователя для безопасности
RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 nextjs
# Копируем необходимые файлы из builder
COPY --from=builder /app/public ./public
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
# Копируем Prisma схему и клиент
COPY --from=builder --chown=nextjs:nodejs /app/node_modules/.prisma ./node_modules/.prisma
COPY --from=builder --chown=nextjs:nodejs /app/node_modules/@prisma ./node_modules/@prisma
COPY --from=builder --chown=nextjs:nodejs /app/prisma ./prisma
USER nextjs
EXPOSE 3000
ENV PORT=3000
ENV HOSTNAME="0.0.0.0"
# Запускаем приложение
CMD ["node", "server.js"]