- Устранена двойная установка зависимостей в Dockerfile - Добавлены ENV переменные для пропуска ненужных бинарников - Создан .dockerignore для ускорения копирования файлов - Обновлены скрипты deploy.sh и update.sh с поддержкой --fast режима - Добавлена документация BUILD_OPTIMIZATION.md и QUICK_FIX.md Ожидаемое время сборки с --fast: 10-15 минут (было 30+ минут)
4.4 KiB
4.4 KiB
Оптимизация сборки 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:
- Соберите образ на CI/CD сервере (обычно там больше ресурсов)
- Загрузите в Docker Registry (Docker Hub, GitHub Registry, GitLab Registry)
- На продакшн-сервере просто выполните
docker pull
Это самый быстрый и надежный способ для production.