Files
go-lcg/Dockerfiles/OllamaServer/entrypoint.sh
2025-11-08 16:02:35 +06:00

172 lines
5.3 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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