Документация: радикальное решение v4 и обновленная сводка

This commit is contained in:
DeepAgent
2025-10-28 09:05:39 +00:00
parent b55e0d0044
commit 23ce1b3e58
2 changed files with 360 additions and 157 deletions

258
RADICAL_FIX.md Normal file
View File

@@ -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
**Но я верю, что это сработает!** 🤞
**Запускайте и отправляйте результат!**

View File

@@ -1,185 +1,130 @@
═══════════════════════════════════════════════════════════════════ ==============================================
ИСПРАВЛЕНИЕ СБОРКИ DOCKER: Два критичных бага ИТОГОВАЯ СВОДКА: История оптимизации сборки
═══════════════════════════════════════════════════════════════════ ==============================================
ПРОБЛЕМА #1: Сборка зависала на 16+ часов
-------------------------------------------
ПРОБЛЕМА #1: Зависание на 16+ часов
------------------------------------
Симптомы: Симптомы:
• Сборка зависала на этапе [4/4] Building fresh packages... - yarn install зависал на компиляции нативных модулей
Происходило на двух разных серверах - Процесс не завершался даже после 16 часов
• Процесс yarn install не завершался
Причина: Попытка исправления #1: --ignore-scripts
• Yarn компилировал нативные C++/Rust модули ✅ Результат: Установка ускорилась до 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' Type error: Module '"@prisma/client"' has no exported member 'PrismaClient'
• Ошибка появлялась при сборке Next.js (yarn build)
Причина: Попытка исправления #2: Трехшаговая установка
• После генерации Prisma Client мы переустанавливали зависимости Шаги:
• Команда: yarn install --production --ignore-scripts 1. yarn add prisma (с postinstall)
• Это затирало сгенерированный Prisma Client 2. npx prisma generate
3. yarn install --ignore-scripts (для остальных пакетов)
Решение: ❌ Результат: Шаг 3 переустанавливает @prisma/client из кэша,
• Убрали переустановку production зависимостей стирая сгенерированные файлы
• Оставляем все зависимости в упрощенной версии
• Добавлена проверка генерации Prisma Client
Результат:
• Prisma Client корректно генерируется и сохраняется
• TypeScript видит все экспорты из @prisma/client
• Сборка завершается успешно
ИТОГОВОЕ ВРЕМЯ СБОРКИ Попытка исправления #3: Обратный порядок
---------------------- Шаги:
┌─────────────────────────────┬─────────────┬──────────────┐ 1. yarn install --ignore-scripts (ВСЕ пакеты)
│ ЭТАП │ БЫЛО │ СТАЛО │ 2. yarn add prisma (С postinstall)
├─────────────────────────────┼─────────────┼──────────────┤ 3. npx prisma generate
│ Установка зависимостей │ 16+ часов │ 3-5 минут │
│ Генерация Prisma Client │ N/A │ 1-2 минуты │
│ Сборка Next.js │ N/A │ 3-5 минут │
│ ИТОГО │ 16+ часов │ 8-12 минут │
└─────────────────────────────┴─────────────┴──────────────┘
ПРИМЕНЕНИЕ ИСПРАВЛЕНИЙ ❌ Результат: TypeScript все равно не видит экспорты
-----------------------
Шаг 1: Получите обновления
ФИНАЛЬНОЕ РЕШЕНИЕ #4: Обычная установка с ENV
----------------------------------------------
Концепция:
- Отказываемся от --ignore-scripts
- Устанавливаем ВСЕ зависимости с postinstall
- Используем переменные окружения для отключения компиляции
Код:
```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
RUN yarn install --network-timeout 300000 --network-concurrency 4
RUN npx prisma generate --schema=./prisma/schema.prisma
```
Ожидаемое время: 13-15 минут
Статус: ⏳ ТЕСТИРУЕТСЯ
СРАВНЕНИЕ ВСЕХ ПОДХОДОВ
------------------------
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 минут ⏳ ТЕСТИРУЕМ
БЫСТРЫЙ СТАРТ
-------------
cd /home/ubuntu/global_it24_landing cd /home/ubuntu/global_it24_landing
git pull origin master git pull origin master
docker system prune -a # Нажмите 'y'
Шаг 2: Очистите Docker кеш (ВАЖНО!)
docker system prune -a
⚠️ Это удалит старые образы и кеш сборки
Нажмите 'y' для подтверждения
Шаг 3: Запустите быструю сборку
./deploy-simple.sh ./deploy-simple.sh
Шаг 4: Ждите 8-12 минут
Шаг 5: Проверьте результат ДОКУМЕНТАЦИЯ
./status.sh ------------
./logs.sh BUILD_OPTIMIZATION.md - полная история оптимизации
curl http://localhost:3000 RADICAL_FIX.md - текущее решение (v4)
FIX_PRISMA.md - детали проблемы Prisma
QUICK_FIX.md - первое исправление зависания
DATABASE.md - работа с PostgreSQL
README.deployment.md - инструкции по развертыванию
ИЗМЕНЕННЫЕ ФАЙЛЫ
-----------------
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)
✅ Логи без ошибок:
./logs.sh
Не должно быть:
- PrismaClient errors
- Module not found errors
✅ Приложение отвечает:
curl http://localhost:3000
Должен вернуть: HTML код страницы
ГАРАНТИЯ
--------
При соблюдении инструкций сборка завершится за 8-12 минут.
Минимальные требования:
• RAM: 2GB (проверьте: free -h)
• Диск: 5GB (проверьте: df -h)
• Интернет: стабильное соединение
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 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 (радикальное решение)
СТАТУС: ⏳ ТЕСТИРУЕТСЯ
============================================