test server
This commit is contained in:
228
scripts/models.sh
Normal file
228
scripts/models.sh
Normal file
@@ -0,0 +1,228 @@
|
||||
#!/bin/bash
|
||||
|
||||
# AI Server Model Management Script
|
||||
# Optimized for RTX 2060
|
||||
|
||||
# Colors
|
||||
GREEN='\033[0;32m'
|
||||
RED='\033[0;31m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
PURPLE='\033[0;35m'
|
||||
NC='\033[0m'
|
||||
|
||||
show_menu() {
|
||||
echo -e "${BLUE}🤖 AI Server - Управление моделями${NC}"
|
||||
echo "=================================="
|
||||
echo "1. Показать установленные модели"
|
||||
echo "2. Установить рекомендуемые модели для RTX 2060"
|
||||
echo "3. Установить конкретную модель"
|
||||
echo "4. Удалить модель"
|
||||
echo "5. Тестировать модель"
|
||||
echo "6. Показать использование VRAM"
|
||||
echo "7. Рекомендации по моделям"
|
||||
echo "8. Выход"
|
||||
echo ""
|
||||
}
|
||||
|
||||
list_models() {
|
||||
echo -e "${PURPLE}📦 Установленные модели:${NC}"
|
||||
sudo -u aiserver ollama list
|
||||
echo ""
|
||||
|
||||
if command -v nvidia-smi &> /dev/null; then
|
||||
echo -e "${PURPLE}💾 Использование VRAM:${NC}"
|
||||
nvidia-smi --query-gpu=memory.used,memory.total --format=csv,noheader,nounits | \
|
||||
awk -F', ' '{printf "Используется: %d MB / %d MB (%.1f%%)\n", $1, $2, ($1/$2)*100}'
|
||||
fi
|
||||
echo ""
|
||||
}
|
||||
|
||||
install_recommended() {
|
||||
echo -e "${YELLOW}🎯 Установка рекомендуемых моделей для RTX 2060...${NC}"
|
||||
echo ""
|
||||
|
||||
models=("llama3.2:1b" "llama3.2:3b" "codellama:7b")
|
||||
descriptions=("Быстрая модель (1.3GB)" "Оптимальная модель (2GB)" "Модель для кода (3.8GB)")
|
||||
|
||||
for i in "${!models[@]}"; do
|
||||
model="${models[$i]}"
|
||||
desc="${descriptions[$i]}"
|
||||
|
||||
echo -e "${BLUE}Устанавливаю: $model - $desc${NC}"
|
||||
sudo -u aiserver ollama pull "$model"
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo -e "${GREEN}✅ $model установлена${NC}"
|
||||
else
|
||||
echo -e "${RED}❌ Ошибка установки $model${NC}"
|
||||
fi
|
||||
echo ""
|
||||
done
|
||||
}
|
||||
|
||||
install_custom() {
|
||||
echo -e "${YELLOW}Введите название модели (например: llama3.2:3b):${NC}"
|
||||
read -r model_name
|
||||
|
||||
if [[ -z "$model_name" ]]; then
|
||||
echo -e "${RED}❌ Название модели не может быть пустым${NC}"
|
||||
return
|
||||
fi
|
||||
|
||||
echo -e "${BLUE}Установка модели: $model_name${NC}"
|
||||
echo -e "${YELLOW}Это может занять несколько минут...${NC}"
|
||||
|
||||
sudo -u aiserver ollama pull "$model_name"
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo -e "${GREEN}✅ Модель $model_name успешно установлена${NC}"
|
||||
else
|
||||
echo -e "${RED}❌ Ошибка установки модели $model_name${NC}"
|
||||
fi
|
||||
}
|
||||
|
||||
remove_model() {
|
||||
echo -e "${PURPLE}📦 Доступные модели для удаления:${NC}"
|
||||
sudo -u aiserver ollama list
|
||||
echo ""
|
||||
|
||||
echo -e "${YELLOW}Введите название модели для удаления:${NC}"
|
||||
read -r model_name
|
||||
|
||||
if [[ -z "$model_name" ]]; then
|
||||
echo -e "${RED}❌ Название модели не может быть пустым${NC}"
|
||||
return
|
||||
fi
|
||||
|
||||
echo -e "${YELLOW}⚠️ Удалить модель $model_name? (y/N):${NC}"
|
||||
read -r confirm
|
||||
|
||||
if [[ $confirm =~ ^[Yy]$ ]]; then
|
||||
sudo -u aiserver ollama rm "$model_name"
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo -e "${GREEN}✅ Модель $model_name удалена${NC}"
|
||||
else
|
||||
echo -e "${RED}❌ Ошибка удаления модели $model_name${NC}"
|
||||
fi
|
||||
else
|
||||
echo -e "${BLUE}Отменено${NC}"
|
||||
fi
|
||||
}
|
||||
|
||||
test_model() {
|
||||
echo -e "${PURPLE}📦 Доступные модели:${NC}"
|
||||
sudo -u aiserver ollama list
|
||||
echo ""
|
||||
|
||||
echo -e "${YELLOW}Введите название модели для тестирования:${NC}"
|
||||
read -r model_name
|
||||
|
||||
if [[ -z "$model_name" ]]; then
|
||||
echo -e "${RED}❌ Название модели не может быть пустым${NC}"
|
||||
return
|
||||
fi
|
||||
|
||||
echo -e "${BLUE}Тестирование модели: $model_name${NC}"
|
||||
echo -e "${YELLOW}Задаю тестовый вопрос...${NC}"
|
||||
|
||||
sudo -u aiserver ollama run "$model_name" "Привет! Как дела? Ответь кратко."
|
||||
}
|
||||
|
||||
show_vram_usage() {
|
||||
if command -v nvidia-smi &> /dev/null; then
|
||||
echo -e "${PURPLE}🎮 Информация о GPU:${NC}"
|
||||
nvidia-smi --query-gpu=name,memory.used,memory.total,utilization.gpu,temperature.gpu --format=csv,noheader
|
||||
echo ""
|
||||
|
||||
echo -e "${PURPLE}📊 Детальное использование VRAM:${NC}"
|
||||
nvidia-smi
|
||||
else
|
||||
echo -e "${RED}❌ NVIDIA GPU не найден или драйверы не установлены${NC}"
|
||||
fi
|
||||
}
|
||||
|
||||
show_recommendations() {
|
||||
echo -e "${BLUE}🎯 Рекомендации по моделям для RTX 2060 (6GB VRAM):${NC}"
|
||||
echo ""
|
||||
|
||||
echo -e "${GREEN}🥇 ЛУЧШИЙ ВЫБОР:${NC}"
|
||||
echo " • llama3.2:3b (2GB VRAM) - оптимальный баланс скорости и качества"
|
||||
echo ""
|
||||
|
||||
echo -e "${YELLOW}🥈 БЫСТРЫЕ МОДЕЛИ:${NC}"
|
||||
echo " • llama3.2:1b (1.3GB VRAM) - максимальная скорость"
|
||||
echo ""
|
||||
|
||||
echo -e "${PURPLE}🥉 СПЕЦИАЛИЗИРОВАННЫЕ:${NC}"
|
||||
echo " • codellama:7b (3.8GB VRAM) - для программирования"
|
||||
echo " • mistral:7b (4.1GB VRAM) - высокое качество (почти предел)"
|
||||
echo ""
|
||||
|
||||
echo -e "${RED}❌ НЕ РЕКОМЕНДУЕТСЯ:${NC}"
|
||||
echo " • llama3:8b - требует 8GB+ VRAM"
|
||||
echo " • llama3:70b - требует 40GB+ VRAM"
|
||||
echo " • codellama:34b - требует 20GB+ VRAM"
|
||||
echo ""
|
||||
|
||||
echo -e "${CYAN}💡 СОВЕТЫ:${NC}"
|
||||
echo " • Не устанавливайте много больших моделей одновременно"
|
||||
echo " • Мониторьте температуру GPU (ai-status)"
|
||||
echo " • При перегреве используйте меньшие модели"
|
||||
echo " • Для продакшена рекомендуется llama3.2:3b"
|
||||
}
|
||||
|
||||
# Основной цикл
|
||||
main() {
|
||||
while true; do
|
||||
show_menu
|
||||
echo -e "${YELLOW}Выберите опцию (1-8):${NC}"
|
||||
read -r choice
|
||||
|
||||
case $choice in
|
||||
1)
|
||||
list_models
|
||||
;;
|
||||
2)
|
||||
install_recommended
|
||||
;;
|
||||
3)
|
||||
install_custom
|
||||
;;
|
||||
4)
|
||||
remove_model
|
||||
;;
|
||||
5)
|
||||
test_model
|
||||
;;
|
||||
6)
|
||||
show_vram_usage
|
||||
;;
|
||||
7)
|
||||
show_recommendations
|
||||
;;
|
||||
8)
|
||||
echo -e "${GREEN}👋 До свидания!${NC}"
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
echo -e "${RED}❌ Неверный выбор. Попробуйте снова.${NC}"
|
||||
;;
|
||||
esac
|
||||
|
||||
echo ""
|
||||
echo -e "${CYAN}Нажмите Enter для продолжения...${NC}"
|
||||
read -r
|
||||
clear
|
||||
done
|
||||
}
|
||||
|
||||
# Проверка прав
|
||||
if [[ ! -d "/opt/ai-server" ]]; then
|
||||
echo -e "${RED}❌ AI Server не установлен. Запустите сначала install-ubuntu.sh${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
clear
|
||||
main
|
||||
119
scripts/start.sh
Normal file
119
scripts/start.sh
Normal file
@@ -0,0 +1,119 @@
|
||||
#!/bin/bash
|
||||
|
||||
# AI Server Start Script for Ubuntu
|
||||
# Optimized for RTX 2060
|
||||
|
||||
set -e
|
||||
|
||||
# Colors
|
||||
GREEN='\033[0;32m'
|
||||
RED='\033[0;31m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m'
|
||||
|
||||
echo -e "${BLUE}🚀 Запуск AI Server...${NC}"
|
||||
|
||||
# Check if running as root for system services
|
||||
if [[ $EUID -eq 0 ]]; then
|
||||
echo -e "${YELLOW}Запуск системных сервисов...${NC}"
|
||||
|
||||
# Start Ollama service
|
||||
echo "🤖 Запуск Ollama..."
|
||||
systemctl start ollama
|
||||
|
||||
# Wait for Ollama to start
|
||||
sleep 5
|
||||
|
||||
# Check Ollama status
|
||||
if systemctl is-active --quiet ollama; then
|
||||
echo -e "${GREEN}✅ Ollama запущен${NC}"
|
||||
else
|
||||
echo -e "${RED}❌ Ошибка запуска Ollama${NC}"
|
||||
journalctl -u ollama --no-pager -l | tail -10
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Start Web UI service
|
||||
echo "🌐 Запуск веб-интерфейса..."
|
||||
systemctl start ai-server-webui
|
||||
|
||||
# Wait for containers to start
|
||||
sleep 10
|
||||
|
||||
# Check Web UI status
|
||||
if systemctl is-active --quiet ai-server-webui; then
|
||||
echo -e "${GREEN}✅ Веб-интерфейс запущен${NC}"
|
||||
else
|
||||
echo -e "${RED}❌ Ошибка запуска веб-интерфейса${NC}"
|
||||
journalctl -u ai-server-webui --no-pager -l | tail -10
|
||||
exit 1
|
||||
fi
|
||||
|
||||
else
|
||||
echo -e "${YELLOW}Запуск пользовательских сервисов...${NC}"
|
||||
|
||||
# Change to working directory
|
||||
cd /opt/ai-server
|
||||
|
||||
# Check if Ollama is running
|
||||
echo "🤖 Проверка Ollama..."
|
||||
if ! curl -s http://localhost:11434 >/dev/null 2>&1; then
|
||||
echo -e "${YELLOW}Ollama не отвечает, попытка запуска...${NC}"
|
||||
sudo systemctl start ollama
|
||||
sleep 5
|
||||
|
||||
# Check again
|
||||
if ! curl -s http://localhost:11434 >/dev/null 2>&1; then
|
||||
echo -e "${RED}❌ Не удается запустить Ollama${NC}"
|
||||
echo "Попробуйте: sudo systemctl status ollama"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
echo -e "${GREEN}✅ Ollama доступен${NC}"
|
||||
|
||||
# Start web interface containers
|
||||
echo "🌐 Запуск веб-интерфейса..."
|
||||
docker compose up -d
|
||||
|
||||
# Wait for containers
|
||||
sleep 10
|
||||
|
||||
# Check container status
|
||||
if docker compose ps | grep -q "running"; then
|
||||
echo -e "${GREEN}✅ Веб-интерфейс запущен${NC}"
|
||||
else
|
||||
echo -e "${RED}❌ Ошибка запуска контейнеров${NC}"
|
||||
docker compose logs --tail=20
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# Get server IP
|
||||
SERVER_IP=$(hostname -I | awk '{print $1}')
|
||||
|
||||
echo ""
|
||||
echo -e "${GREEN}🎉 AI Server успешно запущен!${NC}"
|
||||
echo ""
|
||||
echo -e "${BLUE}📍 Доступные сервисы:${NC}"
|
||||
echo " 🌐 Веб-интерфейс: http://${SERVER_IP}:3000"
|
||||
echo " 🤖 Ollama API: http://${SERVER_IP}:11434"
|
||||
echo " 📊 Portainer: http://${SERVER_IP}:9000 (если включен)"
|
||||
echo ""
|
||||
echo -e "${BLUE}💡 GPU информация:${NC}"
|
||||
if command -v nvidia-smi &> /dev/null; then
|
||||
nvidia-smi --query-gpu=name,memory.used,memory.total,utilization.gpu --format=csv,noheader,nounits 2>/dev/null | \
|
||||
awk -F', ' '{printf " GPU: %s\n VRAM: %d/%d MB (%.1f%%)\n Загрузка: %d%%\n", $1, $2, $3, ($2/$3)*100, $4}'
|
||||
else
|
||||
echo " ❌ NVIDIA GPU недоступен"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo -e "${YELLOW}📋 Полезные команды:${NC}"
|
||||
echo " ai-status - проверка статуса"
|
||||
echo " ai-stop - остановка сервера"
|
||||
echo " ai-logs - просмотр логов"
|
||||
echo " ai-models - список моделей"
|
||||
|
||||
echo ""
|
||||
echo -e "${GREEN}Готово к работе! 🎯${NC}"
|
||||
202
scripts/status.sh
Normal file
202
scripts/status.sh
Normal file
@@ -0,0 +1,202 @@
|
||||
#!/bin/bash
|
||||
|
||||
# AI Server Status Script for Ubuntu
|
||||
# RTX 2060 Optimized
|
||||
|
||||
# Colors
|
||||
GREEN='\033[0;32m'
|
||||
RED='\033[0;31m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
PURPLE='\033[0;35m'
|
||||
CYAN='\033[0;36m'
|
||||
NC='\033[0m'
|
||||
|
||||
echo -e "${BLUE}📊 AI Server Status Report${NC}"
|
||||
echo "========================================"
|
||||
|
||||
# System Information
|
||||
echo -e "${PURPLE}🖥️ Система:${NC}"
|
||||
echo " Хост: $(hostname)"
|
||||
echo " IP: $(hostname -I | awk '{print $1}')"
|
||||
echo " Время работы: $(uptime -p)"
|
||||
echo " Дата: $(date '+%Y-%m-%d %H:%M:%S')"
|
||||
|
||||
# GPU Status
|
||||
echo ""
|
||||
echo -e "${PURPLE}🎮 GPU (RTX 2060):${NC}"
|
||||
if command -v nvidia-smi &> /dev/null; then
|
||||
# GPU basic info
|
||||
GPU_INFO=$(nvidia-smi --query-gpu=name,driver_version,memory.used,memory.total,utilization.gpu,temperature.gpu --format=csv,noheader,nounits)
|
||||
if [[ -n "$GPU_INFO" ]]; then
|
||||
echo "$GPU_INFO" | while IFS=', ' read -r name driver mem_used mem_total util temp; do
|
||||
echo " ✅ Модель: $name"
|
||||
echo " 📦 Драйвер: $driver"
|
||||
echo " 🧠 VRAM: ${mem_used}MB / ${mem_total}MB ($(( (mem_used * 100) / mem_total ))%)"
|
||||
echo " ⚡ Загрузка: ${util}%"
|
||||
echo " 🌡️ Температура: ${temp}°C"
|
||||
|
||||
# Warning thresholds
|
||||
if (( temp > 80 )); then
|
||||
echo -e " ${RED}⚠️ ВНИМАНИЕ: Высокая температура GPU!${NC}"
|
||||
fi
|
||||
if (( util > 90 )); then
|
||||
echo -e " ${YELLOW}⚠️ GPU сильно загружен${NC}"
|
||||
fi
|
||||
done
|
||||
else
|
||||
echo -e " ${RED}❌ Не удается получить информацию о GPU${NC}"
|
||||
fi
|
||||
else
|
||||
echo -e " ${RED}❌ NVIDIA драйверы не установлены${NC}"
|
||||
fi
|
||||
|
||||
# Docker Status
|
||||
echo ""
|
||||
echo -e "${PURPLE}🐳 Docker:${NC}"
|
||||
if command -v docker &> /dev/null; then
|
||||
if docker info >/dev/null 2>&1; then
|
||||
echo -e " ✅ Docker запущен"
|
||||
echo " 📦 Версия: $(docker --version | cut -d' ' -f3 | tr -d ',')"
|
||||
|
||||
# Check NVIDIA Docker support
|
||||
if docker run --rm --gpus all nvidia/cuda:11.0.3-base-ubuntu20.04 nvidia-smi >/dev/null 2>&1; then
|
||||
echo -e " ✅ NVIDIA GPU поддержка включена"
|
||||
else
|
||||
echo -e " ${YELLOW}⚠️ NVIDIA GPU поддержка не настроена${NC}"
|
||||
fi
|
||||
else
|
||||
echo -e " ${RED}❌ Docker не запущен${NC}"
|
||||
fi
|
||||
else
|
||||
echo -e " ${RED}❌ Docker не установлен${NC}"
|
||||
fi
|
||||
|
||||
# Ollama Status
|
||||
echo ""
|
||||
echo -e "${PURPLE}🤖 Ollama:${NC}"
|
||||
if systemctl is-active --quiet ollama; then
|
||||
echo -e " ✅ Сервис запущен"
|
||||
echo " 📍 Адрес: http://localhost:11434"
|
||||
|
||||
# Test connection
|
||||
if curl -s http://localhost:11434 >/dev/null 2>&1; then
|
||||
echo -e " ✅ API доступен"
|
||||
|
||||
# List models
|
||||
echo " 📦 Установленные модели:"
|
||||
sudo -u aiserver ollama list 2>/dev/null | tail -n +2 | while read -r line; do
|
||||
if [[ -n "$line" ]]; then
|
||||
model_name=$(echo "$line" | awk '{print $1}')
|
||||
model_size=$(echo "$line" | awk '{print $2}')
|
||||
echo " • $model_name ($model_size)"
|
||||
fi
|
||||
done
|
||||
|
||||
else
|
||||
echo -e " ${RED}❌ API недоступен${NC}"
|
||||
fi
|
||||
|
||||
# Service logs (last 3 lines)
|
||||
echo " 📋 Последние логи:"
|
||||
sudo journalctl -u ollama --no-pager -n 3 | tail -n +4 | sed 's/^/ /'
|
||||
|
||||
else
|
||||
echo -e " ${RED}❌ Сервис остановлен${NC}"
|
||||
fi
|
||||
|
||||
# Web UI Status
|
||||
echo ""
|
||||
echo -e "${PURPLE}🌐 Веб-интерфейс:${NC}"
|
||||
cd /opt/ai-server 2>/dev/null || {
|
||||
echo -e " ${RED}❌ Рабочая директория не найдена${NC}"
|
||||
exit 1
|
||||
}
|
||||
|
||||
if docker compose ps 2>/dev/null | grep -q "running"; then
|
||||
echo -e " ✅ Контейнеры запущены"
|
||||
echo " 📍 Адрес: http://$(hostname -I | awk '{print $1}'):3000"
|
||||
|
||||
# Container details
|
||||
echo " 📦 Статус контейнеров:"
|
||||
docker compose ps --format "table {{.Service}}\t{{.Status}}\t{{.Ports}}" 2>/dev/null | tail -n +2 | while read -r line; do
|
||||
if [[ -n "$line" ]]; then
|
||||
echo " $line"
|
||||
fi
|
||||
done
|
||||
|
||||
# Resource usage
|
||||
echo " 💻 Использование ресурсов:"
|
||||
docker stats --no-stream --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}" 2>/dev/null | \
|
||||
grep "ai-server" | while read -r line; do
|
||||
echo " $line"
|
||||
done
|
||||
|
||||
else
|
||||
echo -e " ${RED}❌ Контейнеры не запущены${NC}"
|
||||
fi
|
||||
|
||||
# System Resources
|
||||
echo ""
|
||||
echo -e "${PURPLE}💾 Системные ресурсы:${NC}"
|
||||
|
||||
# CPU
|
||||
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)
|
||||
echo " 🧮 CPU: ${CPU_USAGE}%"
|
||||
|
||||
# Memory
|
||||
MEM_INFO=$(free -h | grep "Mem:")
|
||||
MEM_TOTAL=$(echo $MEM_INFO | awk '{print $2}')
|
||||
MEM_USED=$(echo $MEM_INFO | awk '{print $3}')
|
||||
MEM_PERCENT=$(free | grep Mem | awk '{printf("%.1f", ($3/$2) * 100.0)}')
|
||||
echo " 🧠 RAM: ${MEM_USED}/${MEM_TOTAL} (${MEM_PERCENT}%)"
|
||||
|
||||
# Disk
|
||||
DISK_INFO=$(df -h /opt/ai-server 2>/dev/null | tail -1)
|
||||
if [[ -n "$DISK_INFO" ]]; then
|
||||
DISK_USED=$(echo $DISK_INFO | awk '{print $3}')
|
||||
DISK_TOTAL=$(echo $DISK_INFO | awk '{print $2}')
|
||||
DISK_PERCENT=$(echo $DISK_INFO | awk '{print $5}')
|
||||
echo " 💽 Диск: ${DISK_USED}/${DISK_TOTAL} (${DISK_PERCENT})"
|
||||
fi
|
||||
|
||||
# Network
|
||||
echo " 🌐 Сетевые порты:"
|
||||
netstat -tln 2>/dev/null | grep -E ":3000|:11434|:9000" | while read -r line; do
|
||||
port=$(echo $line | awk '{print $4}' | cut -d':' -f2)
|
||||
case $port in
|
||||
3000) echo " ✅ 3000 (Web UI) - активен" ;;
|
||||
11434) echo " ✅ 11434 (Ollama) - активен" ;;
|
||||
9000) echo " ✅ 9000 (Portainer) - активен" ;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Recommendations
|
||||
echo ""
|
||||
echo -e "${CYAN}💡 Рекомендации для RTX 2060:${NC}"
|
||||
|
||||
# Check GPU memory usage
|
||||
if command -v nvidia-smi &> /dev/null; then
|
||||
GPU_MEM_USED=$(nvidia-smi --query-gpu=memory.used --format=csv,noheader,nounits)
|
||||
if (( GPU_MEM_USED > 5000 )); then
|
||||
echo -e " ${YELLOW}⚠️ VRAM почти заполнена. Рассмотрите использование меньших моделей${NC}"
|
||||
echo " • llama3.2:1b (1.3GB) - быстрая модель"
|
||||
echo " • llama3.2:3b (2GB) - оптимальная для RTX 2060"
|
||||
elif (( GPU_MEM_USED < 1000 )); then
|
||||
echo -e " ${GREEN}✅ VRAM свободна. Можно использовать более крупные модели${NC}"
|
||||
echo " • codellama:7b (3.8GB) - для программирования"
|
||||
echo " • mistral:7b (4.1GB) - универсальная модель"
|
||||
fi
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "========================================"
|
||||
echo -e "${GREEN}📋 Команды управления:${NC}"
|
||||
echo " ai-start - запуск сервера"
|
||||
echo " ai-stop - остановка сервера"
|
||||
echo " ai-logs - просмотр логов"
|
||||
echo " ai-models - управление моделями"
|
||||
|
||||
# Show last update time
|
||||
echo ""
|
||||
echo -e "${CYAN}Обновлено: $(date '+%H:%M:%S')${NC}"
|
||||
98
scripts/stop.sh
Normal file
98
scripts/stop.sh
Normal file
@@ -0,0 +1,98 @@
|
||||
#!/bin/bash
|
||||
|
||||
# AI Server Stop Script for Ubuntu
|
||||
|
||||
set -e
|
||||
|
||||
# Colors
|
||||
GREEN='\033[0;32m'
|
||||
RED='\033[0;31m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m'
|
||||
|
||||
echo -e "${BLUE}⏹️ Остановка AI Server...${NC}"
|
||||
|
||||
# Check if running as root for system services
|
||||
if [[ $EUID -eq 0 ]]; then
|
||||
echo -e "${YELLOW}Остановка системных сервисов...${NC}"
|
||||
|
||||
# Stop Web UI service
|
||||
echo "🌐 Остановка веб-интерфейса..."
|
||||
if systemctl is-active --quiet ai-server-webui; then
|
||||
systemctl stop ai-server-webui
|
||||
echo -e "${GREEN}✅ Веб-интерфейс остановлен${NC}"
|
||||
else
|
||||
echo -e "${YELLOW}⚠️ Веб-интерфейс не был запущен${NC}"
|
||||
fi
|
||||
|
||||
# Stop Ollama service (optional)
|
||||
read -p "Остановить Ollama сервер? (y/N): " -n 1 -r
|
||||
echo
|
||||
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||||
echo "🤖 Остановка Ollama..."
|
||||
systemctl stop ollama
|
||||
echo -e "${GREEN}✅ Ollama остановлен${NC}"
|
||||
else
|
||||
echo -e "${YELLOW}⚠️ Ollama оставлен запущенным${NC}"
|
||||
fi
|
||||
|
||||
else
|
||||
echo -e "${YELLOW}Остановка пользовательских сервисов...${NC}"
|
||||
|
||||
# Change to working directory
|
||||
cd /opt/ai-server 2>/dev/null || {
|
||||
echo -e "${RED}❌ Не найдена рабочая директория /opt/ai-server${NC}"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Stop web interface containers
|
||||
echo "🌐 Остановка веб-интерфейса..."
|
||||
if docker compose ps | grep -q "running"; then
|
||||
docker compose down
|
||||
echo -e "${GREEN}✅ Контейнеры остановлены${NC}"
|
||||
else
|
||||
echo -e "${YELLOW}⚠️ Контейнеры не были запущены${NC}"
|
||||
fi
|
||||
|
||||
# Optional: Stop Ollama if requested
|
||||
if systemctl is-active --quiet ollama; then
|
||||
read -p "Остановить Ollama сервер? (y/N): " -n 1 -r
|
||||
echo
|
||||
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||||
echo "🤖 Остановка Ollama..."
|
||||
sudo systemctl stop ollama
|
||||
echo -e "${GREEN}✅ Ollama остановлен${NC}"
|
||||
else
|
||||
echo -e "${YELLOW}⚠️ Ollama оставлен запущенным${NC}"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# Clean up unused Docker resources
|
||||
echo "🧹 Очистка неиспользуемых ресурсов..."
|
||||
docker system prune -f >/dev/null 2>&1 || true
|
||||
|
||||
# Show final status
|
||||
echo ""
|
||||
echo -e "${GREEN}✅ AI Server остановлен!${NC}"
|
||||
echo ""
|
||||
echo -e "${BLUE}📊 Текущий статус:${NC}"
|
||||
|
||||
# Check Ollama
|
||||
if systemctl is-active --quiet ollama; then
|
||||
echo " 🤖 Ollama: запущен"
|
||||
else
|
||||
echo " 🤖 Ollama: остановлен"
|
||||
fi
|
||||
|
||||
# Check containers
|
||||
cd /opt/ai-server 2>/dev/null || exit 0
|
||||
if docker compose ps 2>/dev/null | grep -q "running"; then
|
||||
echo " 🌐 Веб-интерфейс: запущен"
|
||||
else
|
||||
echo " 🌐 Веб-интерфейс: остановлен"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo -e "${YELLOW}💡 Для запуска используйте: ai-start${NC}"
|
||||
Reference in New Issue
Block a user