-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathDockerfile
More file actions
143 lines (109 loc) · 5.67 KB
/
Copy pathDockerfile
File metadata and controls
143 lines (109 loc) · 5.67 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
# syntax=docker/dockerfile:1.7
ARG PYTHON_IMAGE=python:3.12-slim
ARG NODE_IMAGE=node:22-bookworm-slim
FROM ${PYTHON_IMAGE} AS api-deps
WORKDIR /opt/knowhere/source/api
RUN apt-get update \
&& apt-get install -y --no-install-recommends gcc g++ curl \
&& rm -rf /var/lib/apt/lists/* \
&& python -m pip install --no-cache-dir uv
COPY .build/sources/knowhere/pyproject.toml .build/sources/knowhere/uv.lock ./
COPY .build/sources/knowhere/packages/shared-python ./packages/shared-python
COPY .build/sources/knowhere/apps/api/pyproject.toml ./apps/api/pyproject.toml
COPY .build/sources/knowhere/apps/worker/pyproject.toml ./apps/worker/pyproject.toml
RUN cd apps/api \
&& UV_PROJECT_ENVIRONMENT=/opt/knowhere/venvs/api uv sync --locked --no-dev
FROM ${PYTHON_IMAGE} AS worker-deps
WORKDIR /opt/knowhere/source/api
RUN apt-get update \
&& apt-get install -y --no-install-recommends gcc g++ curl \
&& rm -rf /var/lib/apt/lists/* \
&& python -m pip install --no-cache-dir uv
COPY .build/sources/knowhere/pyproject.toml .build/sources/knowhere/uv.lock ./
COPY .build/sources/knowhere/packages/shared-python ./packages/shared-python
COPY .build/sources/knowhere/apps/api/pyproject.toml ./apps/api/pyproject.toml
COPY .build/sources/knowhere/apps/worker/pyproject.toml ./apps/worker/pyproject.toml
RUN cd apps/worker \
&& UV_PROJECT_ENVIRONMENT=/opt/knowhere/venvs/worker uv sync --locked --no-dev \
&& find /opt/knowhere/venvs/worker -type d -name __pycache__ -exec rm -rf {} + 2>/dev/null || true \
&& find /opt/knowhere/venvs/worker -type f -name '*.pyc' -delete \
&& find /opt/knowhere/venvs/worker -type f -name '*.pyo' -delete
FROM ${NODE_IMAGE} AS dashboard-deps
ENV NEXT_TELEMETRY_DISABLED=1
WORKDIR /opt/knowhere/source/dashboard
RUN corepack enable
COPY .build/sources/knowhere-dashboard/package.json .build/sources/knowhere-dashboard/pnpm-lock.yaml ./
RUN pnpm install --frozen-lockfile
FROM dashboard-deps AS dashboard-builder
ARG NEXT_PUBLIC_API_URL=http://127.0.0.1:5005/api
ARG NEXT_PUBLIC_AUTH_BASE_URL=/api/auth
ARG NEXT_PUBLIC_APP_URL=http://localhost:3000
COPY .build/sources/knowhere-dashboard ./
RUN BETTER_AUTH_SECRET=build-validation-only-auth-secret-32-chars \
BETTER_AUTH_URL=http://localhost:3000 \
NEXT_PUBLIC_API_URL="${NEXT_PUBLIC_API_URL}" \
NEXT_PUBLIC_AUTH_BASE_URL="${NEXT_PUBLIC_AUTH_BASE_URL}" \
NEXT_PUBLIC_APP_URL="${NEXT_PUBLIC_APP_URL}" \
BILLING_ENABLED=false \
RESEND_API_KEY=re_build_validation_placeholder \
SKIP_ENV_VALIDATION=1 \
pnpm build
FROM ${NODE_IMAGE} AS node-runtime
FROM ${PYTHON_IMAGE} AS runner
ARG APP_VERSION=dev
ARG BUILD_TIME=""
ARG GIT_COMMIT=""
ENV APP_VERSION=${APP_VERSION}
ENV BUILD_TIME=${BUILD_TIME}
ENV GIT_COMMIT=${GIT_COMMIT}
ENV PYTHONUNBUFFERED=1
ENV NEXT_TELEMETRY_DISABLED=1
ENV HF_HOME=/data/models/huggingface
ENV TRANSFORMERS_CACHE=/data/models/huggingface
WORKDIR /opt/knowhere
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
bash \
ca-certificates \
curl \
fonts-dejavu-core \
libgl1 \
libglib2.0-0 \
libgomp1 \
libreoffice-calc \
libreoffice-core \
libreoffice-impress \
libreoffice-writer \
postgresql-client \
redis-tools \
tini \
&& rm -rf /var/lib/apt/lists/* \
&& update-ca-certificates \
&& mkdir -p /data/users /data/models/huggingface /tmp/knowhere
COPY --from=node-runtime /usr/local/bin/node /usr/local/bin/node
COPY --from=node-runtime /usr/local/bin/npm /usr/local/bin/npm
COPY --from=node-runtime /usr/local/bin/npx /usr/local/bin/npx
COPY --from=node-runtime /usr/local/bin/corepack /usr/local/bin/corepack
COPY --from=node-runtime /usr/local/lib/node_modules /usr/local/lib/node_modules
COPY --from=api-deps /opt/knowhere/venvs/api /opt/knowhere/venvs/api
COPY --from=worker-deps /opt/knowhere/venvs/worker /opt/knowhere/venvs/worker
COPY .build/sources/knowhere /opt/knowhere/source/api
COPY --from=dashboard-deps /opt/knowhere/source/dashboard/node_modules /opt/knowhere/dashboard/node_modules
COPY --from=dashboard-builder /opt/knowhere/source/dashboard/package.json /opt/knowhere/dashboard/package.json
COPY --from=dashboard-builder /opt/knowhere/source/dashboard/pnpm-lock.yaml /opt/knowhere/dashboard/pnpm-lock.yaml
COPY --from=dashboard-builder /opt/knowhere/source/dashboard/next.config.js /opt/knowhere/dashboard/next.config.js
COPY --from=dashboard-builder /opt/knowhere/source/dashboard/tsconfig.json /opt/knowhere/dashboard/tsconfig.json
COPY --from=dashboard-builder /opt/knowhere/source/dashboard/public /opt/knowhere/dashboard/public
COPY --from=dashboard-builder /opt/knowhere/source/dashboard/.next /opt/knowhere/dashboard/.next
COPY --from=dashboard-builder /opt/knowhere/source/dashboard/i18n /opt/knowhere/dashboard/i18n
COPY --from=dashboard-builder /opt/knowhere/source/dashboard/drizzle.config.ts /opt/knowhere/dashboard/drizzle.config.ts
COPY --from=dashboard-builder /opt/knowhere/source/dashboard/drizzle /opt/knowhere/dashboard/drizzle
COPY --from=dashboard-builder /opt/knowhere/source/dashboard/lib/db /opt/knowhere/dashboard/lib/db
COPY scripts/entrypoint.sh /usr/local/bin/knowhere-self-hosted-entrypoint
COPY scripts/create-storage-buckets.py /usr/local/bin/knowhere-create-storage-buckets
COPY scripts/configure-storage-events.py /usr/local/bin/knowhere-configure-storage-events
RUN chmod +x /usr/local/bin/knowhere-self-hosted-entrypoint /usr/local/bin/knowhere-create-storage-buckets /usr/local/bin/knowhere-configure-storage-events
EXPOSE 3000 5005
HEALTHCHECK --interval=30s --timeout=10s --start-period=90s --retries=5 \
CMD curl -fsS http://127.0.0.1:3000/login >/dev/null && curl -fsS http://127.0.0.1:5005/health >/dev/null || exit 1
ENTRYPOINT ["/usr/bin/tini", "--", "/usr/local/bin/knowhere-self-hosted-entrypoint"]