lobe-chat

Форк
0
/
Dockerfile 
210 строк · 6.4 Кб
1
## Base image for all building stages
2
FROM node:20-slim AS base
3

4
ARG USE_CN_MIRROR
5

6
ENV DEBIAN_FRONTEND="noninteractive"
7

8
RUN \
9
    # If you want to build docker in China, build with --build-arg USE_CN_MIRROR=true
10
    if [ "${USE_CN_MIRROR:-false}" = "true" ]; then \
11
        sed -i "s/deb.debian.org/mirrors.ustc.edu.cn/g" "/etc/apt/sources.list.d/debian.sources"; \
12
    fi \
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
33
FROM base AS builder
34

35
ARG USE_CN_MIRROR
36
ARG NEXT_PUBLIC_BASE_PATH
37
ARG NEXT_PUBLIC_SENTRY_DSN
38
ARG NEXT_PUBLIC_ANALYTICS_POSTHOG
39
ARG NEXT_PUBLIC_POSTHOG_HOST
40
ARG NEXT_PUBLIC_POSTHOG_KEY
41
ARG NEXT_PUBLIC_ANALYTICS_UMAMI
42
ARG NEXT_PUBLIC_UMAMI_SCRIPT_URL
43
ARG NEXT_PUBLIC_UMAMI_WEBSITE_ID
44

45
ENV NEXT_PUBLIC_BASE_PATH="${NEXT_PUBLIC_BASE_PATH}"
46

47
# Sentry
48
ENV NEXT_PUBLIC_SENTRY_DSN="${NEXT_PUBLIC_SENTRY_DSN}" \
49
    SENTRY_ORG="" \
50
    SENTRY_PROJECT=""
51

52
# Posthog
53
ENV NEXT_PUBLIC_ANALYTICS_POSTHOG="${NEXT_PUBLIC_ANALYTICS_POSTHOG}" \
54
    NEXT_PUBLIC_POSTHOG_HOST="${NEXT_PUBLIC_POSTHOG_HOST}" \
55
    NEXT_PUBLIC_POSTHOG_KEY="${NEXT_PUBLIC_POSTHOG_KEY}"
56

57
# Umami
58
ENV NEXT_PUBLIC_ANALYTICS_UMAMI="${NEXT_PUBLIC_ANALYTICS_UMAMI}" \
59
    NEXT_PUBLIC_UMAMI_SCRIPT_URL="${NEXT_PUBLIC_UMAMI_SCRIPT_URL}" \
60
    NEXT_PUBLIC_UMAMI_WEBSITE_ID="${NEXT_PUBLIC_UMAMI_WEBSITE_ID}"
61

62
# Node
63
ENV NODE_OPTIONS="--max-old-space-size=8192"
64

65
WORKDIR /app
66

67
COPY package.json ./
68
COPY .npmrc ./
69

70
RUN \
71
    # If you want to build docker in China, build with --build-arg USE_CN_MIRROR=true
72
    if [ "${USE_CN_MIRROR:-false}" = "true" ]; then \
73
        export SENTRYCLI_CDNURL="https://npmmirror.com/mirrors/sentry-cli"; \
74
        npm config set registry "https://registry.npmmirror.com/"; \
75
        echo 'canvas_binary_host_mirror=https://npmmirror.com/mirrors/canvas' >> .npmrc; \
76
    fi \
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

89
COPY . .
90

91
# run build standalone for docker version
92
RUN npm run build:docker
93

94
## Application image, copy all the files for production
95
FROM busybox:latest AS app
96

97
COPY --from=base /distroless/ /
98

99
COPY --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
103
COPY --from=builder /app/.next/standalone /app/
104
COPY --from=builder /app/.next/static /app/.next/static
105
COPY --from=builder /deps/node_modules/.pnpm /app/node_modules/.pnpm
106

107
# Copy server launcher
108
COPY --from=builder /app/scripts/serverLauncher/startServer.js /app/startServer.js
109

110
RUN \
111
    # Add nextjs:nodejs to run the app
112
    addgroup -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
118
FROM scratch
119

120
# Copy all the files from app, set the correct permission for prerender cache
121
COPY --from=app / /
122

123
ENV NODE_ENV="production" \
124
    NODE_OPTIONS="--dns-result-order=ipv4first --use-openssl-ca" \
