Оптимизация сборки Docker: устранение зависания на yarn install
- Устранена двойная установка зависимостей в Dockerfile - Добавлены ENV переменные для пропуска ненужных бинарников - Создан .dockerignore для ускорения копирования файлов - Обновлены скрипты deploy.sh и update.sh с поддержкой --fast режима - Добавлена документация BUILD_OPTIMIZATION.md и QUICK_FIX.md Ожидаемое время сборки с --fast: 10-15 минут (было 30+ минут)
This commit is contained in:
@@ -1,33 +1,21 @@
|
|||||||
|
|
||||||
# Dependencies
|
# Зависимости
|
||||||
node_modules
|
node_modules
|
||||||
nextjs_space/node_modules
|
nextjs_space/node_modules
|
||||||
npm-debug.log
|
|
||||||
|
|
||||||
# Next.js build output
|
|
||||||
nextjs_space/.next
|
|
||||||
.next
|
|
||||||
|
|
||||||
# Testing
|
|
||||||
coverage
|
|
||||||
.nyc_output
|
|
||||||
|
|
||||||
# Misc
|
|
||||||
.DS_Store
|
|
||||||
*.pem
|
|
||||||
|
|
||||||
# Environment variables (except example)
|
|
||||||
.env
|
|
||||||
.env.local
|
|
||||||
.env.development.local
|
|
||||||
.env.test.local
|
|
||||||
.env.production.local
|
|
||||||
|
|
||||||
# Debug logs
|
|
||||||
npm-debug.log*
|
npm-debug.log*
|
||||||
yarn-debug.log*
|
yarn-debug.log*
|
||||||
yarn-error.log*
|
yarn-error.log*
|
||||||
|
|
||||||
|
# Build
|
||||||
|
nextjs_space/.next
|
||||||
|
nextjs_space/out
|
||||||
|
nextjs_space/build
|
||||||
|
nextjs_space/dist
|
||||||
|
|
||||||
|
# Тестирование
|
||||||
|
nextjs_space/coverage
|
||||||
|
nextjs_space/.nyc_output
|
||||||
|
|
||||||
# IDE
|
# IDE
|
||||||
.vscode
|
.vscode
|
||||||
.idea
|
.idea
|
||||||
@@ -35,29 +23,34 @@ yarn-error.log*
|
|||||||
*.swo
|
*.swo
|
||||||
*~
|
*~
|
||||||
|
|
||||||
|
# OS
|
||||||
|
.DS_Store
|
||||||
|
Thumbs.db
|
||||||
|
|
||||||
|
# Переменные окружения (они монтируются отдельно)
|
||||||
|
.env
|
||||||
|
.env.local
|
||||||
|
.env*.local
|
||||||
|
nextjs_space/.env*
|
||||||
|
|
||||||
# Git
|
# Git
|
||||||
.git
|
.git
|
||||||
.gitignore
|
.gitignore
|
||||||
|
|
||||||
# Documentation (не нужны в образе)
|
# Docker
|
||||||
README.md
|
|
||||||
README.deployment.md
|
|
||||||
DATABASE.md
|
|
||||||
DATABASE.pdf
|
|
||||||
|
|
||||||
# Docker files
|
|
||||||
Dockerfile
|
Dockerfile
|
||||||
docker-compose.yml
|
docker-compose*.yml
|
||||||
.dockerignore
|
.dockerignore
|
||||||
|
|
||||||
# Scripts
|
# Документация
|
||||||
|
README*.md
|
||||||
|
*.md
|
||||||
|
|
||||||
|
# Логи и кеш
|
||||||
|
*.log
|
||||||
|
.cache
|
||||||
|
|
||||||
|
# Скрипты развертывания
|
||||||
*.sh
|
*.sh
|
||||||
|
|
||||||
# Backups
|
|
||||||
backups/
|
|
||||||
*.sql
|
|
||||||
*.sql.gz
|
|
||||||
|
|
||||||
# Config examples
|
|
||||||
nginx.conf.example
|
|
||||||
traefik-config-example.yml
|
traefik-config-example.yml
|
||||||
|
nginx.conf.example
|
||||||
|
|||||||
132
BUILD_OPTIMIZATION.md
Normal file
132
BUILD_OPTIMIZATION.md
Normal file
@@ -0,0 +1,132 @@
|
|||||||
|
|
||||||
|
# Оптимизация сборки 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.
|
||||||
BIN
BUILD_OPTIMIZATION.pdf
Normal file
BIN
BUILD_OPTIMIZATION.pdf
Normal file
Binary file not shown.
12
Dockerfile
12
Dockerfile
@@ -9,11 +9,15 @@ WORKDIR /app
|
|||||||
# Копируем файлы зависимостей
|
# Копируем файлы зависимостей
|
||||||
COPY nextjs_space/package.json nextjs_space/yarn.lock ./
|
COPY nextjs_space/package.json nextjs_space/yarn.lock ./
|
||||||
|
|
||||||
# Устанавливаем только production зависимости
|
# Настройки для ускорения компиляции
|
||||||
RUN yarn install --production --frozen-lockfile --network-timeout 600000
|
ENV NODE_ENV=development
|
||||||
|
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
|
||||||
|
|
||||||
# Устанавливаем dev зависимости отдельно
|
# Устанавливаем все зависимости одним вызовом
|
||||||
RUN yarn install --frozen-lockfile --network-timeout 600000
|
RUN yarn install --immutable --network-timeout 600000
|
||||||
|
|
||||||
# Стадия 2: Сборка приложения
|
# Стадия 2: Сборка приложения
|
||||||
FROM node:18-alpine AS builder
|
FROM node:18-alpine AS builder
|
||||||
|
|||||||
177
QUICK_FIX.md
Normal file
177
QUICK_FIX.md
Normal file
@@ -0,0 +1,177 @@
|
|||||||
|
# 🚀 Быстрое решение проблемы зависания сборки
|
||||||
|
|
||||||
|
## Проблема
|
||||||
|
Сборка зависла на этапе `[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 (сборка на мощной машине).
|
||||||
44
deploy.sh
44
deploy.sh
@@ -2,9 +2,43 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# Скрипт для быстрого развертывания Global-IT24 на Ubuntu с внешним Traefik
|
# Скрипт для быстрого развертывания Global-IT24 на Ubuntu с внешним Traefik
|
||||||
|
# Использование:
|
||||||
|
# ./deploy.sh - полная сборка без кеша (медленно, 15-30 минут)
|
||||||
|
# ./deploy.sh --fast - быстрая сборка с кешем (5-10 минут)
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
|
FAST_BUILD=false
|
||||||
|
|
||||||
|
# Парсинг аргументов
|
||||||
|
while [[ $# -gt 0 ]]; do
|
||||||
|
case $1 in
|
||||||
|
--fast)
|
||||||
|
FAST_BUILD=true
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--help|-h)
|
||||||
|
echo "Использование: $0 [--fast] [--help]"
|
||||||
|
echo ""
|
||||||
|
echo "Опции:"
|
||||||
|
echo " --fast Быстрая сборка с использованием кеша"
|
||||||
|
echo " --help Показать эту справку"
|
||||||
|
echo ""
|
||||||
|
echo "Примеры:"
|
||||||
|
echo " $0 # Полная сборка без кеша"
|
||||||
|
echo " $0 --fast # Быстрая сборка с кешем"
|
||||||
|
echo ""
|
||||||
|
echo "Рекомендация: используйте --fast для обновлений и пересборок"
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "❌ Неизвестный параметр: $1"
|
||||||
|
echo "Используйте --help для справки"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
echo "🚀 Развертывание Global-IT24..."
|
echo "🚀 Развертывание Global-IT24..."
|
||||||
|
|
||||||
# Проверка наличия .env файла
|
# Проверка наличия .env файла
|
||||||
@@ -31,8 +65,16 @@ echo "🛑 Остановка предыдущей версии..."
|
|||||||
docker compose down 2>/dev/null || true
|
docker compose down 2>/dev/null || true
|
||||||
|
|
||||||
# Сборка нового образа
|
# Сборка нового образа
|
||||||
echo "🔨 Сборка Docker образа..."
|
if [ "$FAST_BUILD" = true ]; then
|
||||||
|
echo "⚡ Быстрая сборка с использованием кеша (5-10 минут)..."
|
||||||
|
export DOCKER_BUILDKIT=1
|
||||||
|
export COMPOSE_DOCKER_CLI_BUILD=1
|
||||||
|
docker compose build
|
||||||
|
else
|
||||||
|
echo "🔨 Полная сборка Docker образа без кеша (15-30 минут)..."
|
||||||
|
echo "💡 Подсказка: используйте --fast для ускорения следующих сборок"
|
||||||
docker compose build --no-cache
|
docker compose build --no-cache
|
||||||
|
fi
|
||||||
|
|
||||||
# Запуск контейнера
|
# Запуск контейнера
|
||||||
echo "▶️ Запуск контейнера..."
|
echo "▶️ Запуск контейнера..."
|
||||||
|
|||||||
74
update.sh
74
update.sh
@@ -1,24 +1,84 @@
|
|||||||
|
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# Скрипт для быстрого обновления приложения без пересборки
|
# Скрипт для обновления приложения
|
||||||
|
# Использование:
|
||||||
|
# ./update.sh - просто перезапуск (без пересборки)
|
||||||
|
# ./update.sh --rebuild - пересборка с кешем и перезапуск (5-10 минут)
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
|
REBUILD=false
|
||||||
|
|
||||||
|
# Парсинг аргументов
|
||||||
|
while [[ $# -gt 0 ]]; do
|
||||||
|
case $1 in
|
||||||
|
--rebuild|-r)
|
||||||
|
REBUILD=true
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--help|-h)
|
||||||
|
echo "Использование: $0 [--rebuild] [--help]"
|
||||||
|
echo ""
|
||||||
|
echo "Опции:"
|
||||||
|
echo " --rebuild, -r Пересобрать образ перед перезапуском"
|
||||||
|
echo " --help, -h Показать эту справку"
|
||||||
|
echo ""
|
||||||
|
echo "Примеры:"
|
||||||
|
echo " $0 # Просто перезапустить (быстро)"
|
||||||
|
echo " $0 --rebuild # Пересобрать и перезапустить"
|
||||||
|
echo ""
|
||||||
|
echo "Когда использовать --rebuild:"
|
||||||
|
echo " - Изменился код приложения"
|
||||||
|
echo " - Обновились зависимости (package.json)"
|
||||||
|
echo " - Изменилась конфигурация Next.js"
|
||||||
|
echo ""
|
||||||
|
echo "Когда НЕ нужен --rebuild:"
|
||||||
|
echo " - Изменились только переменные в .env"
|
||||||
|
echo " - Нужно применить миграции базы данных"
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "❌ Неизвестный параметр: $1"
|
||||||
|
echo "Используйте --help для справки"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
echo "🔄 Обновление Global-IT24..."
|
echo "🔄 Обновление Global-IT24..."
|
||||||
|
|
||||||
# Перезапуск контейнера
|
if [ "$REBUILD" = true ]; then
|
||||||
echo "🔄 Перезапуск контейнера..."
|
echo "🔨 Пересборка образа с использованием кеша (5-10 минут)..."
|
||||||
docker-compose restart
|
export DOCKER_BUILDKIT=1
|
||||||
|
export COMPOSE_DOCKER_CLI_BUILD=1
|
||||||
|
|
||||||
|
# Остановка контейнера
|
||||||
|
docker compose down
|
||||||
|
|
||||||
|
# Пересборка
|
||||||
|
docker compose build
|
||||||
|
|
||||||
|
# Запуск
|
||||||
|
docker compose up -d
|
||||||
|
else
|
||||||
|
echo "🔄 Перезапуск контейнера без пересборки..."
|
||||||
|
docker compose restart
|
||||||
|
fi
|
||||||
|
|
||||||
echo "⏳ Ожидание готовности..."
|
echo "⏳ Ожидание готовности..."
|
||||||
sleep 5
|
sleep 5
|
||||||
|
|
||||||
if docker-compose ps | grep -q "Up"; then
|
if docker compose ps | grep -q "Up"; then
|
||||||
echo "✅ Обновление завершено!"
|
echo "✅ Обновление завершено!"
|
||||||
docker-compose ps
|
docker compose ps
|
||||||
|
echo ""
|
||||||
|
echo "📝 Полезные команды:"
|
||||||
|
echo " Просмотр логов: ./logs.sh"
|
||||||
|
echo " Статус: ./status.sh"
|
||||||
|
echo " С пересборкой: ./update.sh --rebuild"
|
||||||
else
|
else
|
||||||
echo "❌ Ошибка при перезапуске!"
|
echo "❌ Ошибка при перезапуске!"
|
||||||
docker-compose logs --tail=50
|
docker compose logs --tail=50
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|||||||
Reference in New Issue
Block a user