lobe-chat

Форк
0
/
Dockerfile.database 
245 строк · 7.5 Кб
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_SERVICE_MODE
38
ARG NEXT_PUBLIC_SENTRY_DSN
39
ARG NEXT_PUBLIC_ANALYTICS_POSTHOG
40
ARG NEXT_PUBLIC_POSTHOG_HOST
41
ARG NEXT_PUBLIC_POSTHOG_KEY
42
ARG NEXT_PUBLIC_ANALYTICS_UMAMI
43
ARG NEXT_PUBLIC_UMAMI_SCRIPT_URL
44
ARG NEXT_PUBLIC_UMAMI_WEBSITE_ID
45

46
ENV NEXT_PUBLIC_BASE_PATH="${NEXT_PUBLIC_BASE_PATH}"
47

48
ENV NEXT_PUBLIC_SERVICE_MODE="${NEXT_PUBLIC_SERVICE_MODE:-server}" \
49
    APP_URL="http://app.com" \
50
    DATABASE_DRIVER="node" \
51
    DATABASE_URL="postgres://postgres:password@localhost:5432/postgres" \
52
    KEY_VAULTS_SECRET="use-for-build"
53

54
# Sentry
55
ENV NEXT_PUBLIC_SENTRY_DSN="${NEXT_PUBLIC_SENTRY_DSN}" \
56
    SENTRY_ORG="" \
57
    SENTRY_PROJECT=""
58

59
# Posthog
60
ENV NEXT_PUBLIC_ANALYTICS_POSTHOG="${NEXT_PUBLIC_ANALYTICS_POSTHOG}" \
61
    NEXT_PUBLIC_POSTHOG_HOST="${NEXT_PUBLIC_POSTHOG_HOST}" \
62
    NEXT_PUBLIC_POSTHOG_KEY="${NEXT_PUBLIC_POSTHOG_KEY}"
63

64
# Umami
65
ENV NEXT_PUBLIC_ANALYTICS_UMAMI="${NEXT_PUBLIC_ANALYTICS_UMAMI}" \
66
    NEXT_PUBLIC_UMAMI_SCRIPT_URL="${NEXT_PUBLIC_UMAMI_SCRIPT_URL}" \
67
    NEXT_PUBLIC_UMAMI_WEBSITE_ID="${NEXT_PUBLIC_UMAMI_WEBSITE_ID}"
68

69
# Node
70
ENV NODE_OPTIONS="--max-old-space-size=8192"
71

72
WORKDIR /app
73

74
COPY package.json ./
75
COPY .npmrc ./
76

77
RUN \
78
    # If you want to build docker in China, build with --build-arg USE_CN_MIRROR=true
79
    if [ "${USE_CN_MIRROR:-false}" = "true" ]; then \
80
        export SENTRYCLI_CDNURL="https://npmmirror.com/mirrors/sentry-cli"; \
81
        npm config set registry "https://registry.npmmirror.com/"; \
82
        echo 'canvas_binary_host_mirror=https://npmmirror.com/mirrors/canvas' >> .npmrc; \
83
    fi \
84
    # Set the registry for corepack
85
    && export COREPACK_NPM_REGISTRY=$(npm config get registry | sed 's/\/$//') \
86
    # Enable corepack
87
    && corepack enable \
88
    # Use pnpm for corepack
89
    && corepack use pnpm \
90
    # Install the dependencies
91
    && pnpm i \
92
    # Add sharp and db migration dependencies
93
    && mkdir -p /deps \
94
    && pnpm add sharp pg drizzle-orm --prefix /deps
95

96
COPY . .
97

98
# run build standalone for docker version
99
RUN npm run build:docker
100

101
## Application image, copy all the files for production
102
FROM busybox:latest AS app
103

104
COPY --from=base /distroless/ /
105

106
COPY --from=builder /app/public /app/public
107

108
# Automatically leverage output traces to reduce image size
109
# https://nextjs.org/docs/advanced-features/output-file-tracing
110
COPY --from=builder /app/.next/standalone /app/
111
COPY --from=builder /app/.next/static /app/.next/static
112

113
# copy dependencies
114
COPY --from=builder /deps/node_modules/.pnpm /app/node_modules/.pnpm
115
COPY --from=builder /deps/node_modules/pg /app/node_modules/pg
116
COPY --from=builder /deps/node_modules/drizzle-orm /app/node_modules/drizzle-orm
117

118
# Copy database migrations
119
COPY --from=builder /app/src/database/server/migrations /app/migrations
120
COPY --from=builder /app/scripts/migrateServerDB/docker.cjs /app/docker.cjs
121
COPY --from=builder /app/scripts/migrateServerDB/errorHint.js /app/errorHint.js
122

123
# Copy server launcher
124
COPY --from=builder /app/scripts/serverLauncher/startServer.js /app/startServer.js
125

126
RUN \
127
    # Add nextjs:nodejs to run the app
128
    addgroup -S -g 1001 nodejs \
129
    && adduser -D -G nodejs -H -S -h /app -u 1001 nextjs \
130
    # Set permission for nextjs:nodejs
131
    && chown -R nextjs:nodejs /app /etc/proxychains4.conf
132

