test server

This commit is contained in:
2025-09-22 15:07:35 +05:00
commit a8f09eb4ea
11 changed files with 1843 additions and 0 deletions

202
scripts/status.sh Normal file
View 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}"