125
    NODE_EXTRA_CA_CERTS="" \
126
    NODE_TLS_REJECT_UNAUTHORIZED="" \
127
    SSL_CERT_DIR="/etc/ssl/certs/ca-certificates.crt"
128

129
# set hostname to localhost
130
ENV HOSTNAME="0.0.0.0" \
131
    PORT="3210"
132

133
# General Variables
134
ENV ACCESS_CODE="" \
135
    API_KEY_SELECT_MODE="" \
136
    DEFAULT_AGENT_CONFIG="" \
137
    SYSTEM_AGENT="" \
138
    FEATURE_FLAGS="" \
139
    PROXY_URL=""
140

141
# Model Variables
142
ENV \
143
    # AI21
144
    AI21_API_KEY="" \
145
    # Ai360
146
    AI360_API_KEY="" \
147
    # Anthropic
148
    ANTHROPIC_API_KEY="" ANTHROPIC_PROXY_URL="" \
149
    # Amazon Bedrock
150
    AWS_ACCESS_KEY_ID="" AWS_SECRET_ACCESS_KEY="" AWS_REGION="" AWS_BEDROCK_MODEL_LIST="" \
151
    # Azure OpenAI
152
    AZURE_API_KEY="" AZURE_API_VERSION="" AZURE_ENDPOINT="" AZURE_MODEL_LIST="" \
153
    # Baichuan
154
    BAICHUAN_API_KEY="" \
155
    # DeepSeek
156
    DEEPSEEK_API_KEY="" \
157
    # Fireworks AI
158
    FIREWORKSAI_API_KEY="" FIREWORKSAI_MODEL_LIST="" \
159
    # GitHub
160
    GITHUB_TOKEN="" GITHUB_MODEL_LIST="" \
161
    # Google
162
    GOOGLE_API_KEY="" GOOGLE_PROXY_URL="" \
163
    # Groq
164
    GROQ_API_KEY="" GROQ_MODEL_LIST="" GROQ_PROXY_URL="" \
165
    # Hunyuan
166
    HUNYUAN_API_KEY="" HUNYUAN_MODEL_LIST="" \
167
    # Minimax
168
    MINIMAX_API_KEY="" \
169
    # Mistral
170
    MISTRAL_API_KEY="" \
171
    # Moonshot
172
    MOONSHOT_API_KEY="" MOONSHOT_PROXY_URL="" \
173
    # Novita
174
    NOVITA_API_KEY="" NOVITA_MODEL_LIST="" \
175
    # Ollama
176
    OLLAMA_MODEL_LIST="" OLLAMA_PROXY_URL="" \
177
    # OpenAI
178
    OPENAI_API_KEY="" OPENAI_MODEL_LIST="" OPENAI_PROXY_URL="" \
179
    # OpenRouter
180
    OPENROUTER_API_KEY="" OPENROUTER_MODEL_LIST="" \
181
    # Perplexity
182
    PERPLEXITY_API_KEY="" PERPLEXITY_PROXY_URL="" \
183
    # Qwen
184
    QWEN_API_KEY="" QWEN_MODEL_LIST="" \
185
    # SiliconCloud
186
    SILICONCLOUD_API_KEY="" SILICONCLOUD_MODEL_LIST="" SILICONCLOUD_PROXY_URL="" \
187
    # Spark
188
    SPARK_API_KEY="" \
189
    # Stepfun
190
    STEPFUN_API_KEY="" \
191
    # Taichu
192
    TAICHU_API_KEY="" \
193
    # TogetherAI
194
    TOGETHERAI_API_KEY="" TOGETHERAI_MODEL_LIST="" \
195
    # Upstage
196
    UPSTAGE_API_KEY="" \
197
    # Wenxin
198
    WENXIN_ACCESS_KEY="" WENXIN_SECRET_KEY="" \
199
    # 01.AI
200
    ZEROONE_API_KEY="" ZEROONE_MODEL_LIST="" \
201
    # Zhipu
202
    ZHIPU_API_KEY="" ZHIPU_MODEL_LIST=""
203

204
USER nextjs
205

206
EXPOSE 3210/tcp
207

208
ENTRYPOINT ["/bin/node"]
209

210
CMD ["/app/startServer.js"]
211

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.