lobe-chat
/
Dockerfile
210 строк · 6.4 Кб
1## Base image for all building stages
2FROM node:20-slim AS base
3
4ARG USE_CN_MIRROR
5
6ENV DEBIAN_FRONTEND="noninteractive"
7
8RUN \
9# If you want to build docker in China, build with --build-arg USE_CN_MIRROR=true
10if [ "${USE_CN_MIRROR:-false}" = "true" ]; then \
11sed -i "s/deb.debian.org/mirrors.ustc.edu.cn/g" "/etc/apt/sources.list.d/debian.sources"; \
12fi \
13# Add required package
14&& apt update \
15&& apt install ca-certificates proxychains-ng -qy \
16# Prepare required package to distroless
17&& mkdir -p /distroless/bin /distroless/etc /distroless/etc/ssl/certs /distroless/lib \
18# Copy proxychains to distroless
19&& cp /usr/lib/$(arch)-linux-gnu/libproxychains.so.4 /distroless/lib/libproxychains.so.4 \
20&& cp /usr/lib/$(arch)-linux-gnu/libdl.so.2 /distroless/lib/libdl.so.2 \
21&& cp /usr/bin/proxychains4 /distroless/bin/proxychains \
22&& cp /etc/proxychains4.conf /distroless/etc/proxychains4.conf \
23# Copy node to distroless
24&& cp /usr/lib/$(arch)-linux-gnu/libstdc++.so.6 /distroless/lib/libstdc++.so.6 \
25&& cp /usr/lib/$(arch)-linux-gnu/libgcc_s.so.1 /distroless/lib/libgcc_s.so.1 \
26&& cp /usr/local/bin/node /distroless/bin/node \
27# Copy CA certificates to distroless
28&& cp /etc/ssl/certs/ca-certificates.crt /distroless/etc/ssl/certs/ca-certificates.crt \
29# Cleanup temp files
30&& rm -rf /tmp/* /var/lib/apt/lists/* /var/tmp/*
31
32## Builder image, install all the dependencies and build the app
33FROM base AS builder
34
35ARG USE_CN_MIRROR
36ARG NEXT_PUBLIC_BASE_PATH
37ARG NEXT_PUBLIC_SENTRY_DSN
38ARG NEXT_PUBLIC_ANALYTICS_POSTHOG
39ARG NEXT_PUBLIC_POSTHOG_HOST
40ARG NEXT_PUBLIC_POSTHOG_KEY
41ARG NEXT_PUBLIC_ANALYTICS_UMAMI
42ARG NEXT_PUBLIC_UMAMI_SCRIPT_URL
43ARG NEXT_PUBLIC_UMAMI_WEBSITE_ID
44
45ENV NEXT_PUBLIC_BASE_PATH="${NEXT_PUBLIC_BASE_PATH}"
46
47# Sentry
48ENV NEXT_PUBLIC_SENTRY_DSN="${NEXT_PUBLIC_SENTRY_DSN}" \
49SENTRY_ORG="" \
50SENTRY_PROJECT=""
51
52# Posthog
53ENV NEXT_PUBLIC_ANALYTICS_POSTHOG="${NEXT_PUBLIC_ANALYTICS_POSTHOG}" \
54NEXT_PUBLIC_POSTHOG_HOST="${NEXT_PUBLIC_POSTHOG_HOST}" \
55NEXT_PUBLIC_POSTHOG_KEY="${NEXT_PUBLIC_POSTHOG_KEY}"
56
57# Umami
58ENV NEXT_PUBLIC_ANALYTICS_UMAMI="${NEXT_PUBLIC_ANALYTICS_UMAMI}" \
59NEXT_PUBLIC_UMAMI_SCRIPT_URL="${NEXT_PUBLIC_UMAMI_SCRIPT_URL}" \
60NEXT_PUBLIC_UMAMI_WEBSITE_ID="${NEXT_PUBLIC_UMAMI_WEBSITE_ID}"
61
62# Node
63ENV NODE_OPTIONS="--max-old-space-size=8192"
64
65WORKDIR /app
66
67COPY package.json ./
68COPY .npmrc ./
69
70RUN \
71# If you want to build docker in China, build with --build-arg USE_CN_MIRROR=true
72if [ "${USE_CN_MIRROR:-false}" = "true" ]; then \
73export SENTRYCLI_CDNURL="https://npmmirror.com/mirrors/sentry-cli"; \
74npm config set registry "https://registry.npmmirror.com/"; \
75echo 'canvas_binary_host_mirror=https://npmmirror.com/mirrors/canvas' >> .npmrc; \
76fi \
77# Set the registry for corepack
78&& export COREPACK_NPM_REGISTRY=$(npm config get registry | sed 's/\/$//') \
79# Enable corepack
80&& corepack enable \
81# Use pnpm for corepack
82&& corepack use pnpm \
83# Install the dependencies
84&& pnpm i \
85# Add sharp dependencies
86&& mkdir -p /deps \
87&& pnpm add sharp --prefix /deps
88
89COPY . .
90
91# run build standalone for docker version
92RUN npm run build:docker
93
94## Application image, copy all the files for production
95FROM busybox:latest AS app
96
97COPY --from=base /distroless/ /
98
99COPY --from=builder /app/public /app/public
100
101# Automatically leverage output traces to reduce image size
102# https://nextjs.org/docs/advanced-features/output-file-tracing
103COPY --from=builder /app/.next/standalone /app/
104COPY --from=builder /app/.next/static /app/.next/static
105COPY --from=builder /deps/node_modules/.pnpm /app/node_modules/.pnpm
106
107# Copy server launcher
108COPY --from=builder /app/scripts/serverLauncher/startServer.js /app/startServer.js
109
110RUN \
111# Add nextjs:nodejs to run the app
112addgroup -S -g 1001 nodejs \
113&& adduser -D -G nodejs -H -S -h /app -u 1001 nextjs \
114# Set permission for nextjs:nodejs
115&& chown -R nextjs:nodejs /app /etc/proxychains4.conf
116
117## Production image, copy all the files and run next
118FROM scratch
119
120# Copy all the files from app, set the correct permission for prerender cache
121COPY --from=app / /
122
123ENV NODE_ENV="production" \
124NODE_OPTIONS="--dns-result-order=ipv4first --use-openssl-ca" \
125NODE_EXTRA_CA_CERTS="" \
126NODE_TLS_REJECT_UNAUTHORIZED="" \
127SSL_CERT_DIR="/etc/ssl/certs/ca-certificates.crt"
128
129# set hostname to localhost
130ENV HOSTNAME="0.0.0.0" \
131PORT="3210"
132
133# General Variables
134ENV ACCESS_CODE="" \
135API_KEY_SELECT_MODE="" \
136DEFAULT_AGENT_CONFIG="" \
137SYSTEM_AGENT="" \
138FEATURE_FLAGS="" \
139PROXY_URL=""
140
141# Model Variables
142ENV \
143# AI21
144AI21_API_KEY="" \
145# Ai360
146AI360_API_KEY="" \
147# Anthropic
148ANTHROPIC_API_KEY="" ANTHROPIC_PROXY_URL="" \
149# Amazon Bedrock
150AWS_ACCESS_KEY_ID="" AWS_SECRET_ACCESS_KEY="" AWS_REGION="" AWS_BEDROCK_MODEL_LIST="" \
151# Azure OpenAI
152AZURE_API_KEY="" AZURE_API_VERSION="" AZURE_ENDPOINT="" AZURE_MODEL_LIST="" \
153# Baichuan
154BAICHUAN_API_KEY="" \
155# DeepSeek
156DEEPSEEK_API_KEY="" \
157# Fireworks AI
158FIREWORKSAI_API_KEY="" FIREWORKSAI_MODEL_LIST="" \
159# GitHub
160GITHUB_TOKEN="" GITHUB_MODEL_LIST="" \
161162GOOGLE_API_KEY="" GOOGLE_PROXY_URL="" \
163# Groq
164GROQ_API_KEY="" GROQ_MODEL_LIST="" GROQ_PROXY_URL="" \
165# Hunyuan
166HUNYUAN_API_KEY="" HUNYUAN_MODEL_LIST="" \
167# Minimax
168MINIMAX_API_KEY="" \
169# Mistral
170MISTRAL_API_KEY="" \
171# Moonshot
172MOONSHOT_API_KEY="" MOONSHOT_PROXY_URL="" \
173# Novita
174NOVITA_API_KEY="" NOVITA_MODEL_LIST="" \
175# Ollama
176OLLAMA_MODEL_LIST="" OLLAMA_PROXY_URL="" \
177# OpenAI
178OPENAI_API_KEY="" OPENAI_MODEL_LIST="" OPENAI_PROXY_URL="" \
179# OpenRouter
180OPENROUTER_API_KEY="" OPENROUTER_MODEL_LIST="" \
181# Perplexity
182PERPLEXITY_API_KEY="" PERPLEXITY_PROXY_URL="" \
183# Qwen
184QWEN_API_KEY="" QWEN_MODEL_LIST="" \
185# SiliconCloud
186SILICONCLOUD_API_KEY="" SILICONCLOUD_MODEL_LIST="" SILICONCLOUD_PROXY_URL="" \
187# Spark
188SPARK_API_KEY="" \
189# Stepfun
190STEPFUN_API_KEY="" \
191# Taichu
192TAICHU_API_KEY="" \
193# TogetherAI
194TOGETHERAI_API_KEY="" TOGETHERAI_MODEL_LIST="" \
195# Upstage
196UPSTAGE_API_KEY="" \
197# Wenxin
198WENXIN_ACCESS_KEY="" WENXIN_SECRET_KEY="" \
199# 01.AI
200ZEROONE_API_KEY="" ZEROONE_MODEL_LIST="" \
201# Zhipu
202ZHIPU_API_KEY="" ZHIPU_MODEL_LIST=""
203
204USER nextjs
205
206EXPOSE 3210/tcp
207
208ENTRYPOINT ["/bin/node"]
209
210CMD ["/app/startServer.js"]
211