83 lines
3.1 KiB
Docker
83 lines
3.1 KiB
Docker
# Простой Dockerfile для быстрой первой сборки
|
||
# Без многоступенчатой сборки - быстрее, но больше размер
|
||
|
||
FROM node:18-alpine
|
||
|
||
# Устанавливаем необходимые пакеты
|
||
RUN apk add --no-cache \
|
||
libc6-compat \
|
||
openssl
|
||
|
||
WORKDIR /app
|
||
|
||
# Копируем package.json и yarn.lock
|
||
COPY nextjs_space/package.json 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"]
|