259 lines
8.0 KiB
Markdown
259 lines
8.0 KiB
Markdown
# 🚀 РАДИКАЛЬНОЕ РЕШЕНИЕ: Обычная установка с отключением компиляции
|
||
|
||
## ❌ Все предыдущие попытки не сработали
|
||
|
||
### Попытка #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
|
||
|
||
**Но я верю, что это сработает!** 🤞
|
||
|
||
**Запускайте и отправляйте результат!**
|