FROM node:20-alpine AS builder WORKDIR /app # Копируем корень и конфигурации COPY package.json package-lock.json* tsconfig.json* ./ # Копируем исходники воркспэйсов COPY shared ./shared COPY frontend ./frontend # Увеличиваем таймауты и повторы для нестабильной сети RUN npm config set fetch-retry-mintimeout 20000 && \ npm config set fetch-retry-maxtimeout 120000 && \ npm config set fetch-timeout 300000 # Устанавливаем зависимости из корня RUN npm install # Сначала собираем shared (если там есть скрипт build) RUN npm run build -w @family-budget/shared || echo "No build script in shared, skipping..." # Теперь собираем frontend RUN npm run build -w @family-budget/frontend # Финальный образ — nginx для раздачи статики FROM nginx:alpine COPY --from=builder /app/frontend/dist /usr/share/nginx/html COPY frontend/nginx.conf /etc/nginx/conf.d/default.conf EXPOSE 80