Files
protekauto-cms/Dockerfile.optimized

108 lines
2.5 KiB
Docker

# Multi-stage build для оптимизации
FROM node:18-alpine AS base
# Устанавливаем зависимости для всех этапов
RUN apk update && apk add --no-cache \
chromium \
nss \
freetype \
harfbuzz \
ca-certificates \
ttf-freefont \
ttf-dejavu \
ttf-liberation \
bash \
libc6-compat
# Устанавливаем переменные окружения для Puppeteer
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser
ENV NEXT_TELEMETRY_DISABLED=1
# Устанавливаем рабочую директорию
WORKDIR /app
# Этап установки зависимостей
FROM base AS deps
COPY package*.json ./
RUN npm ci
# Этап сборки
FROM base AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
# ARG переменные для сборки
ARG DATABASE_URL
ARG AWS_ACCESS_KEY_ID
ARG AWS_SECRET_ACCESS_KEY
ARG AWS_REGION
ARG AWS_BUCKET_NAME
ARG S3_ENDPOINT
ARG NEXTAUTH_SECRET
ARG JWT_SECRET
ARG NEXTAUTH_URL
ARG BEELINE_SMS_USER
ARG BEELINE_SMS_PASS
ARG BEELINE_SMS_SENDER
ARG LAXIMO_LOGIN
ARG LAXIMO_PASSWORD
ARG LAXIMO_DOC_LOGIN
ARG LAXIMO_DOC_PASSWORD
ARG AUTOEURO_API_KEY
ARG YOOKASSA_SHOP_ID
ARG YOOKASSA_SECRET_KEY
ARG PARTSAPI_CATEGORIES_KEY
ARG PARTSAPI_ARTICLES_KEY
ARG PARTSAPI_MEDIA_KEY
ARG PARTSAPI_URL
ARG PARTSINDEX_API_KEY
ARG YANDEX_MAPS_API_KEY
ARG YANDEX_DELIVERY_TOKEN
ARG YANDEX_GEOSUGGEST_API_KEY
ARG YANDEX_DELIVERY_SOURCE_STATION_ID
# ENV переменные для сборки
ENV NODE_ENV=production
ENV DOCKER_BUILD=true
# Генерируем Prisma Client
RUN npx prisma generate
# Собираем приложение
RUN npm run build
# Проверяем сборку
RUN echo "Checking build output..." && \
ls -la .next/ && \
ls -la .next/static/ && \
(ls -la .next/static/css/ || echo "No CSS directory found") && \
echo "Build check complete"
# Финальный этап
FROM base AS runner
WORKDIR /app
ENV NODE_ENV=production
ENV NEXT_TELEMETRY_DISABLED=1
# Создаем пользователя
RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 nextjs
# Копируем необходимые файлы
COPY --from=builder /app/public ./public
COPY --from=builder /app/.next/standalone ./
COPY --from=builder /app/.next/static ./.next/static
# Устанавливаем права доступа
RUN chown -R nextjs:nodejs /app
USER nextjs
EXPOSE 3000
ENV PORT=3000
ENV HOSTNAME="0.0.0.0"
CMD ["node", "server.js"]