Files
global_it24_landing/BUILD_OPTIMIZATION.md
DeepAgent 44d6ef1da5 Оптимизация сборки Docker: устранение зависания на yarn install
- Устранена двойная установка зависимостей в Dockerfile
- Добавлены ENV переменные для пропуска ненужных бинарников
- Создан .dockerignore для ускорения копирования файлов
- Обновлены скрипты deploy.sh и update.sh с поддержкой --fast режима
- Добавлена документация BUILD_OPTIMIZATION.md и QUICK_FIX.md

Ожидаемое время сборки с --fast: 10-15 минут (было 30+ минут)
2025-10-27 13:04:00 +00:00

4.4 KiB
Raw Blame History

Оптимизация сборки Docker образа

Проблема: Медленная сборка на этапе "Building fresh packages"

Сборка может занимать 15-30 минут из-за компиляции нативных модулей (Prisma, bcryptjs и др.).

Внесенные оптимизации

1. Устранена двойная установка зависимостей

Было:

RUN yarn install --production --frozen-lockfile
RUN yarn install --frozen-lockfile

Стало:

RUN yarn install --immutable --network-timeout 600000

2. Добавлены переменные окружения для ускорения

ENV SKIP_SASS_BINARY_DOWNLOAD_FOR_CI=true
ENV SKIP_NODE_SASS_TESTS=true
ENV CYPRESS_INSTALL_BINARY=0
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true

3. Создан .dockerignore

Исключены ненужные файлы из контекста сборки (логи, кеш, документация и т.д.).

Рекомендации при развертывании

Если сборка все еще медленная:

Вариант 1: Увеличьте ресурсы Docker

# Проверьте текущие лимиты
docker info | grep -i "CPUs\|Memory"

# Для Docker Desktop: Settings → Resources
# CPU: минимум 2 ядра, рекомендуется 4
# RAM: минимум 4GB, рекомендуется 8GB

Вариант 2: Используйте готовый образ (рекомендуется)

Соберите образ один раз на мощной машине и загрузите в реестр:

# На мощной машине
docker build -t global-it24:latest .
docker save global-it24:latest | gzip > global-it24-image.tar.gz

# Перенесите файл на сервер и загрузите
docker load < global-it24-image.tar.gz

Вариант 3: Используйте BuildKit с кешированием

# Включите BuildKit
export DOCKER_BUILDKIT=1

# Соберите с кешем
docker build --build-arg BUILDKIT_INLINE_CACHE=1 -t global-it24:latest .

Вариант 4: Установите более быстрый линкер (на хосте)

# Для Ubuntu/Debian
sudo apt-get install -y mold

# Добавьте в Dockerfile перед RUN yarn install
ENV CC=clang
ENV CXX=clang++
ENV LD=mold

Мониторинг прогресса сборки

# В отдельном терминале следите за процессом
docker ps -a | grep build
docker stats

# Проверьте логи подробнее
docker build --progress=plain -t global-it24:latest .

Типичное время сборки

Конфигурация Время
2 CPU, 4GB RAM 20-30 минут
4 CPU, 8GB RAM 10-15 минут
8 CPU, 16GB RAM 5-8 минут
С кешем BuildKit 2-5 минут

Нормальное поведение

Это нормально:

  • Предупреждения о peer dependencies (они не влияют на работу)
  • Долгая компиляция на этапе "Building fresh packages" (10-20 минут)
  • Множество предупреждений от Prisma и других пакетов

Это проблема:

  • Сборка зависла более 45 минут без прогресса
  • Ошибки (errors), а не предупреждения (warnings)
  • Выход с кодом ошибки

Если сборка зависла намертво

# Остановите сборку
Ctrl+C

# Очистите все промежуточные контейнеры и кеш
docker builder prune -a -f

# Попробуйте снова с --no-cache
docker build --no-cache -t global-it24:latest .

Альтернатива: Многоступенчатая сборка на CI/CD

Если у вас есть GitHub Actions, GitLab CI или Jenkins:

  1. Соберите образ на CI/CD сервере (обычно там больше ресурсов)
  2. Загрузите в Docker Registry (Docker Hub, GitHub Registry, GitLab Registry)
  3. На продакшн-сервере просто выполните docker pull

Это самый быстрый и надежный способ для production.