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 WORKDIR /app
# Копируем весь код и устанавливаем зависимости # Копируем весь код и устанавливаем зависимости
COPY . . COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt RUN pip install --no-cache-dir -r requirements.txt
COPY . .
# Команда для запуска # Команда для запуска
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"] CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]

View File

@ -43,7 +43,9 @@ services:
restart: unless-stopped restart: unless-stopped
ollama: ollama:
image: ollama/ollama:latest build:
context: ./ollama
dockerfile: Dockerfile
container_name: ollama container_name: ollama
ports: ports:
- "11434:11434" - "11434:11434"
@ -54,4 +56,3 @@ services:
volumes: volumes:
qdrant_data: qdrant_data:
ollama_data: ollama_data:

37
main.py
View File

@ -27,6 +27,9 @@ import logging
from qdrant_client.http.models import VectorParams, Distance from qdrant_client.http.models import VectorParams, Distance
import os
from dotenv import load_dotenv
# Настройка базового логирования # Настройка базового логирования
logging.basicConfig( logging.basicConfig(
level=logging.INFO, level=logging.INFO,
@ -34,16 +37,21 @@ logging.basicConfig(
) )
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
# Конфигурация # Загрузить переменные окружения из файла .env
COLLECTION_NAME = "posts" load_dotenv()
VECTOR_SIZE = 1280
DATABASE_URL = "sqlite:///./imageboard.db" # Получение значений с указанием значений по умолчанию
QDRANT_URL = "http://qdrant:6333" COLLECTION_NAME = os.getenv("COLLECTION_NAME", "posts")
OLLAMA_URL = "http://ollama:11434" VECTOR_SIZE = int(os.getenv("VECTOR_SIZE", 1280))
EMBEDDING_MODEL = "nomic-embed-text" DATABASE_URL = os.getenv("DATABASE_URL", "sqlite:///./imageboard.db")
IMAGE_MODEL = "openai/clip-vit-base-patch32" QDRANT_URL = os.getenv("QDRANT_URL", "http://qdrant:6333")
IMAGE_SIZE = (224, 224) OLLAMA_URL = os.getenv("OLLAMA_URL", "http://ollama:11435")
UPLOAD_DIR = "uploads" 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) os.makedirs(UPLOAD_DIR, exist_ok=True)
@ -344,4 +352,13 @@ async def get_posts_tree(query: VectorQuery):
if __name__ == "__main__": if __name__ == "__main__":
import uvicorn 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) 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 pillow
transformers transformers
torch torch
python-dotenv