Leon4gr45 commited on
Commit
0b4ff34
Β·
verified Β·
1 Parent(s): ffddb2c

Upload Dockerfile with huggingface_hub

Browse files
Files changed (1) hide show
  1. Dockerfile +142 -0
Dockerfile ADDED
@@ -0,0 +1,142 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # syntax=docker/dockerfile:1.4
2
+
3
+ # Pin verified Ollama artifacts; keep CUDA/Vulkan libraries out of the CPU Space.
4
+ FROM ollama/ollama:0.40.1@sha256:69f27594d8127cb43db1edcafa5e2d3cd8f88bdbc54a2cf3ceb11b8d138a24b1 AS ollama-source
5
+
6
+ FROM debian:bookworm-slim AS ollama-models
7
+ RUN apt-get update && apt-get install -y --no-install-recommends \
8
+ ca-certificates curl libstdc++6 libgomp1 \
9
+ && rm -rf /var/lib/apt/lists/*
10
+ COPY --from=ollama-source /bin/ollama /bin/ollama
11
+ COPY --from=ollama-source /usr/lib/ollama/*.so* /usr/lib/ollama/
12
+ COPY --from=ollama-source /usr/lib/ollama/llama-server /usr/lib/ollama/llama-server
13
+ COPY --from=ollama-source /usr/lib/ollama/*LICENSE* /usr/lib/ollama/
14
+ ARG OLLAMA_EMBEDDING_MODEL=qwen3-embedding:0.6b
15
+ ARG OLLAMA_CHAT_MODEL=qwen3:0.6b
16
+ ENV OLLAMA_MODELS=/opt/ollama-models OLLAMA_NUM_PARALLEL=1 OLLAMA_MAX_LOADED_MODELS=1 OLLAMA_NO_CLOUD=true
17
+ COPY scripts/preload_ollama_models.sh /tmp/preload_ollama_models.sh
18
+ RUN OLLAMA_EMBEDDING_MODEL="$OLLAMA_EMBEDDING_MODEL" OLLAMA_CHAT_MODEL="$OLLAMA_CHAT_MODEL" \
19
+ bash /tmp/preload_ollama_models.sh
20
+
21
+ # ── Stage 1: Console builder ────────────────────────────────
22
+ FROM node:22.22.0-bookworm-slim AS console-builder
23
+
24
+ WORKDIR /console
25
+ COPY console/package.json console/package-lock.json ./
26
+ RUN npm ci
27
+ COPY console/ ./
28
+ RUN chmod +x node_modules/.bin/* 2>/dev/null || true
29
+ RUN npm run build
30
+
31
+ # ── Stage 2: Python builder ─────────────────────────────────
32
+ FROM python:3.11.14-slim-bookworm AS builder
33
+
34
+ RUN apt-get update && apt-get install -y --no-install-recommends \
35
+ build-essential \
36
+ git \
37
+ postgresql-15 \
38
+ postgresql-server-dev-15 \
39
+ && rm -rf /var/lib/apt/lists/*
40
+
41
+ ARG INSTALL_LOCAL_ML=false
42
+
43
+ ENV PYTHONUNBUFFERED=1 \
44
+ PYTHONDONTWRITEBYTECODE=1 \
45
+ PIP_NO_CACHE_DIR=1 \
46
+ PIP_RETRIES=8 \
47
+ PIP_TIMEOUT=900 \
48
+ PIP_DEFAULT_TIMEOUT=900 \
49
+ POETRY_NO_INTERACTION=1 \
50
+ POETRY_VIRTUALENVS_IN_PROJECT=true \
51
+ HF_HOME=/app/.cache \
52
+ SENTENCE_TRANSFORMERS_HOME=/app/.cache \
53
+ TIKTOKEN_CACHE_DIR=/app/.cache/tiktoken
54
+
55
+ RUN pip install --no-cache-dir poetry==2.1.3
56
+
57
+ WORKDIR /app
58
+
59
+ RUN git clone --branch v0.5.1 https://github.com/pgvector/pgvector.git /tmp/pgvector \
60
+ && cd /tmp/pgvector && make && make install
61
+
62
+ COPY pyproject.toml poetry.lock ./
63
+
64
+ RUN if [ "$INSTALL_LOCAL_ML" = "true" ]; then \
65
+ poetry sync --no-root --only main --with local-ml; \
66
+ else \
67
+ poetry sync --no-root --only main; \
68
+ fi \
69
+ && mkdir -p "$TIKTOKEN_CACHE_DIR" \
70
+ && /app/.venv/bin/python -c "import tiktoken; tiktoken.get_encoding('cl100k_base')" \
71
+ && rm -rf /root/.cache /tmp/*
72
+
73
+ COPY src/ ./src/
74
+ COPY scripts/preload_docker_models.py ./scripts/
75
+
76
+ RUN if [ "$INSTALL_LOCAL_ML" = "true" ]; then \
77
+ /app/.venv/bin/python scripts/preload_docker_models.py; \
78
+ fi \
79
+ && rm -rf /root/.cache /tmp/*
80
+
81
+ # ── Stage 3: runtime ────────────────────────────────────────
82
+ FROM python:3.11.14-slim-bookworm
83
+
84
+ ARG BUILD_DATE
85
+ ARG BUILD_SHA
86
+
87
+ LABEL build_date="${BUILD_DATE}" \
88
+ build_sha="${BUILD_SHA}"
89
+
90
+ ENV PYTHONUNBUFFERED=1 \
91
+ PYTHONDONTWRITEBYTECODE=1 \
92
+ PATH="/app/.venv/bin:$PATH" \
93
+ HF_HOME=/app/.cache \
94
+ SENTENCE_TRANSFORMERS_HOME=/app/.cache \
95
+ TIKTOKEN_CACHE_DIR=/app/.cache/tiktoken \
96
+ PIP_NO_CACHE_DIR=1 \
97
+ PIP_RETRIES=8 \
98
+ PIP_TIMEOUT=900 \
99
+ PIP_DEFAULT_TIMEOUT=900
100
+
101
+ RUN apt-get update && apt-get upgrade -y \
102
+ && apt-get install -y --no-install-recommends \
103
+ curl \
104
+ util-linux \
105
+ postgresql-15 \
106
+ postgresql-contrib-15 \
107
+ redis-server \
108
+ nginx \
109
+ supervisor \
110
+ libgomp1 \
111
+ && rm -rf /var/lib/apt/lists/* \
112
+ && python -m pip uninstall -y setuptools wheel \
113
+ && groupadd -r appuser && useradd -r -g appuser -m appuser
114
+
115
+ WORKDIR /app
116
+
117
+ COPY --from=builder /usr/lib/postgresql/15/lib/vector.so /usr/lib/postgresql/15/lib/
118
+ COPY --from=builder /usr/share/postgresql/15/extension/vector* /usr/share/postgresql/15/extension/
119
+ COPY --from=builder /app/.venv /app/.venv
120
+ COPY --from=builder /app/.cache /app/.cache
121
+ COPY --from=builder /app/src /app/src
122
+ COPY --from=builder /app/pyproject.toml /app/
123
+ COPY --from=ollama-models /bin/ollama /bin/ollama
124
+ COPY --from=ollama-models /usr/lib/ollama /usr/lib/ollama
125
+ COPY --from=ollama-models /opt/ollama-models /opt/ollama-models
126
+ COPY --from=console-builder /console/dist /app/console/dist
127
+ COPY deploy/ ./deploy/
128
+ COPY entrypoint.sh ./
129
+ COPY scripts/start_with_ollama.py ./scripts/start_with_ollama.py
130
+
131
+ RUN chmod +x /app/entrypoint.sh
132
+
133
+ RUN mkdir -p /app/plugins && chown appuser:appuser /app/plugins
134
+ VOLUME ["/app/plugins"]
135
+
136
+ EXPOSE 7860
137
+
138
+ HEALTHCHECK --interval=30s --timeout=30s --start-period=120s --retries=5 \
139
+ CMD curl -f http://127.0.0.1:7860/health || exit 1
140
+
141
+ USER root
142
+ ENTRYPOINT ["/app/entrypoint.sh"]