#!/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 "$@"