mirror of
https://github.com/Direct-Dev-Ru/go-lcg.git
synced 2025-11-15 17:20:00 +00:00
172 lines
5.3 KiB
Bash
Executable File
172 lines
5.3 KiB
Bash
Executable File
#!/bin/bash
|
||
set -e
|
||
|
||
# Цвета для вывода
|
||
RED='\033[0;31m'
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
BLUE='\033[0;34m'
|
||
NC='\033[0m' # No Color
|
||
|
||
# Функция для логирования
|
||
log() {
|
||
echo -e "${GREEN}[$(date +'%Y-%m-%d %H:%M:%S')]${NC} $1"
|
||
}
|
||
|
||
error() {
|
||
echo -e "${RED}[ERROR]${NC} $1" >&2
|
||
}
|
||
|
||
warn() {
|
||
echo -e "${YELLOW}[WARN]${NC} $1"
|
||
}
|
||
|
||
info() {
|
||
echo -e "${BLUE}[INFO]${NC} $1"
|
||
}
|
||
|
||
# Обработка сигналов для корректного завершения
|
||
cleanup() {
|
||
log "Получен сигнал завершения, останавливаем сервисы..."
|
||
if [ ! -z "$LCG_PID" ]; then
|
||
kill $LCG_PID 2>/dev/null || true
|
||
wait $LCG_PID 2>/dev/null || true
|
||
fi
|
||
if [ ! -z "$OLLAMA_PID" ]; then
|
||
kill $OLLAMA_PID 2>/dev/null || true
|
||
wait $OLLAMA_PID 2>/dev/null || true
|
||
fi
|
||
log "Сервисы остановлены"
|
||
exit 0
|
||
}
|
||
|
||
trap cleanup SIGTERM SIGINT
|
||
|
||
# Проверка наличия бинарника lcg
|
||
if [ ! -f /usr/local/bin/lcg ]; then
|
||
error "Бинарник lcg не найден в /usr/local/bin/lcg"
|
||
exit 1
|
||
fi
|
||
|
||
# Проверка наличия Ollama
|
||
if [ ! -f /usr/local/bin/ollama ]; then
|
||
error "Ollama не найден в /usr/local/bin/ollama"
|
||
exit 1
|
||
fi
|
||
|
||
# Создаем необходимые директории
|
||
mkdir -p "${LCG_RESULT_FOLDER:-/app/data/results}"
|
||
mkdir -p "${LCG_PROMPT_FOLDER:-/app/data/prompts}"
|
||
mkdir -p "${LCG_CONFIG_FOLDER:-/app/data/config}"
|
||
|
||
# Настройка переменных окружения для Ollama
|
||
export OLLAMA_HOST="${OLLAMA_HOST:-0.0.0.0}"
|
||
export OLLAMA_PORT="${OLLAMA_PORT:-11434}"
|
||
export OLLAMA_ORIGINS="*"
|
||
|
||
# Настройка переменных окружения для LCG
|
||
export LCG_PROVIDER="${LCG_PROVIDER:-ollama}"
|
||
export LCG_HOST="${LCG_HOST:-http://127.0.0.1:11434/}"
|
||
export LCG_MODEL="${LCG_MODEL:-codegeex4}"
|
||
export LCG_RESULT_FOLDER="${LCG_RESULT_FOLDER:-/app/data/results}"
|
||
export LCG_PROMPT_FOLDER="${LCG_PROMPT_FOLDER:-/app/data/prompts}"
|
||
export LCG_CONFIG_FOLDER="${LCG_CONFIG_FOLDER:-/app/data/config}"
|
||
export LCG_SERVER_HOST="${LCG_SERVER_HOST:-0.0.0.0}"
|
||
export LCG_SERVER_PORT="${LCG_SERVER_PORT:-8080}"
|
||
export LCG_SERVER_ALLOW_HTTP="${LCG_SERVER_ALLOW_HTTP:-true}"
|
||
|
||
log "=========================================="
|
||
log "Запуск LCG с Ollama сервером"
|
||
log "=========================================="
|
||
info "LCG Provider: $LCG_PROVIDER"
|
||
info "LCG Host: $LCG_HOST"
|
||
info "LCG Model: $LCG_MODEL"
|
||
info "LCG Server: http://${LCG_SERVER_HOST}:${LCG_SERVER_PORT}"
|
||
info "Ollama Host: $OLLAMA_HOST:$OLLAMA_PORT"
|
||
log "=========================================="
|
||
|
||
# Запускаем Ollama сервер в фоне
|
||
log "Запуск Ollama сервера..."
|
||
/usr/local/bin/ollama serve &
|
||
OLLAMA_PID=$!
|
||
|
||
# Ждем, пока Ollama запустится
|
||
log "Ожидание запуска Ollama сервера..."
|
||
sleep 5
|
||
|
||
# Проверяем, что Ollama запущен
|
||
if ! kill -0 $OLLAMA_PID 2>/dev/null; then
|
||
error "Ollama сервер не запустился"
|
||
exit 1
|
||
fi
|
||
|
||
# Проверяем доступность Ollama API
|
||
max_attempts=30
|
||
attempt=0
|
||
while [ $attempt -lt $max_attempts ]; do
|
||
# Проверяем через localhost, так как OLLAMA_HOST может быть 0.0.0.0
|
||
if curl -s -f "http://127.0.0.1:${OLLAMA_PORT}/api/tags" > /dev/null 2>&1; then
|
||
log "Ollama сервер готов!"
|
||
break
|
||
fi
|
||
attempt=$((attempt + 1))
|
||
if [ $attempt -eq $max_attempts ]; then
|
||
error "Ollama сервер не отвечает после $max_attempts попыток"
|
||
exit 1
|
||
fi
|
||
sleep 1
|
||
done
|
||
|
||
# Запускаем LCG сервер в фоне
|
||
log "Запуск LCG сервера..."
|
||
/usr/local/bin/lcg serve \
|
||
--host "${LCG_SERVER_HOST}" \
|
||
--port "${LCG_SERVER_PORT}" &
|
||
LCG_PID=$!
|
||
|
||
# Ждем, пока LCG запустится
|
||
sleep 3
|
||
|
||
# Проверяем, что LCG запущен
|
||
if ! kill -0 $LCG_PID 2>/dev/null; then
|
||
error "LCG сервер не запустился"
|
||
kill $OLLAMA_PID 2>/dev/null || true
|
||
exit 1
|
||
fi
|
||
|
||
log "LCG сервер запущен на http://${LCG_SERVER_HOST}:${LCG_SERVER_PORT}"
|
||
log "Ollama сервер доступен на http://${OLLAMA_HOST}:${OLLAMA_PORT}"
|
||
log "=========================================="
|
||
log "Сервисы запущены и готовы к работе!"
|
||
log "=========================================="
|
||
|
||
# Функция для проверки здоровья процессов
|
||
health_check() {
|
||
while true; do
|
||
# Проверяем Ollama
|
||
if ! kill -0 $OLLAMA_PID 2>/dev/null; then
|
||
error "Ollama процесс завершился неожиданно"
|
||
kill $LCG_PID 2>/dev/null || true
|
||
exit 1
|
||
fi
|
||
|
||
# Проверяем LCG
|
||
if ! kill -0 $LCG_PID 2>/dev/null; then
|
||
error "LCG процесс завершился неожиданно"
|
||
kill $OLLAMA_PID 2>/dev/null || true
|
||
exit 1
|
||
fi
|
||
|
||
sleep 10
|
||
done
|
||
}
|
||
|
||
# Запускаем проверку здоровья в фоне
|
||
health_check &
|
||
HEALTH_CHECK_PID=$!
|
||
|
||
# Ждем завершения процессов
|
||
wait $LCG_PID $OLLAMA_PID
|
||
kill $HEALTH_CHECK_PID 2>/dev/null || true
|
||
|