119 lines
3.7 KiB
Bash
119 lines
3.7 KiB
Bash
#!/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}" |