60 lines
1.9 KiB
Docker
60 lines
1.9 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 ./
|
||
|
||
# Оптимизация: пропускаем ненужные бинарники
|
||
ENV SKIP_SASS_BINARY_DOWNLOAD_FOR_CI=true
|
||
ENV CYPRESS_INSTALL_BINARY=0
|
||
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
|
||
ENV NEXT_TELEMETRY_DISABLED=1
|
||
|
||
# Устанавливаем ВСЕ зависимости (нужны для сборки)
|
||
# --ignore-scripts: пропускаем postinstall скрипты (компиляцию нативных модулей)
|
||
# Это ускоряет установку в 10-20 раз!
|
||
RUN yarn install --network-timeout 300000 --ignore-scripts
|
||
|
||
# Копируем остальные файлы
|
||
COPY nextjs_space/ ./
|
||
|
||
# Генерируем Prisma Client
|
||
RUN npx prisma generate
|
||
|
||
# Переменные окружения для сборки
|
||
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 yarn install --production --ignore-scripts --network-timeout 300000
|
||
|
||
# Создаем пользователя для безопасности
|
||
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"]
|