- Устранена двойная установка зависимостей в Dockerfile - Добавлены ENV переменные для пропуска ненужных бинарников - Создан .dockerignore для ускорения копирования файлов - Обновлены скрипты deploy.sh и update.sh с поддержкой --fast режима - Добавлена документация BUILD_OPTIMIZATION.md и QUICK_FIX.md Ожидаемое время сборки с --fast: 10-15 минут (было 30+ минут)
178 lines
5.3 KiB
Markdown
178 lines
5.3 KiB
Markdown
# 🚀 Быстрое решение проблемы зависания сборки
|
||
|
||
## Проблема
|
||
Сборка зависла на этапе `[4/4] Building fresh packages...` при `yarn install --immutable`
|
||
|
||
## ✅ Что было исправлено
|
||
|
||
1. **Устранена двойная установка зависимостей** в Dockerfile
|
||
2. **Добавлены переменные окружения** для пропуска ненужных бинарников
|
||
3. **Создан .dockerignore** для ускорения копирования файлов
|
||
4. **Обновлены скрипты развертывания** с поддержкой быстрой сборки
|
||
|
||
## 📋 Инструкция по развертыванию
|
||
|
||
### Вариант 1: Первое развертывание (рекомендуется)
|
||
|
||
```bash
|
||
cd /home/ubuntu/global_it24_landing
|
||
|
||
# Остановите текущую сборку (если запущена)
|
||
docker compose down
|
||
docker builder prune -f
|
||
|
||
# Запустите развертывание с быстрой сборкой
|
||
./deploy.sh --fast
|
||
```
|
||
|
||
**Ожидаемое время:** 10-15 минут (вместо 30+ минут)
|
||
|
||
### Вариант 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
|
||
cd /home/ubuntu/global_it24_landing
|
||
docker build -t global-it24:latest .
|
||
docker save global-it24:latest | gzip > global-it24-image.tar.gz
|
||
```
|
||
|
||
**Перенесите файл на сервер и загрузите:**
|
||
```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
|
||
docker compose up -d
|
||
```
|
||
|
||
## 🎯 Рекомендации
|
||
|
||
### Для первого развертывания:
|
||
```bash
|
||
./deploy.sh --fast
|
||
```
|
||
|
||
### Для обновлений кода:
|
||
```bash
|
||
./update.sh --rebuild
|
||
```
|
||
|
||
### Для простого перезапуска (изменения в .env):
|
||
```bash
|
||
./update.sh
|
||
```
|
||
|
||
## ⏱️ Ожидаемое время сборки
|
||
|
||
| Метод | Время | Когда использовать |
|
||
|-------|-------|-------------------|
|
||
| `./deploy.sh` | 20-30 мин | Первое развертывание без кеша |
|
||
| `./deploy.sh --fast` | 10-15 мин | Первое развертывание с кешем |
|
||
| `./update.sh --rebuild` | 5-10 мин | Обновление кода |
|
||
| `./update.sh` | ~10 сек | Изменения .env или перезапуск |
|
||
|
||
## ℹ️ Что происходит при сборке
|
||
|
||
1. **[1/11] Создание базового образа** (~30 сек)
|
||
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 (сборка на мощной машине).
|