Files
global_it24_landing/RADICAL_FIX.md

8.0 KiB
Raw Permalink Blame History

🚀 РАДИКАЛЬНОЕ РЕШЕНИЕ: Обычная установка с отключением компиляции

Все предыдущие попытки не сработали

Попытка #1: --ignore-scripts

Результат: Быстро (3-5 минут), но нет движков Prisma

Попытка #2: Prisma first → generate → install

Результат: yarn install стирает генерацию

Попытка #3: install → Prisma → generate

Результат: TypeScript не видит экспорты


РАДИКАЛЬНОЕ РЕШЕНИЕ

Концепция

Отказываемся от --ignore-scripts полностью!

Вместо этого:

  1. Устанавливаем ВСЕ зависимости (включая Prisma) С postinstall
  2. Используем переменные окружения для отключения компиляции нативных модулей
  3. Позволяем 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 npm_config_build_from_source=false
ENV PYTHON=/usr/bin/python3
ENV npm_config_optional=false
ENV SHARP_IGNORE_GLOBAL_LIBVIPS=1
ENV CANVAS_SKIP_INSTALL=1

# Копируем файлы (нужны для Prisma)
COPY nextjs_space/ ./

# Устанавливаем ВСЕ (включая Prisma) с postinstall
RUN yarn install --network-timeout 300000 --network-concurrency 4

# Генерируем Prisma Client (если postinstall не сработал)
RUN npx prisma generate --schema=./prisma/schema.prisma

🎯 Почему это должно сработать

Переменные окружения блокируют компиляцию

Переменная Что отключает Экономия времени
SKIP_SASS_BINARY_DOWNLOAD_FOR_CI Компиляцию Sass ~5-10 минут
CYPRESS_INSTALL_BINARY=0 Установку Cypress ~2-3 минуты
PUPPETEER_SKIP_CHROMIUM_DOWNLOAD Скачивание Chrome ~1-2 минуты
npm_config_build_from_source=false GYP компиляцию ~10-20 минут
SHARP_IGNORE_GLOBAL_LIBVIPS=1 Компиляцию Sharp ~3-5 минут
CANVAS_SKIP_INSTALL=1 Компиляцию Canvas ~5-10 минут

Итого экономия: ~30-50 минут

Prisma работает нормально

  • postinstall скрипт Prisma запускается (скачиваются движки)
  • Prisma Client генерируется автоматически
  • TypeScript видит все экспорты
  • Сборка Next.js проходит без ошибок

⏱️ Ожидаемое время сборки

[00:00-08:00]  yarn install (с postinstall, но без компиляции)
[08:00-08:30]  prisma generate (если не запустился автоматически)
[08:30-13:00]  yarn build
[13:00-13:30]  Финализация образа

ИТОГО: 13-15 минут

⚠️ Может быть дольше первого раза (~20 минут), но не 16+ часов!


🚀 Применение

1. Получите обновление

cd /home/ubuntu/global_it24_landing
git pull origin master

Проверьте версию:

git log --oneline -1

Должно показать:
"РАДИКАЛЬНО: обычный yarn install с агрессивными ENV..."

2. Очистите кэш Docker

docker system prune -a

⚠️ КРИТИЧНО! Нажмите y для подтверждения.

3. Запустите сборку

./deploy-simple.sh

4. Мониторинг

Следите за процессом:

watch -n 2 "docker ps -a | grep global_it24"

📊 Что ожидать в логах

ШАГ 1: Установка зависимостей

=> [ 6/11] RUN yarn install --network-timeout 300000 ...
[1/5] 🔍  Resolving packages...
[2/5] 🚚  Fetching packages...
[3/5] 🔗  Linking dependencies...
[4/5] 🔨  Building fresh packages...  # ← Может зависнуть здесь

⚠️ Если зависнет на "Building fresh packages" дольше 5 минут:

  • Переменные окружения не сработали
  • Какой-то пакет все равно пытается компилироваться

Решение: Прервите (Ctrl+C) и сообщите мне.

ШАГ 2: Генерация Prisma

=> [ 7/11] RUN npx prisma generate ...
✔ Generated Prisma Client (v6.7.0)
✅ Prisma Client сгенерирован

ШАГ 3: Сборка Next.js

=> [ 8/11] RUN yarn build
✓ Compiled successfully
✓ Checking validity of types ...  # ← НЕ должно быть ошибок Prisma!
✓ Collecting page data ...
✓ Generating static pages

Проверка после сборки

# Статус
./status.sh

# Логи
./logs.sh

# HTTP
curl http://localhost:3000

🆚 Сравнение подходов

Подход Время Prisma TypeScript Статус
Обычный install 16+ часов Слишком долго
--ignore-scripts 3-5 минут Нет движков
Prisma first 8-12 минут Стирается генерация
install → Prisma 8-12 минут TypeScript не видит
ENV + install 13-15 минут Должно работать!

Troubleshooting

Зависает на "Building fresh packages" > 5 минут

# Прервите сборку
Ctrl+C

# Проверьте какой пакет компилируется
docker logs $(docker ps -a | grep global_it24_web | awk '{print $1}') 2>&1 | grep "Building"

Пришлите мне вывод!

Ошибка "Prisma Client not found"

# Проверьте что schema.prisma на месте
ls -la /home/ubuntu/global_it24_landing/nextjs_space/prisma/schema.prisma

Ошибка на TypeScript

Пришлите полный вывод шага yarn build.


🎯 Ключевая идея

Не боремся с postinstall скриптами!

Вместо этого:

  • Позволяем им запускаться
  • Но блокируем компиляцию через ENV
  • Prisma работает (его postinstall только скачивает файлы, не компилирует)
  • TypeScript видит все типы

📖 История попыток

  1. v1: --ignore-scripts → нет движков Prisma
  2. v2: Prisma first → стирается генерация
  3. v3: install → Prisma → TypeScript не видит экспорты
  4. v4: ENV + обычный installпроверяем сейчас

Репозиторий: git.mscsrv.ru/sa/global_it24_landing.git
Коммит: "РАДИКАЛЬНО: обычный yarn install с агрессивными ENV..."


🎯 Если это не сработает

Тогда единственный вариант:

  • Удалить проблемные пакеты из package.json (canvas, sharp, и т.д.)
  • Или собирать на более мощном сервере с большим RAM

Но я верю, что это сработает! 🤞

Запускайте и отправляйте результат!