diff --git a/Dockerfile b/Dockerfile index abd2136..3ae7eb2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,8 +10,9 @@ RUN apt-get update && \ WORKDIR /app # Копируем весь код и устанавливаем зависимости -COPY . . +COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt +COPY . . # Команда для запуска CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"] diff --git a/docker-compose.yml b/docker-compose.yml index 68744e7..e51732e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -43,7 +43,9 @@ services: restart: unless-stopped ollama: - image: ollama/ollama:latest + build: + context: ./ollama + dockerfile: Dockerfile container_name: ollama ports: - "11434:11434" @@ -54,4 +56,3 @@ services: volumes: qdrant_data: ollama_data: - diff --git a/main.py b/main.py index 4105f1e..193d824 100644 --- a/main.py +++ b/main.py @@ -27,6 +27,9 @@ import logging from qdrant_client.http.models import VectorParams, Distance +import os +from dotenv import load_dotenv + # Настройка базового логирования logging.basicConfig( level=logging.INFO, @@ -34,16 +37,21 @@ logging.basicConfig( ) logger = logging.getLogger(__name__) -# Конфигурация -COLLECTION_NAME = "posts" -VECTOR_SIZE = 1280 -DATABASE_URL = "sqlite:///./imageboard.db" -QDRANT_URL = "http://qdrant:6333" -OLLAMA_URL = "http://ollama:11434" -EMBEDDING_MODEL = "nomic-embed-text" -IMAGE_MODEL = "openai/clip-vit-base-patch32" -IMAGE_SIZE = (224, 224) -UPLOAD_DIR = "uploads" +# Загрузить переменные окружения из файла .env +load_dotenv() + +# Получение значений с указанием значений по умолчанию +COLLECTION_NAME = os.getenv("COLLECTION_NAME", "posts") +VECTOR_SIZE = int(os.getenv("VECTOR_SIZE", 1280)) +DATABASE_URL = os.getenv("DATABASE_URL", "sqlite:///./imageboard.db") +QDRANT_URL = os.getenv("QDRANT_URL", "http://qdrant:6333") +OLLAMA_URL = os.getenv("OLLAMA_URL", "http://ollama:11435") +EMBEDDING_MODEL = os.getenv("EMBEDDING_MODEL", "nomic-embed-text") +IMAGE_MODEL = os.getenv("IMAGE_MODEL", "openai/clip-vit-base-patch32") +# IMAGE_SIZE ожидается в формате "224,224", преобразуем его в кортеж чисел +image_size_str = os.getenv("IMAGE_SIZE", "224,224") +IMAGE_SIZE = tuple(map(int, image_size_str.split(','))) +UPLOAD_DIR = os.getenv("UPLOAD_DIR", "uploads") os.makedirs(UPLOAD_DIR, exist_ok=True) @@ -344,4 +352,13 @@ async def get_posts_tree(query: VectorQuery): if __name__ == "__main__": import uvicorn + print("COLLECTION_NAME:", COLLECTION_NAME) + print("VECTOR_SIZE:", VECTOR_SIZE) + print("DATABASE_URL:", DATABASE_URL) + print("QDRANT_URL:", QDRANT_URL) + print("OLLAMA_URL:", OLLAMA_URL) + print("EMBEDDING_MODEL:", EMBEDDING_MODEL) + print("IMAGE_MODEL:", IMAGE_MODEL) + print("IMAGE_SIZE:", IMAGE_SIZE) + print("UPLOAD_DIR:", UPLOAD_DIR) uvicorn.run(app, host="0.0.0.0", port=8000) diff --git a/ollama/Dockerfile b/ollama/Dockerfile new file mode 100644 index 0000000..7a02542 --- /dev/null +++ b/ollama/Dockerfile @@ -0,0 +1,8 @@ +FROM ollama/ollama:latest + +# Копируем скрипт запуска в контейнер +COPY entrypoint.sh /entrypoint.sh +RUN chmod +x /entrypoint.sh + +# Переопределяем ENTRYPOINT, чтобы запускался наш скрипт +ENTRYPOINT ["/entrypoint.sh"] diff --git a/ollama/entrypoint.sh b/ollama/entrypoint.sh new file mode 100644 index 0000000..1c3199f --- /dev/null +++ b/ollama/entrypoint.sh @@ -0,0 +1,34 @@ +#!/bin/sh +set -e + +echo "Запускаем ollama serve в фоне..." +# Запускаем сервер в фоне и сохраняем PID процесса +ollama serve & +SERVER_PID=$! + +echo "Ожидаем, пока сервер станет доступным..." +# Пытаемся получить список моделей, ожидая доступность сервера +for i in $(seq 1 30); do + if ollama list >/dev/null 2>&1; then + echo "Сервер доступен." + break + fi + echo "Сервер ещё не готов, ждём..." + sleep 1 +done + +echo "Проверяем наличие модели nomic-embed-text..." +# Вывод списка моделей для отладки +ollama list + +# Если модели нет, выполняем загрузку +if ! ollama list | grep -q 'nomic-embed-text'; then + echo "Модель nomic-embed-text не найдена. Загружаем..." + ollama pull nomic-embed-text +else + echo "Модель nomic-embed-text уже установлена." +fi + +echo "Сервер ollama запущен и работает. Ожидание завершения процесса..." +# Ожидаем завершения фонового процесса сервера +wait $SERVER_PID diff --git a/requirements.txt b/requirements.txt index 9e6dce1..c1a35a8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,3 +8,4 @@ requests pillow transformers torch +python-dotenv \ No newline at end of file