Files
global_it24_landing/RADICAL_FIX.md

259 lines
8.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🚀 РАДИКАЛЬНОЕ РЕШЕНИЕ: Обычная установка с отключением компиляции
## ❌ Все предыдущие попытки не сработали
### Попытка #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 установить движки и сгенерировать клиент автоматически
### Код
```dockerfile
# АГРЕССИВНО отключаем ВСЕ компиляции
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. Получите обновление
```bash
cd /home/ubuntu/global_it24_landing
git pull origin master
```
Проверьте версию:
```bash
git log --oneline -1
```
Должно показать:
`"РАДИКАЛЬНО: обычный yarn install с агрессивными ENV..."`
### 2. Очистите кэш Docker
```bash
docker system prune -a
```
⚠️ **КРИТИЧНО!** Нажмите `y` для подтверждения.
### 3. Запустите сборку
```bash
./deploy-simple.sh
```
### 4. Мониторинг
Следите за процессом:
```bash
watch -n 2 "docker ps -a | grep global_it24"
```
---
## 📊 Что ожидать в логах
### ШАГ 1: Установка зависимостей
```bash
=> [ 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
```bash
=> [ 7/11] RUN npx prisma generate ...
✔ Generated Prisma Client (v6.7.0)
✅ Prisma Client сгенерирован
```
### ШАГ 3: Сборка Next.js
```bash
=> [ 8/11] RUN yarn build
✓ Compiled successfully
✓ Checking validity of types ... # ← НЕ должно быть ошибок Prisma!
✓ Collecting page data ...
✓ Generating static pages
```
---
## ✅ Проверка после сборки
```bash
# Статус
./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 минут
```bash
# Прервите сборку
Ctrl+C
# Проверьте какой пакет компилируется
docker logs $(docker ps -a | grep global_it24_web | awk '{print $1}') 2>&1 | grep "Building"
```
Пришлите мне вывод!
### Ошибка "Prisma Client not found"
```bash
# Проверьте что 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
**Но я верю, что это сработает!** 🤞
**Запускайте и отправляйте результат!**