diff --git a/.DS_Store b/.DS_Store index 187b392..cdab287 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/.cursor/commands.json b/.cursor/commands.json index d777428..1e2cf7f 100644 --- a/.cursor/commands.json +++ b/.cursor/commands.json @@ -14,6 +14,13 @@ "type": "shell", "cwd": "${workspaceFolder}" }, + { + "name": "runLLM", + "description": "Запуск/перезапуск play-life-llm (обычно на отдельной машине)", + "command": "./runLLM.sh", + "type": "shell", + "cwd": "${workspaceFolder}" + }, { "name": "backupFromProd", "description": "Создание дампа базы данных с продакшена", diff --git a/.cursor/rules/restart_on_changes.mdc b/.cursor/rules/restart_on_changes.mdc index 0b8cd8f..79f4316 100644 --- a/.cursor/rules/restart_on_changes.mdc +++ b/.cursor/rules/restart_on_changes.mdc @@ -13,4 +13,6 @@ alwaysApply: true - React компонентами и стилями в `play-life-web/src/` - Docker конфигурациями (`docker-compose.yml`, `Dockerfile`) -**Команда для перезапуска:** `./run.sh` или `bash run.sh` в корне проекта. +При изменениях в `play-life-llm/` (если LLM запущен на этой машине) выполни `./runLLM.sh`. + +**Команды для перезапуска:** `./run.sh` (web + backend + db) или `bash run.sh` в корне проекта. Для LLM на этой машине: `./runLLM.sh`. diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 82e2630..dd87fa4 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -39,6 +39,25 @@ "problemMatcher": [], "detail": "Перезапуск Play Life: перезапуск всех контейнеров" }, + { + "label": "runLLM", + "type": "shell", + "command": "./runLLM.sh", + "group": { + "kind": "build", + "isDefault": false + }, + "presentation": { + "echo": true, + "reveal": "always", + "focus": false, + "panel": "shared", + "showReuseMessage": true, + "clear": false + }, + "problemMatcher": [], + "detail": "Запуск/перезапуск play-life-llm (обычно на отдельной машине)" + }, { "label": "backupFromProd", "type": "shell", diff --git a/init.sh b/init.sh index 6a31379..60bfa0d 100755 --- a/init.sh +++ b/init.sh @@ -47,12 +47,12 @@ docker images | grep -E "postgres:(15|16|17|18|latest)" | awk '{print $3}' | xar echo -e "${GREEN} ✅ Старые образы postgres удалены${NC}" echo "" -# 2. Поднятие всех сервисов +# 2. Поднятие сервисов (без LLM — он обычно на отдельной машине, см. ./runLLM.sh) echo -e "${YELLOW}2. Поднятие сервисов через Docker Compose...${NC}" echo " - База данных PostgreSQL 18.0 (порт: $DB_PORT)" echo " - Backend сервер (порт: $PORT)" echo " - Frontend приложение (порт: $WEB_PORT)" -docker-compose up -d --build +docker-compose up -d --build db backend play-life-web echo -e "${GREEN} ✅ Сервисы запущены${NC}" echo "" diff --git a/run.sh b/run.sh index b8fd447..9d20dc9 100755 --- a/run.sh +++ b/run.sh @@ -21,12 +21,6 @@ if [ ! -f ".env" ]; then echo " Создайте файл .env на основе env.example" exit 1 fi -# Создаём play-life-llm/.env из env.example при отсутствии (для сервиса llm) -if [ ! -f "play-life-llm/.env" ]; then - echo -e "${YELLOW}Создаём play-life-llm/.env из env.example...${NC}" - cp play-life-llm/env.example play-life-llm/.env - echo " Задайте TAVILY_API_KEY и OLLAMA_HOST (для Docker: http://host.docker.internal:11434) в play-life-llm/.env" -fi # Загружаем переменные окружения export $(cat .env | grep -v '^#' | grep -v '^$' | xargs) @@ -47,7 +41,6 @@ if docker-compose ps | grep -q "Up"; then echo -e "${YELLOW}Перезапуск существующих контейнеров...${NC}" echo " - Backend сервер (с пересборкой)" echo " - Frontend приложение (с пересборкой)" - echo " - LLM сервис (с пересборкой)" echo " - База данных" # Пересобираем и перезапускаем веб-приложение echo -e "${BLUE}Пересборка веб-приложения...${NC}" @@ -57,10 +50,6 @@ if docker-compose ps | grep -q "Up"; then echo -e "${BLUE}Пересборка бэкенда...${NC}" docker-compose build --no-cache backend docker-compose up -d --force-recreate backend - # Пересобираем и перезапускаем LLM сервис - echo -e "${BLUE}Пересборка LLM сервиса...${NC}" - docker-compose build --no-cache llm - docker-compose up -d --force-recreate llm # Перезапускаем базу данных docker-compose restart db echo -e "${GREEN}✅ Контейнеры перезапущены${NC}" @@ -69,8 +58,7 @@ else echo " - База данных PostgreSQL 15 (порт: $DB_PORT)" echo " - Backend сервер (порт: $PORT)" echo " - Frontend приложение (порт: $WEB_PORT)" - echo " - LLM сервис (порт: 8090)" - docker-compose up -d --build --force-recreate + docker-compose up -d --build --force-recreate db backend play-life-web echo -e "${GREEN}✅ Контейнеры запущены${NC}" fi diff --git a/runLLM.sh b/runLLM.sh new file mode 100755 index 0000000..3e058f9 --- /dev/null +++ b/runLLM.sh @@ -0,0 +1,42 @@ +#!/bin/bash + +# Скрипт для запуска play-life-llm (обычно на отдельной машине) +# Использование: ./runLLM.sh + +set -e + +# Цвета для вывода +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +cd "$SCRIPT_DIR" + +# Создаём play-life-llm/.env из env.example при отсутствии +if [ ! -f "play-life-llm/.env" ]; then + echo -e "${YELLOW}Создаём play-life-llm/.env из env.example...${NC}" + cp play-life-llm/env.example play-life-llm/.env + echo " Задайте TAVILY_API_KEY и OLLAMA_HOST (для Docker: http://host.docker.internal:11434) в play-life-llm/.env" +fi + +echo -e "${GREEN}🔄 Запуск play-life-llm...${NC}" +echo "" + +if docker-compose ps llm 2>/dev/null | grep -q "Up"; then + echo -e "${YELLOW}Перезапуск LLM сервиса (с пересборкой)...${NC}" + docker-compose build --no-cache llm + docker-compose up -d --force-recreate llm +else + echo -e "${YELLOW}Запуск LLM сервиса (порт: 8090)...${NC}" + docker-compose up -d --build llm +fi + +echo -e "${GREEN}✅ play-life-llm запущен${NC}" +echo "" +echo -e "${BLUE}📋 Статус:${NC}" +docker-compose ps llm +echo "" +echo -e "${GREEN}✅ Готово!${NC}"