8.0 KiB
🚀 РАДИКАЛЬНОЕ РЕШЕНИЕ: Обычная установка с отключением компиляции
❌ Все предыдущие попытки не сработали
Попытка #1: --ignore-scripts
Результат: Быстро (3-5 минут), но нет движков Prisma ❌
Попытка #2: Prisma first → generate → install
Результат: yarn install стирает генерацию ❌
Попытка #3: install → Prisma → generate
Результат: TypeScript не видит экспорты ❌
✅ РАДИКАЛЬНОЕ РЕШЕНИЕ
Концепция
Отказываемся от --ignore-scripts полностью!
Вместо этого:
- Устанавливаем ВСЕ зависимости (включая Prisma) С postinstall
- Используем переменные окружения для отключения компиляции нативных модулей
- Позволяем 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 видит все типы
📖 История попыток
- v1: --ignore-scripts → нет движков Prisma
- v2: Prisma first → стирается генерация
- v3: install → Prisma → TypeScript не видит экспорты
- v4: ENV + обычный install → проверяем сейчас
Репозиторий: git.mscsrv.ru/sa/global_it24_landing.git
Коммит: "РАДИКАЛЬНО: обычный yarn install с агрессивными ENV..."
🎯 Если это не сработает
Тогда единственный вариант:
- Удалить проблемные пакеты из
package.json(canvas, sharp, и т.д.) - Или собирать на более мощном сервере с большим RAM
Но я верю, что это сработает! 🤞
Запускайте и отправляйте результат!