FROM node:20-alpine AS build WORKDIR /app COPY package.json package-lock.json* ./ RUN npm install COPY . . # NEXT_PUBLIC_* переменные встраиваются в клиентский бандл на этапе сборки. ARG NEXT_PUBLIC_SITE_URL=https://top-sysops.ru ARG NEXT_PUBLIC_CHAT_PROVIDER=none ARG NEXT_PUBLIC_TOPTICKET_WIDGET_URL= ARG NEXT_PUBLIC_TOPTICKET_WIDGET_KEY= ARG NEXT_PUBLIC_CHATWOOT_BASE_URL= ARG NEXT_PUBLIC_CHATWOOT_WEBSITE_TOKEN= ENV NEXT_PUBLIC_SITE_URL=$NEXT_PUBLIC_SITE_URL \ NEXT_PUBLIC_CHAT_PROVIDER=$NEXT_PUBLIC_CHAT_PROVIDER \ NEXT_PUBLIC_TOPTICKET_WIDGET_URL=$NEXT_PUBLIC_TOPTICKET_WIDGET_URL \ NEXT_PUBLIC_TOPTICKET_WIDGET_KEY=$NEXT_PUBLIC_TOPTICKET_WIDGET_KEY \ NEXT_PUBLIC_CHATWOOT_BASE_URL=$NEXT_PUBLIC_CHATWOOT_BASE_URL \ NEXT_PUBLIC_CHATWOOT_WEBSITE_TOKEN=$NEXT_PUBLIC_CHATWOOT_WEBSITE_TOKEN # BACKEND_INTERNAL_URL нужен и на этапе сборки (генерация sitemap исполняется # как серверный код) - но реальные данные для sitemap читаются уже в рантайме, # на сборку это не влияет, если бэкенд на этот момент недоступен. ENV NEXT_TELEMETRY_DISABLED=1 RUN npm run build FROM node:20-alpine AS run WORKDIR /app ENV NODE_ENV=production ENV NEXT_TELEMETRY_DISABLED=1 COPY --from=build /app/public ./public COPY --from=build /app/.next/standalone ./ COPY --from=build /app/.next/static ./.next/static EXPOSE 3000 CMD ["node", "server.js"]