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

133 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Оптимизация сборки 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.