# Оптимизация сборки Docker образа ## Проблема: Медленная сборка на этапе "Building fresh packages" Сборка может занимать **15-30 минут** из-за компиляции нативных модулей (Prisma, bcryptjs и др.). ## Внесенные оптимизации ### 1. Устранена двойная установка зависимостей **Было:** ```dockerfile RUN yarn install --production --frozen-lockfile RUN yarn install --frozen-lockfile ``` **Стало:** ```dockerfile RUN yarn install --immutable --network-timeout 600000 ``` ### 2. Добавлены переменные окружения для ускорения ```dockerfile 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 ```bash # Проверьте текущие лимиты docker info | grep -i "CPUs\|Memory" # Для Docker Desktop: Settings → Resources # CPU: минимум 2 ядра, рекомендуется 4 # RAM: минимум 4GB, рекомендуется 8GB ``` #### Вариант 2: Используйте готовый образ (рекомендуется) Соберите образ один раз на мощной машине и загрузите в реестр: ```bash # На мощной машине 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 с кешированием ```bash # Включите BuildKit export DOCKER_BUILDKIT=1 # Соберите с кешем docker build --build-arg BUILDKIT_INLINE_CACHE=1 -t global-it24:latest . ``` #### Вариант 4: Установите более быстрый линкер (на хосте) ```bash # Для Ubuntu/Debian sudo apt-get install -y mold # Добавьте в Dockerfile перед RUN yarn install ENV CC=clang ENV CXX=clang++ ENV LD=mold ``` ## Мониторинг прогресса сборки ```bash # В отдельном терминале следите за процессом 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) - Выход с кодом ошибки ## Если сборка зависла намертво ```bash # Остановите сборку 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.