Files
DLE/setup-template.sh

326 lines
12 KiB
Bash
Executable File
Raw Permalink 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.

#!/bin/bash
# Copyright (c) 2024-2025 Тарабанов Александр Викторович
# All rights reserved.
# This software is proprietary and confidential.
# For licensing inquiries: info@hb3-accelerator.com
# Скрипт для автоматической установки шаблона приложения DLE
# Скачивает репозиторий, проверяет Docker, импортирует образы и тома, запускает приложение
# Цветной вывод
print_green() {
echo -e "\e[32m$1\e[0m"
}
print_blue() {
echo -e "\e[34m$1\e[0m"
}
print_yellow() {
echo -e "\e[33m$1\e[0m"
}
print_red() {
echo -e "\e[31m$1\e[0m"
}
# Проверка Docker
check_docker() {
print_blue "🔍 Проверка Docker..."
if ! command -v docker &> /dev/null; then
print_red "❌ Docker не установлен!"
print_yellow "Установите Docker: https://docs.docker.com/get-docker/"
exit 1
fi
if ! command -v docker-compose &> /dev/null && ! docker compose version &> /dev/null; then
print_red "❌ Docker Compose не установлен!"
print_yellow "Установите Docker Compose: https://docs.docker.com/compose/install/"
exit 1
fi
print_green "✅ Docker и Docker Compose установлены"
}
# Проверка Docker запущен
check_docker_running() {
print_blue "🔍 Проверка запуска Docker..."
if ! docker info &> /dev/null; then
print_red "❌ Docker не запущен!"
print_yellow "Запустите Docker и повторите попытку"
exit 1
fi
print_green "✅ Docker запущен"
}
# Скачивание репозитория и архива
download_repo() {
print_blue "📥 Скачивание репозитория..."
if [ -d "DLE" ]; then
print_yellow "⚠️ Папка DLE уже существует"
read -p "Удалить существующую папку? (y/N): " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
rm -rf DLE
else
print_blue "Используем существующую папку"
cd DLE
return
fi
fi
git clone https://github.com/VC-HB3-Accelerator/DLE.git
cd DLE
print_green "✅ Репозиторий скачан"
# Скачивание архива из GitHub Release
download_archive
}
# Скачивание архива из GitHub Release
download_archive() {
print_blue "📦 Скачивание архива из GitHub Release..."
# Проверяем наличие архива
if [ -f "dle-template.tar.gz" ]; then
print_yellow "⚠️ Архив dle-template.tar.gz уже существует"
read -p "Перескачать архив? (y/N): " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
rm -f dle-template.tar.gz
else
print_blue "Используем существующий архив"
extract_archive
return
fi
fi
# Получаем URL последнего релиза
print_blue "🔍 Поиск последнего релиза..."
RELEASE_URL=$(curl -s https://api.github.com/repos/VC-HB3-Accelerator/DLE/releases/latest | grep "browser_download_url.*dle-template.tar.gz" | cut -d '"' -f 4)
if [ -z "$RELEASE_URL" ]; then
print_red "❌ Не удалось найти архив в релизах!"
print_yellow "Проверьте, что релиз создан и содержит dle-template.tar.gz"
print_blue "Ручная установка:"
print_blue "1. Перейдите на https://github.com/VC-HB3-Accelerator/DLE/releases"
print_blue "2. Скачайте dle-template.tar.gz"
print_blue "3. Поместите в папку DLE"
print_blue "4. Запустите скрипт снова"
exit 1
fi
print_blue "📥 Скачивание архива (5.3GB)..."
print_yellow "Это может занять несколько минут..."
if curl -L -o dle-template.tar.gz "$RELEASE_URL"; then
print_green "✅ Архив скачан"
extract_archive
else
print_red "❌ Ошибка скачивания архива!"
print_yellow "Попробуйте скачать вручную:"
print_blue "1. Перейдите на https://github.com/VC-HB3-Accelerator/DLE/releases"
print_blue "2. Скачайте dle-template.tar.gz"
print_blue "3. Поместите в папку DLE"
print_blue "4. Запустите скрипт снова"
exit 1
fi
}
# Распаковка архива
extract_archive() {
print_blue "📦 Распаковка архива..."
if [ ! -f "dle-template.tar.gz" ]; then
print_red "❌ Архив dle-template.tar.gz не найден!"
exit 1
fi
if tar -xzf dle-template.tar.gz; then
print_green "✅ Архив распакован"
print_blue "🗑️ Удаление архива для экономии места..."
rm -f dle-template.tar.gz
print_green "✅ Архив удален"
else
print_red "❌ Ошибка распаковки архива!"
exit 1
fi
}
# Проверка файлов образов
check_images() {
print_blue "🔍 Проверка файлов образов..."
if [ ! -d "docker-data/images" ]; then
print_red "❌ Папка docker-data/images не найдена!"
print_yellow "Убедитесь, что репозиторий содержит экспортированные образы"
exit 1
fi
local images=("backend.tar" "frontend.tar" "vector-search.tar" "ollama.tar" "webssh-agent.tar")
for image in "${images[@]}"; do
if [ ! -f "docker-data/images/$image" ]; then
print_red "❌ Файл образа $image не найден!"
exit 1
fi
done
print_green "✅ Все файлы образов найдены"
}
# Проверка файлов томов
check_volumes() {
print_blue "🔍 Проверка файлов томов..."
if [ ! -d "docker-data/volumes" ]; then
print_red "❌ Папка docker-data/volumes не найдена!"
print_yellow "Убедитесь, что репозиторий содержит экспортированные тома"
exit 1
fi
local volumes=("postgres_data.tar.gz" "ollama_data.tar.gz" "vector_search_data.tar.gz" "backend_node_modules.tar.gz" "frontend_node_modules.tar.gz")
for volume in "${volumes[@]}"; do
if [ ! -f "docker-data/volumes/$volume" ]; then
print_red "❌ Файл тома $volume не найден!"
exit 1
fi
done
print_green "✅ Все файлы томов найдены"
}
# Импорт образов
import_images() {
print_blue "📦 Импорт образов..."
local images=("backend.tar" "frontend.tar" "vector-search.tar" "ollama.tar" "webssh-agent.tar")
for image in "${images[@]}"; do
print_blue "Импорт $image..."
if docker load -i "docker-data/images/$image"; then
print_green "$image импортирован"
else
print_red "❌ Ошибка импорта $image"
exit 1
fi
done
print_green "✅ Все образы импортированы"
}
# Создание томов
create_volumes() {
print_blue "💾 Создание томов..."
local volumes=("digital_legal_entitydle_postgres_data" "digital_legal_entitydle_ollama_data" "digital_legal_entitydle_vector_search_data" "digital_legal_entitydle_backend_node_modules" "digital_legal_entitydle_frontend_node_modules")
for volume in "${volumes[@]}"; do
if docker volume ls | grep -q "$volume"; then
print_yellow "⚠️ Том $volume уже существует"
else
docker volume create "$volume"
print_green "✅ Том $volume создан"
fi
done
}
# Импорт томов
import_volumes() {
print_blue "📥 Импорт данных в тома..."
# PostgreSQL
print_blue "Импорт postgres_data..."
docker run --rm -v digital_legal_entitydle_postgres_data:/target -v "$(pwd)/docker-data/volumes:/backup" alpine tar xzf /backup/postgres_data.tar.gz -C /target
print_green "✅ postgres_data импортирован"
# Ollama
print_blue "Импорт ollama_data..."
docker run --rm -v digital_legal_entitydle_ollama_data:/target -v "$(pwd)/docker-data/volumes:/backup" alpine tar xzf /backup/ollama_data.tar.gz -C /target
print_green "✅ ollama_data импортирован"
# Vector Search
print_blue "Импорт vector_search_data..."
docker run --rm -v digital_legal_entitydle_vector_search_data:/target -v "$(pwd)/docker-data/volumes:/backup" alpine tar xzf /backup/vector_search_data.tar.gz -C /target
print_green "✅ vector_search_data импортирован"
# Backend node_modules
print_blue "Импорт backend_node_modules..."
docker run --rm -v digital_legal_entitydle_backend_node_modules:/target -v "$(pwd)/docker-data/volumes:/backup" alpine tar xzf /backup/backend_node_modules.tar.gz -C /target
print_green "✅ backend_node_modules импортирован"
# Frontend node_modules
print_blue "Импорт frontend_node_modules..."
docker run --rm -v digital_legal_entitydle_frontend_node_modules:/target -v "$(pwd)/docker-data/volumes:/backup" alpine tar xzf /backup/frontend_node_modules.tar.gz -C /target
print_green "✅ frontend_node_modules импортирован"
print_green "✅ Все тома импортированы"
}
# Запуск приложения
start_application() {
print_blue "🚀 Запуск приложения..."
if docker-compose up -d; then
print_green "✅ Приложение запущено"
print_blue "🌐 Доступ к приложению: http://localhost:5173"
else
print_red "❌ Ошибка запуска приложения"
print_yellow "Проверьте логи: docker-compose logs"
exit 1
fi
}
# Проверка статуса
check_status() {
print_blue "🔍 Проверка статуса контейнеров..."
sleep 10
if docker-compose ps | grep -q "Up"; then
print_green "✅ Контейнеры запущены"
print_blue "🌐 Приложение доступно по адресу: http://localhost:5173"
else
print_yellow "⚠️ Некоторые контейнеры могут быть не готовы"
print_blue "Проверьте статус: docker-compose ps"
print_blue "Просмотрите логи: docker-compose logs"
fi
}
# Основная функция
main() {
print_blue "🚀 Установка шаблона приложения Digital Legal Entity"
print_blue "=================================================="
print_blue "📦 Автоматическое скачивание из GitHub Release"
print_blue "=================================================="
# Проверки
check_docker
check_docker_running
# Скачивание репозитория и архива
download_repo
# Проверка файлов
check_images
check_volumes
# Импорт
import_images
create_volumes
import_volumes
# Запуск
start_application
check_status
print_green "🎉 Установка завершена!"
print_blue "=================================================="
print_blue "🌐 Приложение доступно: http://localhost:5173"
print_blue "🔧 Управление:"
print_blue " Запуск: docker-compose up -d"
print_blue " Остановка: docker-compose down"
print_blue " Логи: docker-compose logs"
print_blue "=================================================="
print_blue "📝 Примечание: Архив (5.3GB) автоматически скачан и удален"
print_blue " для экономии места на диске"
}
# Запуск
main "$@"