Add Docker and compose setup
This commit is contained in:
parent
40d4f41f6e
commit
86fd017f3c
11
.dockerignore
Normal file
11
.dockerignore
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
.git
|
||||||
|
.gitignore
|
||||||
|
.venv
|
||||||
|
__pycache__
|
||||||
|
*.pyc
|
||||||
|
*.pyo
|
||||||
|
.DS_Store
|
||||||
|
node_modules
|
||||||
|
data
|
||||||
|
videos
|
||||||
|
*.log
|
||||||
32
Dockerfile
Normal file
32
Dockerfile
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
FROM python:3.11-slim
|
||||||
|
|
||||||
|
ENV PYTHONDONTWRITEBYTECODE=1
|
||||||
|
ENV PYTHONUNBUFFERED=1
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
# System deps kept lean to support torch/sentence-transformers wheels.
|
||||||
|
RUN apt-get update \
|
||||||
|
&& apt-get install -y --no-install-recommends build-essential git curl \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
COPY requirements.txt /app/requirements.txt
|
||||||
|
RUN pip install --no-cache-dir -r /app/requirements.txt
|
||||||
|
|
||||||
|
# Copy the package into /app/python_app so `python -m python_app.search_app` works.
|
||||||
|
COPY . /app/python_app
|
||||||
|
|
||||||
|
ENV ELASTIC_URL=http://elasticsearch:9200 \
|
||||||
|
ELASTIC_INDEX=this_little_corner_py \
|
||||||
|
ELASTIC_VERIFY_CERTS=0 \
|
||||||
|
QDRANT_URL=http://qdrant:6333 \
|
||||||
|
QDRANT_COLLECTION=tlc-captions-full \
|
||||||
|
QDRANT_VECTOR_NAME= \
|
||||||
|
QDRANT_VECTOR_SIZE=1024 \
|
||||||
|
QDRANT_EMBED_MODEL=BAAI/bge-large-en-v1.5 \
|
||||||
|
LOCAL_DATA_DIR=/app/data/video_metadata
|
||||||
|
|
||||||
|
EXPOSE 8080
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
CMD ["python", "-m", "python_app.search_app"]
|
||||||
23
README.md
23
README.md
@ -85,3 +85,26 @@ Visit <http://localhost:8080/> and you’ll see a barebones UI that:
|
|||||||
|
|
||||||
Feel free to expand on this scaffold—add proper logging, schedule transcript
|
Feel free to expand on this scaffold—add proper logging, schedule transcript
|
||||||
updates, or flesh out the UI—once you’re happy with the baseline behaviour.
|
updates, or flesh out the UI—once you’re happy with the baseline behaviour.
|
||||||
|
|
||||||
|
## Run with Docker Compose
|
||||||
|
|
||||||
|
A quick single-node stack (app + Elasticsearch + Qdrant) is included:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose build
|
||||||
|
docker compose up
|
||||||
|
```
|
||||||
|
|
||||||
|
Services:
|
||||||
|
- **app** (port 8080): Flask UI/API, embeds queries on demand (downloads the model on first run).
|
||||||
|
- **elasticsearch** (port 9200): single node, security disabled for local use.
|
||||||
|
- **qdrant** (port 6333): vector index used by `/vector-search`.
|
||||||
|
|
||||||
|
Key environment wiring (see `docker-compose.yml` for defaults):
|
||||||
|
- `ELASTIC_URL=http://elasticsearch:9200`
|
||||||
|
- `ELASTIC_INDEX=this_little_corner_py`
|
||||||
|
- `QDRANT_URL=http://qdrant:6333`
|
||||||
|
- `QDRANT_COLLECTION=tlc-captions-full`
|
||||||
|
- `LOCAL_DATA_DIR=/app/data/video_metadata` (mounted from `./data`)
|
||||||
|
|
||||||
|
Mount `./data` (read-only) if you want local fallbacks for metrics; otherwise the app relies entirely on Elasticsearch/Qdrant. Stop the stack with `docker compose down` (add `-v` to clear ES/Qdrant volumes).
|
||||||
|
|||||||
51
docker-compose.yml
Normal file
51
docker-compose.yml
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
version: "3.9"
|
||||||
|
|
||||||
|
services:
|
||||||
|
app:
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
ports:
|
||||||
|
- "8080:8080"
|
||||||
|
environment:
|
||||||
|
ELASTIC_URL: http://elasticsearch:9200
|
||||||
|
ELASTIC_INDEX: this_little_corner_py
|
||||||
|
ELASTIC_VERIFY_CERTS: "0"
|
||||||
|
QDRANT_URL: http://qdrant:6333
|
||||||
|
QDRANT_COLLECTION: tlc-captions-full
|
||||||
|
QDRANT_VECTOR_NAME: ""
|
||||||
|
QDRANT_VECTOR_SIZE: "1024"
|
||||||
|
QDRANT_EMBED_MODEL: BAAI/bge-large-en-v1.5
|
||||||
|
LOCAL_DATA_DIR: /app/data/video_metadata
|
||||||
|
volumes:
|
||||||
|
- ./data:/app/data:ro
|
||||||
|
depends_on:
|
||||||
|
- elasticsearch
|
||||||
|
- qdrant
|
||||||
|
|
||||||
|
elasticsearch:
|
||||||
|
image: docker.elastic.co/elasticsearch/elasticsearch:7.17.19
|
||||||
|
environment:
|
||||||
|
discovery.type: single-node
|
||||||
|
xpack.security.enabled: "false"
|
||||||
|
ES_JAVA_OPTS: -Xms1g -Xmx1g
|
||||||
|
cluster.routing.allocation.disk.threshold_enabled: "false"
|
||||||
|
ulimits:
|
||||||
|
memlock:
|
||||||
|
soft: -1
|
||||||
|
hard: -1
|
||||||
|
volumes:
|
||||||
|
- esdata:/usr/share/elasticsearch/data
|
||||||
|
ports:
|
||||||
|
- "9200:9200"
|
||||||
|
|
||||||
|
qdrant:
|
||||||
|
image: qdrant/qdrant:v1.9.1
|
||||||
|
ports:
|
||||||
|
- "6333:6333"
|
||||||
|
volumes:
|
||||||
|
- qdrant_storage:/qdrant/storage
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
esdata:
|
||||||
|
qdrant_storage:
|
||||||
Loading…
x
Reference in New Issue
Block a user