diff --git a/RADICAL_FIX.md b/RADICAL_FIX.md new file mode 100644 index 0000000..48dfe1c --- /dev/null +++ b/RADICAL_FIX.md @@ -0,0 +1,258 @@ +# 🚀 РАДИКАЛЬНОЕ РЕШЕНИЕ: Обычная установка с отключением компиляции + +## ❌ Все предыдущие попытки не сработали + +### Попытка #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 + +**Но я верю, что это сработает!** 🤞 + +**Запускайте и отправляйте результат!** diff --git a/SUMMARY.txt b/SUMMARY.txt index ae1c078..efb2f82 100644 --- a/SUMMARY.txt +++ b/SUMMARY.txt @@ -1,185 +1,130 @@ -═══════════════════════════════════════════════════════════════════ - ИСПРАВЛЕНИЕ СБОРКИ DOCKER: Два критичных бага -═══════════════════════════════════════════════════════════════════ - -ПРОБЛЕМА #1: Сборка зависала на 16+ часов -------------------------------------------- +============================================== +ИТОГОВАЯ СВОДКА: История оптимизации сборки +============================================== +ПРОБЛЕМА #1: Зависание на 16+ часов +------------------------------------ Симптомы: - • Сборка зависала на этапе [4/4] Building fresh packages... - • Происходило на двух разных серверах - • Процесс yarn install не завершался +- yarn install зависал на компиляции нативных модулей +- Процесс не завершался даже после 16 часов -Причина: - • Yarn компилировал нативные C++/Rust модули - • Процесс занимал вечность или зависал +Попытка исправления #1: --ignore-scripts +✅ Результат: Установка ускорилась до 3-5 минут +❌ Проблема: Нет бинарных движков для Prisma -Решение: - • Добавлен флаг --ignore-scripts к yarn install - • Пропускает компиляцию нативных модулей - • Prisma Client генерируется отдельной командой - -Результат: - • Было: 16+ часов - • Стало: 3-5 минут - • Ускорение в 100-200 раз! ⚡ - -ПРОБЛЕМА #2: Ошибка Prisma Client после исправления #1 --------------------------------------------------------- +ПРОБЛЕМА #2: Ошибка Prisma Client +---------------------------------- Симптомы: - • Type error: Module '@prisma/client' has no exported member 'PrismaClient' - • Ошибка появлялась при сборке Next.js (yarn build) +Type error: Module '"@prisma/client"' has no exported member 'PrismaClient' -Причина: - • После генерации Prisma Client мы переустанавливали зависимости - • Команда: yarn install --production --ignore-scripts - • Это затирало сгенерированный Prisma Client +Попытка исправления #2: Трехшаговая установка +Шаги: +1. yarn add prisma (с postinstall) +2. npx prisma generate +3. yarn install --ignore-scripts (для остальных пакетов) -Решение: - • Убрали переустановку production зависимостей - • Оставляем все зависимости в упрощенной версии - • Добавлена проверка генерации Prisma Client +❌ Результат: Шаг 3 переустанавливает @prisma/client из кэша, + стирая сгенерированные файлы -Результат: - • Prisma Client корректно генерируется и сохраняется - • TypeScript видит все экспорты из @prisma/client - • Сборка завершается успешно -ИТОГОВОЕ ВРЕМЯ СБОРКИ ----------------------- -┌─────────────────────────────┬─────────────┬──────────────┐ -│ ЭТАП │ БЫЛО │ СТАЛО │ -├─────────────────────────────┼─────────────┼──────────────┤ -│ Установка зависимостей │ 16+ часов │ 3-5 минут │ -│ Генерация Prisma Client │ N/A │ 1-2 минуты │ -│ Сборка Next.js │ N/A │ 3-5 минут │ -│ ИТОГО │ 16+ часов │ 8-12 минут │ -└─────────────────────────────┴─────────────┴──────────────┘ +Попытка исправления #3: Обратный порядок +Шаги: +1. yarn install --ignore-scripts (ВСЕ пакеты) +2. yarn add prisma (С postinstall) +3. npx prisma generate -ПРИМЕНЕНИЕ ИСПРАВЛЕНИЙ ------------------------ +❌ Результат: TypeScript все равно не видит экспорты -Шаг 1: Получите обновления - cd /home/ubuntu/global_it24_landing - git pull origin master -Шаг 2: Очистите Docker кеш (ВАЖНО!) - docker system prune -a - - ⚠️ Это удалит старые образы и кеш сборки - Нажмите 'y' для подтверждения +ФИНАЛЬНОЕ РЕШЕНИЕ #4: Обычная установка с ENV +---------------------------------------------- +Концепция: +- Отказываемся от --ignore-scripts +- Устанавливаем ВСЕ зависимости с postinstall +- Используем переменные окружения для отключения компиляции -Шаг 3: Запустите быструю сборку - ./deploy-simple.sh +Код: +```dockerfile +ENV SKIP_SASS_BINARY_DOWNLOAD_FOR_CI=true +ENV CYPRESS_INSTALL_BINARY=0 +ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true +ENV npm_config_build_from_source=false +ENV SHARP_IGNORE_GLOBAL_LIBVIPS=1 +ENV CANVAS_SKIP_INSTALL=1 -Шаг 4: Ждите 8-12 минут +RUN yarn install --network-timeout 300000 --network-concurrency 4 +RUN npx prisma generate --schema=./prisma/schema.prisma +``` -Шаг 5: Проверьте результат - ./status.sh - ./logs.sh - curl http://localhost:3000 +Ожидаемое время: 13-15 минут +Статус: ⏳ ТЕСТИРУЕТСЯ -ИЗМЕНЕННЫЕ ФАЙЛЫ ------------------ -1. Dockerfile - добавлен --ignore-scripts -2. Dockerfile.simple - добавлен --ignore-scripts - - убрана переустановка production deps - - добавлена проверка Prisma Client -3. QUICK_FIX.md - инструкция по исправлению зависания -4. FIX_PRISMA.md - инструкция по исправлению Prisma -5. SUMMARY.txt - этот файл -ПРОВЕРКА ПОСЛЕ СБОРКИ ----------------------- -✅ Контейнеры запущены: - docker ps - - Должны быть: - - global_it24_web (порт 3000) - - global_it24_db (PostgreSQL) +СРАВНЕНИЕ ВСЕХ ПОДХОДОВ +------------------------ +1. Обычный install → 16+ часов ⛔ Слишком долго +2. --ignore-scripts → 3-5 минут ⛔ Нет движков Prisma +3. Prisma first → 8-12 минут ⛔ Стирается генерация +4. install → Prisma → 8-12 минут ⛔ TypeScript не видит +5. ENV + обычный install → 13-15 минут ⏳ ТЕСТИРУЕМ -✅ Логи без ошибок: - ./logs.sh - - Не должно быть: - - PrismaClient errors - - Module not found errors -✅ Приложение отвечает: - curl http://localhost:3000 - - Должен вернуть: HTML код страницы +БЫСТРЫЙ СТАРТ +------------- +cd /home/ubuntu/global_it24_landing +git pull origin master +docker system prune -a # Нажмите 'y' +./deploy-simple.sh -ГАРАНТИЯ --------- -При соблюдении инструкций сборка завершится за 8-12 минут. -Минимальные требования: - • RAM: 2GB (проверьте: free -h) - • Диск: 5GB (проверьте: df -h) - • Интернет: стабильное соединение +ДОКУМЕНТАЦИЯ +------------ +BUILD_OPTIMIZATION.md - полная история оптимизации +RADICAL_FIX.md - текущее решение (v4) +FIX_PRISMA.md - детали проблемы Prisma +QUICK_FIX.md - первое исправление зависания +DATABASE.md - работа с PostgreSQL +README.deployment.md - инструкции по развертыванию -TROUBLESHOOTING ---------------- - -❌ Ошибка "network traefik-public not found" - Решение: - docker network create traefik-public - ./deploy-simple.sh - -❌ Ошибка "port 3000 already in use" - Решение: - docker compose down - ./deploy-simple.sh - -❌ Сборка все еще долгая (>20 минут) - Проверьте версию: - git log --oneline -1 - - Должно быть: "Исправлена генерация Prisma Client..." - - Если нет: - git fetch origin - git reset --hard origin/master - docker system prune -a - ./deploy-simple.sh - -❌ Ошибка Prisma Client not generated - Проверьте наличие schema.prisma: - ls -la /home/ubuntu/global_it24_landing/nextjs_space/prisma/ - - Должен быть файл: schema.prisma - -ЧТО ДАЛЬШЕ ----------- -1. Настройте .env файл (если еще не создан) - См. README.md для списка переменных - -2. Настройте Traefik (если используете) - См. traefik-config-example.yml - -3. Проверьте работу формы обратной связи - - Откройте сайт в браузере - - Заполните форму - - Проверьте уведомления (email/Telegram) - -ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ --------------------------- -• Подробно о исправлении зависания: QUICK_FIX.md -• Подробно о Prisma Client: FIX_PRISMA.md -• Обновление из Git: UPDATE_FROM_GIT.md -• Работа с БД: DATABASE.md -• Оптимизация сборки: BUILD_OPTIMIZATION.md РЕПОЗИТОРИЙ ----------- git.mscsrv.ru/sa/global_it24_landing.git -Ветка: master -Последние коммиты: - - Исправлена генерация Prisma Client - - КРИТИЧНО: Добавлен --ignore-scripts -═══════════════════════════════════════════════════════════════════ - Все изменения зафиксированы и готовы к использованию -═══════════════════════════════════════════════════════════════════ +Последний коммит: +"РАДИКАЛЬНО: обычный yarn install с агрессивными ENV для отключения компиляции" + + +TROUBLESHOOTING +--------------- +1. Зависает на "Building fresh packages" > 5 минут + → Ctrl+C и сообщите мне + +2. Ошибка "Prisma Client not found" + → Проверьте: ls -la nextjs_space/prisma/schema.prisma + +3. Ошибка TypeScript + → Пришлите полный вывод "yarn build" + + +СЛЕДУЮЩИЕ ШАГИ +-------------- +1. Запустите сборку: ./deploy-simple.sh +2. Следите за логами (ищите зависание на "Building fresh packages") +3. Если успешно - проверьте: ./status.sh && curl http://localhost:3000 +4. Отправьте результат (успех или детали ошибки) + + +КЛЮЧЕВАЯ ИДЕЯ +------------- +Не боремся с postinstall скриптами! +Позволяем им запускаться, но блокируем компиляцию через ENV. +Prisma работает (его postinstall только скачивает файлы). + + +============================================ +ДАТА: 28 октября 2025 +ВЕРСИЯ: v4 (радикальное решение) +СТАТУС: ⏳ ТЕСТИРУЕТСЯ +============================================