fix: deploy

This commit is contained in:
KofK 2025-02-17 14:05:25 +03:00
parent 3f1ccfdbfe
commit 6dc977134b
6 changed files with 75 additions and 13 deletions

View File

@ -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"]

View File

@ -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:

37
main.py
View File

@ -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)

8
ollama/Dockerfile Normal file
View File

@ -0,0 +1,8 @@
FROM ollama/ollama:latest
# Копируем скрипт запуска в контейнер
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
# Переопределяем ENTRYPOINT, чтобы запускался наш скрипт
ENTRYPOINT ["/entrypoint.sh"]

34
ollama/entrypoint.sh Normal file
View File

@ -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

View File

@ -8,3 +8,4 @@ requests
pillow
transformers
torch
python-dotenv