# Простой Dockerfile для быстрой первой сборки # Без многоступенчатой сборки - быстрее, но больше размер FROM node:18-alpine # Устанавливаем необходимые пакеты RUN apk add --no-cache \ libc6-compat \ openssl WORKDIR /app # Копируем package.json и yarn.lock (если есть) COPY nextjs_space/package.json ./ COPY nextjs_space/yarn.lock* ./ # Копируем prisma схему (нужна для генерации клиента) COPY nextjs_space/prisma ./prisma # Оптимизация: АГРЕССИВНО отключаем ВСЕ компиляции ENV SKIP_SASS_BINARY_DOWNLOAD_FOR_CI=true ENV CYPRESS_INSTALL_BINARY=0 ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true ENV NEXT_TELEMETRY_DISABLED=1 # Отключаем GYP компиляцию ENV npm_config_build_from_source=false ENV PYTHON=/usr/bin/python3 ENV npm_config_optional=false # Отключаем компиляцию canvas, sharp и других ENV SHARP_IGNORE_GLOBAL_LIBVIPS=1 ENV CANVAS_SKIP_INSTALL=1 # Копируем остальные файлы (нужны для Prisma) COPY nextjs_space/ ./ # РАДИКАЛЬНО: Устанавливаем ВСЕ (включая Prisma) с postinstall, # но с агрессивной оптимизацией RUN yarn install --network-timeout 300000 --network-concurrency 4 && \ echo "✅ Зависимости установлены" # Генерируем Prisma Client (postinstall должен был запуститься автоматически) RUN npx prisma generate --schema=./prisma/schema.prisma && \ echo "✅ Prisma Client сгенерирован" # Проверяем что клиент действительно создался RUN echo "=== Проверка Prisma Client ===" && \ test -d node_modules/.prisma/client && \ test -f node_modules/.prisma/client/index.js && \ ls -la node_modules/.prisma/client/ | head -10 && \ echo "✅ Prisma Client файлы на месте" # ВАЖНО: Повторная генерация перед сборкой (для уверенности) RUN npx prisma generate --schema=./prisma/schema.prisma && \ echo "✅ Prisma Client пересоздан перед сборкой" # Переменные окружения для сборки ARG NEXT_PUBLIC_SITE_URL ENV NEXT_PUBLIC_SITE_URL=${NEXT_PUBLIC_SITE_URL:-http://localhost:3000} ENV NODE_ENV=production ENV NEXT_PHASE=phase-production-build # Собираем приложение RUN yarn build # В упрощенной версии оставляем все зависимости (включая dev) # Это быстрее и безопаснее для первой сборки # Создаем пользователя для безопасности RUN addgroup --system --gid 1001 nodejs && \ adduser --system --uid 1001 nextjs # Меняем владельца файлов RUN chown -R nextjs:nodejs /app USER nextjs EXPOSE 3000 ENV PORT=3000 ENV HOSTNAME="0.0.0.0" # Запускаем приложение CMD ["yarn", "start"]