133
## Production image, copy all the files and run next
134
FROM scratch
135

136
# Copy all the files from app, set the correct permission for prerender cache
137
COPY --from=app / /
138

139
ENV NODE_ENV="production" \
140
    NODE_OPTIONS="--dns-result-order=ipv4first --use-openssl-ca" \
141
    NODE_EXTRA_CA_CERTS="" \
142
    NODE_TLS_REJECT_UNAUTHORIZED="" \
143
    SSL_CERT_DIR="/etc/ssl/certs/ca-certificates.crt"
144

145
# set hostname to localhost
146
ENV HOSTNAME="0.0.0.0" \
147
    PORT="3210"
148

149
# General Variables
150
ENV ACCESS_CODE="" \
151
    APP_URL="" \
152
    API_KEY_SELECT_MODE="" \
153
    DEFAULT_AGENT_CONFIG="" \
154
    SYSTEM_AGENT="" \
155
    FEATURE_FLAGS="" \
156
    PROXY_URL=""
157

158
# Database
159
ENV KEY_VAULTS_SECRET="" \
160
    DATABASE_DRIVER="node" \
161
    DATABASE_URL=""
162

163
# Next Auth
164
ENV NEXT_AUTH_SECRET="" \
165
    NEXT_AUTH_SSO_PROVIDERS="" \
166
    NEXTAUTH_URL=""
167

168
# S3
169
ENV NEXT_PUBLIC_S3_DOMAIN="" \
170
    S3_PUBLIC_DOMAIN="" \
171
    S3_ACCESS_KEY_ID="" \
172
    S3_BUCKET="" \
173
    S3_ENDPOINT="" \
174
    S3_SECRET_ACCESS_KEY=""
175

176
# Model Variables
177
ENV \
178
    # AI21
179
    AI21_API_KEY="" \
180
    # Ai360
181
    AI360_API_KEY="" \
182
    # Anthropic
183
    ANTHROPIC_API_KEY="" ANTHROPIC_PROXY_URL="" \
184
    # Amazon Bedrock
185
    AWS_ACCESS_KEY_ID="" AWS_SECRET_ACCESS_KEY="" AWS_REGION="" AWS_BEDROCK_MODEL_LIST="" \
186
    # Azure OpenAI
187
    AZURE_API_KEY="" AZURE_API_VERSION="" AZURE_ENDPOINT="" AZURE_MODEL_LIST="" \
188
    # Baichuan
189
    BAICHUAN_API_KEY="" \
190
    # DeepSeek
191
    DEEPSEEK_API_KEY="" \
192
    # Fireworks AI
193
    FIREWORKSAI_API_KEY="" FIREWORKSAI_MODEL_LIST="" \
194
    # GitHub
195
    GITHUB_TOKEN="" GITHUB_MODEL_LIST="" \
196
    # Google
197
    GOOGLE_API_KEY="" GOOGLE_PROXY_URL="" \
198
    # Groq
199
    GROQ_API_KEY="" GROQ_MODEL_LIST="" GROQ_PROXY_URL="" \
200
    # Hunyuan
201
    HUNYUAN_API_KEY="" HUNYUAN_MODEL_LIST="" \
202
    # Minimax
203
    MINIMAX_API_KEY="" \
204
    # Mistral
205
    MISTRAL_API_KEY="" \
206
    # Moonshot
207
    MOONSHOT_API_KEY="" MOONSHOT_PROXY_URL="" \
208
    # Novita
209
    NOVITA_API_KEY="" NOVITA_MODEL_LIST="" \
210
    # Ollama
211
    OLLAMA_MODEL_LIST="" OLLAMA_PROXY_URL="" \
212
    # OpenAI
213
    OPENAI_API_KEY="" OPENAI_MODEL_LIST="" OPENAI_PROXY_URL="" \
214
    # OpenRouter
215
    OPENROUTER_API_KEY="" OPENROUTER_MODEL_LIST="" \
216
    # Perplexity
217
    PERPLEXITY_API_KEY="" PERPLEXITY_PROXY_URL="" \
218
    # Qwen
219
    QWEN_API_KEY="" QWEN_MODEL_LIST="" \
220
    # SiliconCloud
221
    SILICONCLOUD_API_KEY="" SILICONCLOUD_MODEL_LIST="" SILICONCLOUD_PROXY_URL="" \
222
    # Spark
223
    SPARK_API_KEY="" \
224
    # Stepfun
225
    STEPFUN_API_KEY="" \
226
    # Taichu
227
    TAICHU_API_KEY="" \
228
    # TogetherAI
229
    TOGETHERAI_API_KEY="" TOGETHERAI_MODEL_LIST="" \
230
    # Upstage
231
    UPSTAGE_API_KEY="" \
232
    # Wenxin
233
    WENXIN_ACCESS_KEY="" WENXIN_SECRET_KEY="" \
234
    # 01.AI
235
    ZEROONE_API_KEY="" ZEROONE_MODEL_LIST="" \
236
    # Zhipu
237
    ZHIPU_API_KEY=""
238

239
USER nextjs
240

241
EXPOSE 3210/tcp
242

243
ENTRYPOINT ["/bin/node"]
244

245
CMD ["/app/startServer.js"]
246

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

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

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

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