66 lines
2.4 KiB
Docker
66 lines
2.4 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
|
||
# Отключаем опциональные зависимости (которые могут компилироваться долго)
|
||
ENV SKIP_OPTIONALS=1
|
||
# Используем предсобранные бинарники для native modules
|
||
ENV npm_config_build_from_source=false
|
||
|
||
# Устанавливаем ВСЕ зависимости (Prisma постinstall запустится автоматически)
|
||
# Используем более короткий timeout и retry
|
||
RUN yarn install --network-timeout 120000 --network-concurrency 5
|
||
|
||
# Копируем остальные файлы
|
||
COPY nextjs_space/ ./
|
||
|
||
# Проверяем, что Prisma Client был сгенерирован
|
||
RUN test -d node_modules/.prisma/client || (echo "ERROR: Prisma Client not generated!" && exit 1)
|
||
|
||
# Переменные окружения для сборки
|
||
ARG NEXT_PUBLIC_SITE_URL
|
||
ENV NEXT_PUBLIC_SITE_URL=${NEXT_PUBLIC_SITE_URL:-http://localhost:3000}
|
||
ENV NODE_ENV=production
|
||
|
||
# Собираем приложение
|
||
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"]
|