-
🔍
-
Найти человека
+
+
🤖
+
Спросить у ИИ-ассистента
Введите имя или фамилию в строку поиска, чтобы найти информацию о жертве репрессий.
@@ -107,7 +107,7 @@
Статистика
diff --git a/front/list.html b/front/list.html
index aad6be8..59819b6 100644
--- a/front/list.html
+++ b/front/list.html
@@ -85,7 +85,7 @@ Статистика
diff --git a/front/suggestions.html b/front/suggestions.html
index 206c675..4d63100 100644
--- a/front/suggestions.html
+++ b/front/suggestions.html
@@ -83,7 +83,7 @@ Мои предложения
diff --git a/quick_test_ollama.sh b/quick_test_ollama.sh
index 08578ad..006b6c5 100755
--- a/quick_test_ollama.sh
+++ b/quick_test_ollama.sh
@@ -3,6 +3,19 @@
set -e
+compose_exec() {
+ if docker compose version >/dev/null 2>&1; then
+ docker compose exec -T python_backend "$@"
+ return
+ fi
+ if command -v docker-compose >/dev/null 2>&1; then
+ docker-compose exec -T python_backend "$@"
+ return
+ fi
+ echo " ❌ Docker Compose not found"
+ exit 1
+}
+
echo "╔════════════════════════════════════════════════════════╗"
echo "║ ПРОВЕРКА ИНТЕГРАЦИИ OLLAMA С RAG ║"
echo "╚════════════════════════════════════════════════════════╝"
@@ -35,12 +48,12 @@ check
# 4. Конфигурация
echo "4️⃣ Проверка конфигурации backend..."
-docker exec hackathon_python env | grep -q "RAG_LLM_PROVIDER=ollama"
+compose_exec env | grep -q "RAG_LLM_PROVIDER=ollama"
check
# 5. RAG модули
echo "5️⃣ Проверка RAG модулей..."
-docker exec hackathon_python python3 -c "from rag_engine import _build_llm, _build_embeddings; _build_llm(); _build_embeddings()" 2>&1 | grep -v "Warning" | grep -v "FutureWarning" | grep -v "Deprecation" > /dev/null
+compose_exec python3 -c "from rag_engine import _build_llm, _build_embeddings; _build_llm(); _build_embeddings()" 2>&1 | grep -v "Warning" | grep -v "FutureWarning" | grep -v "Deprecation" > /dev/null
check
echo ""
diff --git a/scripts/deploy.sh b/scripts/deploy.sh
index 83391f4..7a6c02d 100755
--- a/scripts/deploy.sh
+++ b/scripts/deploy.sh
@@ -18,19 +18,35 @@ echo "║ 🚀 ДЕПЛОЙ HACKATHON ПРОЕКТА С OLLAMA
echo "╚═══════════════════════════════════════════════════════════╝"
echo -e "${NC}"
-# Проверка, что скрипт запущен не от root
-if [ "$EUID" -eq 0 ]; then
- echo -e "${RED}❌ Не запускайте этот скрипт от root!${NC}"
- echo "Запустите от обычного пользователя с sudo правами:"
- echo " curl -fsSL https://raw.githubusercontent.com/DikiePercy/hackathon/biber-core/scripts/deploy.sh | bash"
- exit 1
+# Режим прав: root или sudo
+if [ "$EUID" -eq 0 ]; then
+ SUDO=""
+ RUN_USER="${SUDO_USER:-root}"
+ RUN_GROUP="${SUDO_USER:-root}"
+ echo -e "${YELLOW}ℹ️ Запуск от root: поддерживается${NC}"
+else
+ if ! command -v sudo >/dev/null 2>&1 || ! sudo -v; then
+ echo -e "${RED}❌ У пользователя нет sudo прав${NC}"
+ exit 1
+ fi
+ SUDO="sudo"
+ RUN_USER="$USER"
+ RUN_GROUP="$(id -gn "$USER")"
fi
-# Проверка наличия sudo
-if ! sudo -v; then
- echo -e "${RED}❌ У пользователя нет sudo прав${NC}"
+# Docker Compose helper
+compose_cmd() {
+ if $SUDO docker compose version >/dev/null 2>&1; then
+ $SUDO docker compose "$@"
+ return
+ fi
+ if command -v docker-compose >/dev/null 2>&1; then
+ $SUDO docker-compose "$@"
+ return
+ fi
+ echo -e "${RED}❌ Docker Compose не найден${NC}"
exit 1
-fi
+}
# Проверка системы
echo -e "${YELLOW}📋 Проверка системы...${NC}"
@@ -54,16 +70,16 @@ fi
# 1. Установка зависимостей
echo -e "${YELLOW}📦 Установка зависимостей...${NC}"
-sudo apt update
-sudo apt install -y git curl wget
+$SUDO apt update
+$SUDO apt install -y git curl wget
# Установка Docker
if ! command -v docker &> /dev/null; then
echo -e "${YELLOW}🐳 Установка Docker...${NC}"
- sudo apt install -y docker.io docker-compose-v2
- sudo systemctl enable docker
- sudo systemctl start docker
- sudo usermod -aG docker $USER
+ $SUDO apt install -y docker.io docker-compose-v2
+ $SUDO systemctl enable docker
+ $SUDO systemctl start docker
+ $SUDO usermod -aG "$RUN_USER"
echo -e "${GREEN}✅ Docker установлен${NC}"
else
echo -e "${GREEN}✅ Docker уже установлен${NC}"
@@ -80,17 +96,17 @@ fi
# 3. Настройка Ollama
echo -e "${YELLOW}⚙️ Настройка Ollama...${NC}"
-sudo mkdir -p /etc/systemd/system/ollama.service.d/
-sudo tee /etc/systemd/system/ollama.service.d/override.conf > /dev/null << 'EOF'
+$SUDO mkdir -p /etc/systemd/system/ollama.service.d/
+$SUDO tee /etc/systemd/system/ollama.service.d/override.conf > /dev/null << 'EOF'
[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"
Environment="OLLAMA_NUM_PARALLEL=2"
Environment="OLLAMA_MAX_LOADED_MODELS=1"
EOF
-sudo systemctl daemon-reload
-sudo systemctl enable ollama
-sudo systemctl restart ollama
+$SUDO systemctl daemon-reload
+$SUDO systemctl enable ollama
+$SUDO systemctl restart ollama
# Ждём запуска Ollama
sleep 3
@@ -131,7 +147,7 @@ if [ -d "$INSTALL_DIR" ]; then
read -p "Удалить и клонировать заново? (y/n) " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
- sudo rm -rf "$INSTALL_DIR"
+ $SUDO rm -rf "$INSTALL_DIR"
else
echo "Используем существующую директорию"
cd "$INSTALL_DIR"
@@ -140,19 +156,19 @@ if [ -d "$INSTALL_DIR" ]; then
fi
if [ ! -d "$INSTALL_DIR" ]; then
- sudo git clone https://github.com/DikiePercy/hackathon.git "$INSTALL_DIR"
+ $SUDO git clone https://github.com/DikiePercy/hackathon.git "$INSTALL_DIR"
fi
cd "$INSTALL_DIR"
-sudo chown -R $USER:$USER "$INSTALL_DIR"
+$SUDO chown -R "$RUN_USER:$RUN_GROUP" "$INSTALL_DIR"
git checkout biber-core
echo -e "${GREEN}✅ Проект клонирован${NC}"
# 6. Создание директорий для данных
echo -e "${YELLOW}📁 Создание директорий для данных...${NC}"
-sudo mkdir -p /srv/hackathon-data/{postgres,chroma,app}
-sudo chown -R $USER:$USER /srv/hackathon-data
+$SUDO mkdir -p /srv/hackathon-data/{postgres,chroma,app}
+$SUDO chown -R "$RUN_USER:$RUN_GROUP" /srv/hackathon-data
echo -e "${GREEN}✅ Директории созданы${NC}"
# 7. Настройка .env
@@ -169,6 +185,11 @@ if [ ! -f .env ]; then
sed -i "s/RAG_LLM_PROVIDER=.*/RAG_LLM_PROVIDER=ollama/" .env
sed -i "s/RAG_EMBEDDING_PROVIDER=.*/RAG_EMBEDDING_PROVIDER=ollama/" .env
sed -i "s/RAG_OLLAMA_MODEL=.*/RAG_OLLAMA_MODEL=$OLLAMA_MODEL/" .env
+ if grep -q '^OLLAMA_BASE_URL=' .env; then
+ sed -i 's|^OLLAMA_BASE_URL=.*$|OLLAMA_BASE_URL=http://host.docker.internal:11434|' .env
+ else
+ echo "OLLAMA_BASE_URL=http://host.docker.internal:11434" >> .env
+ fi
# Production настройки
sed -i "s/COOKIE_SECURE=.*/COOKIE_SECURE=false/" .env # Поменяйте на true если есть SSL
@@ -186,16 +207,20 @@ else
echo -e "${YELLOW}⚠️ .env уже существует, не изменяем${NC}"
fi
+# Нормализуем OLLAMA_BASE_URL и в уже существующем .env,
+# чтобы backend в Docker не ходил на localhost контейнера.
+if grep -q '^OLLAMA_BASE_URL=' .env; then
+ sed -i 's|^OLLAMA_BASE_URL=.*$|OLLAMA_BASE_URL=http://host.docker.internal:11434|' .env
+else
+ echo "OLLAMA_BASE_URL=http://host.docker.internal:11434" >> .env
+fi
+
# 8. Запуск Docker контейнеров
echo -e "${YELLOW}🐳 Сборка и запуск Docker контейнеров...${NC}"
echo "Это займёт несколько минут..."
-# Из-за того что мы добавили пользователя в группу docker,
-# нужно перелогиниться. Используем newgrp для этой сессии.
-newgrp docker << EOFGRP
-docker-compose build
-docker-compose up -d
-EOFGRP
+compose_cmd build
+compose_cmd up -d
echo -e "${GREEN}✅ Контейнеры запущены${NC}"
@@ -207,11 +232,11 @@ sleep 30
echo -e "${YELLOW}🔍 Проверка работы...${NC}"
# Проверка контейнеров
-if docker-compose ps | grep -q "Up"; then
+if compose_cmd ps | grep -q "Up"; then
echo -e "${GREEN}✅ Контейнеры запущены${NC}"
else
echo -e "${RED}❌ Не все контейнеры запущены${NC}"
- docker-compose ps
+ compose_cmd ps
exit 1
fi
@@ -221,7 +246,7 @@ if curl -s http://localhost:8000/health | grep -q "ok"; then
curl -s http://localhost:8000/health
else
echo -e "${RED}❌ Backend не отвечает${NC}"
- echo "Проверьте логи: docker-compose logs python_backend"
+ echo "Проверьте логи: docker compose logs python_backend"
exit 1
fi
@@ -241,7 +266,7 @@ echo ""
echo "1. Измените пароль администратора:"
echo " cd $INSTALL_DIR"
echo " nano .env # Найдите ADMIN_PASSWORD и измените"
-echo " docker-compose restart python_backend"
+echo " docker compose restart python_backend"
echo ""
echo "2. Проверьте работу:"
echo " curl http://localhost:8000/health"
diff --git a/scripts/start.sh b/scripts/start.sh
index 2d45049..446e405 100644
--- a/scripts/start.sh
+++ b/scripts/start.sh
@@ -6,6 +6,7 @@ cd "$REPO_ROOT"
APT_UPDATED=0
ENV_CREATED=0
+AUTO_INSTALL_DEPS="${AUTO_INSTALL_DEPS:-1}"
log() {
printf "[%s] %s\n" "$(date '+%Y-%m-%d %H:%M:%S')" "$*"
@@ -19,14 +20,11 @@ require_cmd() {
}
as_root() {
- if [[ "${EUID}" -eq 0 ]]; then
- "$@"
- elif command -v sudo >/dev/null 2>&1; then
- sudo "$@"
- else
- log "Need root privileges. Run as root or install sudo."
+ if [[ "${EUID}" -ne 0 ]]; then
+ log "Run this script as root: sudo bash scripts/start.sh"
exit 1
fi
+ "$@"
}
apt_update_once() {
@@ -60,6 +58,13 @@ ensure_compose_available() {
return
fi
+ if [[ "$AUTO_INSTALL_DEPS" != "1" ]]; then
+ log "Docker Compose not found."
+ log "Install Docker Compose plugin (recommended) and rerun:"
+ log " sudo apt-get install -y docker-compose-plugin"
+ exit 1
+ fi
+
if try_install_package docker-compose-plugin; then
return
fi
@@ -77,9 +82,21 @@ ensure_compose_available() {
}
ensure_prerequisites() {
+ if command -v docker >/dev/null 2>&1; then
+ ensure_compose_available
+ return
+ fi
+
+ if [[ "$AUTO_INSTALL_DEPS" != "1" ]]; then
+ log "Docker is not installed or unavailable for this user."
+ log "Install Docker manually, add user to docker group, then rerun."
+ log "Or run with AUTO_INSTALL_DEPS=1 on Debian/Ubuntu to auto-install."
+ exit 1
+ fi
+
if [[ ! -f /etc/debian_version ]]; then
log "Auto-install is supported for Debian/Ubuntu only. Install Docker manually."
- return
+ exit 1
fi
ensure_package ca-certificates
@@ -353,16 +370,16 @@ ensure_ollama_on_11434() {
curl -fsSL https://ollama.com/install.sh | sh
fi
- if command -v systemctl >/dev/null 2>&1; then
- as_root systemctl enable ollama >/dev/null 2>&1 || true
- as_root systemctl restart ollama >/dev/null 2>&1 || as_root systemctl start ollama >/dev/null 2>&1 || true
- fi
+ log "Configuring Ollama systemd service on 0.0.0.0:11434"
+ mkdir -p /etc/systemd/system/ollama.service.d
+ cat > /etc/systemd/system/ollama.service.d/override.conf <<'EOF'
+[Service]
+Environment="OLLAMA_HOST=0.0.0.0:11434"
+EOF
- if ! curl -fsS http://127.0.0.1:11434/api/tags >/dev/null 2>&1; then
- log "Starting ollama serve in background"
- pkill -f "ollama serve" >/dev/null 2>&1 || true
- nohup ollama serve >/tmp/ollama.log 2>&1 &
- fi
+ systemctl daemon-reload
+ systemctl enable ollama >/dev/null 2>&1 || true
+ systemctl restart ollama
log "Waiting for Ollama API on 127.0.0.1:11434"
local i
@@ -376,7 +393,7 @@ ensure_ollama_on_11434() {
if ! curl -fsS http://127.0.0.1:11434/api/tags >/dev/null 2>&1; then
log "Ollama API did not become ready on 127.0.0.1:11434"
- log "Check logs: sudo journalctl -u ollama -n 120 --no-pager or tail -n 120 /tmp/ollama.log"
+ log "Check logs: journalctl -u ollama -n 120 --no-pager"
exit 1
fi
diff --git a/test_ollama.sh b/test_ollama.sh
index eefbd3d..64cde38 100755
--- a/test_ollama.sh
+++ b/test_ollama.sh
@@ -3,6 +3,19 @@
set -e
+compose_exec() {
+ if docker compose version >/dev/null 2>&1; then
+ docker compose exec -T python_backend "$@"
+ return
+ fi
+ if command -v docker-compose >/dev/null 2>&1; then
+ docker-compose exec -T python_backend "$@"
+ return
+ fi
+ echo " ✗ Docker Compose not found"
+ exit 1
+}
+
echo "=== Testing Ollama Integration ==="
echo ""
@@ -29,19 +42,19 @@ fi
# 3. Test Python backend configuration
echo ""
echo "3. Checking Python backend configuration..."
-docker exec hackathon_python env | grep -E "RAG_LLM_PROVIDER=ollama" > /dev/null
+compose_exec env | grep -E "RAG_LLM_PROVIDER=ollama" > /dev/null
echo " ✓ RAG_LLM_PROVIDER=ollama"
-docker exec hackathon_python env | grep -E "RAG_EMBEDDING_PROVIDER=ollama" > /dev/null
+compose_exec env | grep -E "RAG_EMBEDDING_PROVIDER=ollama" > /dev/null
echo " ✓ RAG_EMBEDDING_PROVIDER=ollama"
-docker exec hackathon_python env | grep -E "OLLAMA_BASE_URL" > /dev/null
+compose_exec env | grep -E "OLLAMA_BASE_URL" > /dev/null
echo " ✓ OLLAMA_BASE_URL is set"
# 4. Test simple generation from container
echo ""
echo "4. Testing Ollama generation from Docker container..."
-docker exec hackathon_python curl -s http://host.docker.internal:11434/api/generate -d '{
+compose_exec curl -s http://host.docker.internal:11434/api/generate -d '{
"model": "llama3:8b",
"prompt": "Hello, world!",
"stream": false