diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..0d49d26 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,18 @@ +.git +.gitignore +.venv +**/__pycache__ +**/*.pyc +**/*.pyo +**/*.pyd +.env +.env.* +*.log +.vscode +.idea +.DS_Store +Thumbs.db +**/downloaded_images +**/data +model_export/train.py +model_export/dataset.py diff --git a/.gitignore b/.gitignore index 13ffc51..23c5277 100644 --- a/.gitignore +++ b/.gitignore @@ -6,4 +6,5 @@ *agent/** **downloaded_images** **model_export** -**cpython** \ No newline at end of file +**cpython** +.claude diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..fac9ba9 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,27 @@ +FROM python:3.13-slim + +ENV PYTHONDONTWRITEBYTECODE=1 \ + PYTHONUNBUFFERED=1 \ + PIP_NO_CACHE_DIR=1 \ + PYTHONPATH=/app + +WORKDIR /app + +RUN apt-get update && apt-get install -y --no-install-recommends \ + build-essential \ + curl \ + git \ + && rm -rf /var/lib/apt/lists/* + +COPY req.txt ./ +RUN pip install --upgrade pip && pip install -r req.txt + +COPY dev_backend ./dev_backend +COPY custom_search_api ./custom_search_api +COPY model_export ./model_export + +WORKDIR /app/dev_backend + +EXPOSE 8000 + +CMD ["uvicorn", "main:api", "--host", "0.0.0.0", "--port", "8000"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..d2bb284 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,63 @@ +services: + mysql: + image: mysql:8.0 + container_name: listing_radar_mysql + restart: unless-stopped + environment: + MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-rootpass} + MYSQL_DATABASE: ${MYSQL_DATABASE:-listing_radar} + MYSQL_USER: ${MYSQL_USER:-app} + MYSQL_PASSWORD: ${MYSQL_PASSWORD:-apppass} + ports: + - "${MYSQL_PORT:-3306}:3306" + volumes: + - mysql_data:/var/lib/mysql + healthcheck: + test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p${MYSQL_ROOT_PASSWORD:-rootpass}"] + interval: 10s + timeout: 5s + retries: 10 + + qdrant: + image: qdrant/qdrant:latest + container_name: listing_radar_qdrant + restart: unless-stopped + ports: + - "6333:6333" + - "6334:6334" + volumes: + - qdrant_data:/qdrant/storage + healthcheck: + test: ["CMD-SHELL", "bash -c ':> /dev/tcp/127.0.0.1/6333' || exit 1"] + interval: 10s + timeout: 5s + retries: 10 + + api: + build: + context: . + dockerfile: Dockerfile + container_name: listing_radar_api + restart: unless-stopped + depends_on: + mysql: + condition: service_healthy + qdrant: + condition: service_started + environment: + MYSQL_HOST: mysql + MYSQL_PORT: 3306 + MYSQL_USER: ${MYSQL_USER:-app} + MYSQL_PASSWORD: ${MYSQL_PASSWORD:-apppass} + MYSQL_DATABASE: ${MYSQL_DATABASE:-listing_radar} + QDRANT_URL: http://qdrant:6333 + GEMINI_API_KEY: ${GEMINI_API_KEY} + SEARCH_ENGINE_ID: ${SEARCH_ENGINE_ID} + ports: + - "8000:8000" + env_file: + - .env + +volumes: + mysql_data: + qdrant_data: