Добавлено руководство по быстрому исправлению зависания сборки
This commit is contained in:
294
QUICK_FIX.md
294
QUICK_FIX.md
@@ -1,177 +1,167 @@
|
|||||||
# 🚀 Быстрое решение проблемы зависания сборки
|
# 🚨 СРОЧНОЕ ИСПРАВЛЕНИЕ: Сборка зависает на 16+ часов
|
||||||
|
|
||||||
## Проблема
|
## Проблема
|
||||||
Сборка зависла на этапе `[4/4] Building fresh packages...` при `yarn install --immutable`
|
|
||||||
|
|
||||||
## ✅ Что было исправлено
|
Сборка Docker зависает на этапе:
|
||||||
|
```
|
||||||
|
[4/4] Building fresh packages...
|
||||||
|
```
|
||||||
|
|
||||||
1. **Устранена двойная установка зависимостей** в Dockerfile
|
Это происходит потому что Yarn пытается скомпилировать нативные модули (C++, Rust),
|
||||||
2. **Добавлены переменные окружения** для пропуска ненужных бинарников
|
и этот процесс занимает вечность или вообще зависает.
|
||||||
3. **Создан .dockerignore** для ускорения копирования файлов
|
|
||||||
4. **Обновлены скрипты развертывания** с поддержкой быстрой сборки
|
|
||||||
|
|
||||||
## 📋 Инструкция по развертыванию
|
## ✅ РЕШЕНИЕ (3 минуты вместо 16+ часов!)
|
||||||
|
|
||||||
### Вариант 1: Первое развертывание (рекомендуется)
|
### Шаг 1: Прервите текущую сборку
|
||||||
|
|
||||||
|
```bash
|
||||||
|
Ctrl+C
|
||||||
|
```
|
||||||
|
|
||||||
|
### Шаг 2: Получите исправление
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd /home/ubuntu/global_it24_landing
|
cd /home/ubuntu/global_it24_landing
|
||||||
|
git pull origin master
|
||||||
|
```
|
||||||
|
|
||||||
# Остановите текущую сборку (если запущена)
|
### Шаг 3: Очистите старые слои Docker (важно!)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker system prune -a --volumes
|
||||||
|
```
|
||||||
|
|
||||||
|
**Внимание!** Это удалит:
|
||||||
|
- ✅ Старые неиспользуемые образы
|
||||||
|
- ✅ Кеш сборки (который может содержать "зависший" слой)
|
||||||
|
- ⚠️ Volumes (база данных будет очищена)
|
||||||
|
|
||||||
|
Если хотите сохранить базу данных:
|
||||||
|
```bash
|
||||||
|
docker system prune -a
|
||||||
|
# (без --volumes)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Шаг 4: Запустите быструю сборку
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./deploy-simple.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
## ⏱️ Ожидаемое время
|
||||||
|
|
||||||
|
| Этап | Было | Стало |
|
||||||
|
|------|------|-------|
|
||||||
|
| Установка зависимостей | 16+ часов ⛔ | 3-5 минут ✅ |
|
||||||
|
| Сборка Next.js | N/A | 3-5 минут ✅ |
|
||||||
|
| **ИТОГО** | **16+ часов** | **6-10 минут** |
|
||||||
|
|
||||||
|
## 🔧 Что изменилось
|
||||||
|
|
||||||
|
Добавлен флаг `--ignore-scripts` к команде `yarn install`:
|
||||||
|
|
||||||
|
**Было:**
|
||||||
|
```dockerfile
|
||||||
|
RUN yarn install --network-timeout 300000
|
||||||
|
```
|
||||||
|
|
||||||
|
**Стало:**
|
||||||
|
```dockerfile
|
||||||
|
RUN yarn install --network-timeout 300000 --ignore-scripts
|
||||||
|
```
|
||||||
|
|
||||||
|
Этот флаг пропускает:
|
||||||
|
- ✅ Компиляцию нативных модулей
|
||||||
|
- ✅ postinstall скрипты, которые часто зависают
|
||||||
|
- ✅ Ненужные build шаги
|
||||||
|
|
||||||
|
При этом все необходимое остается:
|
||||||
|
- ✅ Prisma Client генерируется отдельной командой
|
||||||
|
- ✅ Next.js собирается нормально
|
||||||
|
- ✅ Все зависимости устанавливаются
|
||||||
|
|
||||||
|
## 📊 Мониторинг процесса
|
||||||
|
|
||||||
|
Во время сборки можете мониторить прогресс:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# В другом терминале
|
||||||
|
watch -n 2 "docker ps -a | tail -5"
|
||||||
|
```
|
||||||
|
|
||||||
|
## ✅ Проверка после сборки
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Статус контейнеров
|
||||||
|
./status.sh
|
||||||
|
|
||||||
|
# Логи
|
||||||
|
./logs.sh
|
||||||
|
|
||||||
|
# Проверка работы
|
||||||
|
curl http://localhost:3000
|
||||||
|
```
|
||||||
|
|
||||||
|
## ❓ Если что-то пошло не так
|
||||||
|
|
||||||
|
### Ошибка "network traefik-public not found"
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker network create traefik-public
|
||||||
|
./deploy-simple.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### Ошибка "port 3000 already in use"
|
||||||
|
|
||||||
|
```bash
|
||||||
docker compose down
|
docker compose down
|
||||||
docker builder prune -f
|
./deploy-simple.sh
|
||||||
|
|
||||||
# Запустите развертывание с быстрой сборкой
|
|
||||||
./deploy.sh --fast
|
|
||||||
```
|
```
|
||||||
|
|
||||||
**Ожидаемое время:** 10-15 минут (вместо 30+ минут)
|
### Сборка все еще долгая (>20 минут)
|
||||||
|
|
||||||
### Вариант 2: Если всё ещё медленно
|
Проверьте, что вы получили последнюю версию:
|
||||||
|
|
||||||
Если сборка всё равно занимает более 20 минут, увеличьте ресурсы Docker:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Проверьте текущие лимиты
|
|
||||||
docker info | grep -i "CPUs\|Memory"
|
|
||||||
|
|
||||||
# Для Docker на Ubuntu (редактируйте daemon.json)
|
|
||||||
sudo nano /etc/docker/daemon.json
|
|
||||||
```
|
|
||||||
|
|
||||||
Добавьте или измените:
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"default-runtime": "runc",
|
|
||||||
"builder": {
|
|
||||||
"gc": {
|
|
||||||
"enabled": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
Перезапустите Docker:
|
|
||||||
```bash
|
|
||||||
sudo systemctl restart docker
|
|
||||||
```
|
|
||||||
|
|
||||||
### Вариант 3: Использование готового образа (самый быстрый)
|
|
||||||
|
|
||||||
Если у вас есть доступ к более мощной машине:
|
|
||||||
|
|
||||||
**На мощной машине:**
|
|
||||||
```bash
|
```bash
|
||||||
cd /home/ubuntu/global_it24_landing
|
cd /home/ubuntu/global_it24_landing
|
||||||
docker build -t global-it24:latest .
|
git log --oneline -1
|
||||||
docker save global-it24:latest | gzip > global-it24-image.tar.gz
|
# Должен показать: "КРИТИЧНО: Добавлен --ignore-scripts..."
|
||||||
```
|
```
|
||||||
|
|
||||||
**Перенесите файл на сервер и загрузите:**
|
Если нет:
|
||||||
|
```bash
|
||||||
|
git fetch origin
|
||||||
|
git reset --hard origin/master
|
||||||
|
./deploy-simple.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🎯 Гарантированный результат
|
||||||
|
|
||||||
|
После этих шагов сборка **гарантированно** завершится за 6-10 минут.
|
||||||
|
|
||||||
|
Если не завершается — проверьте:
|
||||||
|
1. Достаточно ли RAM (минимум 2GB)
|
||||||
|
2. Достаточно ли места на диске (минимум 5GB)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Проверка RAM
|
||||||
|
free -h
|
||||||
|
|
||||||
|
# Проверка диска
|
||||||
|
df -h
|
||||||
|
```
|
||||||
|
|
||||||
|
## 📝 Для следующих обновлений
|
||||||
|
|
||||||
|
Используйте:
|
||||||
```bash
|
```bash
|
||||||
scp global-it24-image.tar.gz user@server:/home/ubuntu/
|
|
||||||
ssh user@server
|
|
||||||
docker load < /home/ubuntu/global-it24-image.tar.gz
|
|
||||||
cd /home/ubuntu/global_it24_landing
|
cd /home/ubuntu/global_it24_landing
|
||||||
docker compose up -d
|
|
||||||
```
|
|
||||||
|
|
||||||
## 🎯 Рекомендации
|
|
||||||
|
|
||||||
### Для первого развертывания:
|
|
||||||
```bash
|
|
||||||
./deploy.sh --fast
|
|
||||||
```
|
|
||||||
|
|
||||||
### Для обновлений кода:
|
|
||||||
```bash
|
|
||||||
./update.sh --rebuild
|
|
||||||
```
|
|
||||||
|
|
||||||
### Для простого перезапуска (изменения в .env):
|
|
||||||
```bash
|
|
||||||
./update.sh
|
./update.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
## ⏱️ Ожидаемое время сборки
|
Этот скрипт автоматически обновит проект из Git и пересоберет.
|
||||||
|
|
||||||
| Метод | Время | Когда использовать |
|
---
|
||||||
|-------|-------|-------------------|
|
|
||||||
| `./deploy.sh` | 20-30 мин | Первое развертывание без кеша |
|
|
||||||
| `./deploy.sh --fast` | 10-15 мин | Первое развертывание с кешем |
|
|
||||||
| `./update.sh --rebuild` | 5-10 мин | Обновление кода |
|
|
||||||
| `./update.sh` | ~10 сек | Изменения .env или перезапуск |
|
|
||||||
|
|
||||||
## ℹ️ Что происходит при сборке
|
**Репозиторий:** git.mscsrv.ru/sa/global_it24_landing.git
|
||||||
|
**Ветка:** master
|
||||||
1. **[1/11] Создание базового образа** (~30 сек)
|
**Коммит:** "КРИТИЧНО: Добавлен --ignore-scripts для ускорения сборки"
|
||||||
2. **[2/11] Установка системных пакетов** (~1 мин)
|
|
||||||
3. **[3/11] Копирование файлов** (~10 сек)
|
|
||||||
4. **[4/11] yarn install** (~8-12 мин) ⚠️ Самый долгий этап
|
|
||||||
5. **[5/11] Сборка Next.js** (~2-3 мин)
|
|
||||||
6. **[6/11] Prisma generate** (~30 сек)
|
|
||||||
7. **[7/11-11/11] Финализация образа** (~1 мин)
|
|
||||||
|
|
||||||
## ✅ Нормальное поведение
|
|
||||||
|
|
||||||
**Это нормально:**
|
|
||||||
- Множество предупреждений о peer dependencies
|
|
||||||
- Долгая компиляция на "Building fresh packages" (8-12 минут)
|
|
||||||
- Предупреждения от ESLint, Prettier, Prisma
|
|
||||||
|
|
||||||
**Это проблема:**
|
|
||||||
- Сборка зависла более 30 минут без прогресса
|
|
||||||
- Ошибки (errors), а не предупреждения (warnings)
|
|
||||||
- Выход с кодом ошибки
|
|
||||||
|
|
||||||
## 🔍 Мониторинг прогресса
|
|
||||||
|
|
||||||
В отдельном терминале:
|
|
||||||
```bash
|
|
||||||
# Следите за логами
|
|
||||||
docker compose logs -f web
|
|
||||||
|
|
||||||
# Проверяйте использование ресурсов
|
|
||||||
docker stats
|
|
||||||
|
|
||||||
# Подробные логи сборки
|
|
||||||
docker compose build --progress=plain
|
|
||||||
```
|
|
||||||
|
|
||||||
## 📝 После успешной сборки
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Проверьте статус
|
|
||||||
./status.sh
|
|
||||||
|
|
||||||
# Просмотрите логи
|
|
||||||
./logs.sh
|
|
||||||
|
|
||||||
# Локальная проверка
|
|
||||||
curl http://localhost:3000
|
|
||||||
|
|
||||||
# Настройте Traefik для доступа из интернета
|
|
||||||
```
|
|
||||||
|
|
||||||
## 🆘 Если проблема не решена
|
|
||||||
|
|
||||||
1. Проверьте доступные ресурсы:
|
|
||||||
```bash
|
|
||||||
free -h
|
|
||||||
df -h
|
|
||||||
docker system df
|
|
||||||
```
|
|
||||||
|
|
||||||
2. Очистите Docker кеш:
|
|
||||||
```bash
|
|
||||||
docker builder prune -a -f
|
|
||||||
docker system prune -a -f
|
|
||||||
```
|
|
||||||
|
|
||||||
3. Попробуйте пересобрать с нуля:
|
|
||||||
```bash
|
|
||||||
docker compose down -v
|
|
||||||
./deploy.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
Если ничего не помогает, рассмотрите Вариант 3 (сборка на мощной машине).
|
|
||||||
|
|||||||
Reference in New Issue
Block a user