rm-dev-null commited on
Commit
880b7b9
·
verified ·
1 Parent(s): 86fc944

Create Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +220 -0
Dockerfile ADDED
@@ -0,0 +1,220 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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="7860"
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="" AI21_MODEL_LIST="" \
145
+ # Ai360
146
+ AI360_API_KEY="" AI360_MODEL_LIST="" \
147
+ # Anthropic
148
+ ANTHROPIC_API_KEY="" ANTHROPIC_MODEL_LIST="" 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="" BAICHUAN_MODEL_LIST="" \
155
+ # Cloudflare
156
+ CLOUDFLARE_API_KEY="" CLOUDFLARE_BASE_URL_OR_ACCOUNT_ID="" CLOUDFLARE_MODEL_LIST="" \
157
+ # DeepSeek
158
+ DEEPSEEK_API_KEY="" DEEPSEEK_MODEL_LIST="" \
159
+ # Fireworks AI
160
+ FIREWORKSAI_API_KEY="" FIREWORKSAI_MODEL_LIST="" \
161
+ # GitHub
162
+ GITHUB_TOKEN="" GITHUB_MODEL_LIST="" \
163
+ # Google
164
+ GOOGLE_API_KEY="" GOOGLE_MODEL_LIST="" GOOGLE_PROXY_URL="" \
165
+ # Groq
166
+ GROQ_API_KEY="" GROQ_MODEL_LIST="" GROQ_PROXY_URL="" \
167
+ # HuggingFace
168
+ HUGGINGFACE_API_KEY="" HUGGINGFACE_MODEL_LIST="" HUGGINGFACE_PROXY_URL="" \
169
+ # Hunyuan
170
+ HUNYUAN_API_KEY="" HUNYUAN_MODEL_LIST="" \
171
+ # InternLM
172
+ INTERNLM_API_KEY="" INTERNLM_MODEL_LIST="" \
173
+ # Minimax
174
+ MINIMAX_API_KEY="" MINIMAX_MODEL_LIST="" \
175
+ # Mistral
176
+ MISTRAL_API_KEY="" MISTRAL_MODEL_LIST="" \
177
+ # Moonshot
178
+ MOONSHOT_API_KEY="" MOONSHOT_MODEL_LIST="" MOONSHOT_PROXY_URL="" \
179
+ # Novita
180
+ NOVITA_API_KEY="" NOVITA_MODEL_LIST="" \
181
+ # Ollama
182
+ ENABLED_OLLAMA="" OLLAMA_MODEL_LIST="" OLLAMA_PROXY_URL="" \
183
+ # OpenAI
184
+ OPENAI_API_KEY="" OPENAI_MODEL_LIST="" OPENAI_PROXY_URL="" \
185
+ # OpenRouter
186
+ OPENROUTER_API_KEY="" OPENROUTER_MODEL_LIST="" \
187
+ # Perplexity
188
+ PERPLEXITY_API_KEY="" PERPLEXITY_MODEL_LIST="" PERPLEXITY_PROXY_URL="" \
189
+ # Qwen
190
+ QWEN_API_KEY="" QWEN_MODEL_LIST="" \
191
+ # SenseNova
192
+ SENSENOVA_ACCESS_KEY_ID="" SENSENOVA_ACCESS_KEY_SECRET="" SENSENOVA_MODEL_LIST="" \
193
+ # SiliconCloud
194
+ SILICONCLOUD_API_KEY="" SILICONCLOUD_MODEL_LIST="" SILICONCLOUD_PROXY_URL="" \
195
+ # Spark
196
+ SPARK_API_KEY="" SPARK_MODEL_LIST="" \
197
+ # Stepfun
198
+ STEPFUN_API_KEY="" STEPFUN_MODEL_LIST="" \
199
+ # Taichu
200
+ TAICHU_API_KEY="" TAICHU_MODEL_LIST="" \
201
+ # TogetherAI
202
+ TOGETHERAI_API_KEY="" TOGETHERAI_MODEL_LIST="" \
203
+ # Upstage
204
+ UPSTAGE_API_KEY="" UPSTAGE_MODEL_LIST="" \
205
+ # Wenxin
206
+ WENXIN_ACCESS_KEY="" WENXIN_SECRET_KEY="" WENXIN_MODEL_LIST="" \
207
+ # xAI
208
+ XAI_API_KEY="" XAI_MODEL_LIST="" \
209
+ # 01.AI
210
+ ZEROONE_API_KEY="" ZEROONE_MODEL_LIST="" \
211
+ # Zhipu
212
+ ZHIPU_API_KEY="" ZHIPU_MODEL_LIST=""
213
+
214
+ USER nextjs
215
+
216
+ EXPOSE 7860/tcp
217
+
218
+ ENTRYPOINT ["/bin/node"]
219
+
220
+ CMD ["/app/startServer.js"]