Reubencf commited on
Commit
dad2665
·
1 Parent(s): ef88376

Prepare Docker deployment for Hugging Face

Browse files
Files changed (3) hide show
  1. .dockerignore +6 -1
  2. Dockerfile +33 -8
  3. next.config.mjs +11 -1
.dockerignore CHANGED
@@ -5,6 +5,11 @@ node_modules
5
  .dockerignore
6
  Dockerfile
7
  npm-debug.log
8
- .env*.local
 
 
9
  .vscode
10
  .idea
 
 
 
 
5
  .dockerignore
6
  Dockerfile
7
  npm-debug.log
8
+ .env
9
+ .env.*
10
+ !.env.example
11
  .vscode
12
  .idea
13
+ out
14
+ build_log.txt
15
+ tsconfig.tsbuildinfo
Dockerfile CHANGED
@@ -1,24 +1,49 @@
1
- FROM node:20-alpine AS deps
 
 
 
 
2
  WORKDIR /app
 
3
  COPY package.json package-lock.json ./
4
  RUN npm ci --legacy-peer-deps
5
 
6
- FROM node:20-alpine AS builder
7
  WORKDIR /app
8
  COPY --from=deps /app/node_modules ./node_modules
9
  COPY . .
 
 
 
 
 
 
 
 
 
 
10
  RUN npm run build
11
 
12
- FROM node:20-alpine AS runner
13
  WORKDIR /app
 
14
  ENV NODE_ENV=production
 
15
  ENV PORT=7860
16
  ENV HOSTNAME=0.0.0.0
17
 
18
- COPY --from=builder /app/public ./public
19
- COPY --from=builder /app/.next ./.next
20
- COPY --from=builder /app/node_modules ./node_modules
21
- COPY --from=builder /app/package.json ./package.json
 
 
 
 
22
 
23
  EXPOSE 7860
24
- CMD ["npm", "start", "--", "-p", "7860", "-H", "0.0.0.0"]
 
 
 
 
 
1
+ FROM node:20-alpine AS base
2
+
3
+ ENV NEXT_TELEMETRY_DISABLED=1
4
+
5
+ FROM base AS deps
6
  WORKDIR /app
7
+ RUN apk add --no-cache libc6-compat
8
  COPY package.json package-lock.json ./
9
  RUN npm ci --legacy-peer-deps
10
 
11
+ FROM base AS builder
12
  WORKDIR /app
13
  COPY --from=deps /app/node_modules ./node_modules
14
  COPY . .
15
+
16
+ # Hugging Face Space Variables are available as Docker build args.
17
+ # NEXT_PUBLIC_* values must be present during `next build` for client code.
18
+ ARG NEXT_PUBLIC_EMAILJS_SERVICE_ID
19
+ ARG NEXT_PUBLIC_EMAILJS_TEMPLATE_ID
20
+ ARG NEXT_PUBLIC_EMAILJS_PUBLIC_KEY
21
+ ENV NEXT_PUBLIC_EMAILJS_SERVICE_ID=${NEXT_PUBLIC_EMAILJS_SERVICE_ID}
22
+ ENV NEXT_PUBLIC_EMAILJS_TEMPLATE_ID=${NEXT_PUBLIC_EMAILJS_TEMPLATE_ID}
23
+ ENV NEXT_PUBLIC_EMAILJS_PUBLIC_KEY=${NEXT_PUBLIC_EMAILJS_PUBLIC_KEY}
24
+
25
  RUN npm run build
26
 
27
+ FROM base AS runner
28
  WORKDIR /app
29
+
30
  ENV NODE_ENV=production
31
+ ENV NEXT_TELEMETRY_DISABLED=1
32
  ENV PORT=7860
33
  ENV HOSTNAME=0.0.0.0
34
 
35
+ RUN addgroup --system --gid 1000 user
36
+ RUN adduser --system --uid 1000 --ingroup user user
37
+
38
+ COPY --from=builder --chown=user:user /app/public ./public
39
+ COPY --from=builder --chown=user:user /app/.next/standalone ./
40
+ COPY --from=builder --chown=user:user /app/.next/static ./.next/static
41
+
42
+ USER user
43
 
44
  EXPOSE 7860
45
+
46
+ HEALTHCHECK --interval=30s --timeout=5s --start-period=30s --retries=3 \
47
+ CMD wget -qO- http://127.0.0.1:7860/ || exit 1
48
+
49
+ CMD ["node", "server.js"]
next.config.mjs CHANGED
@@ -1,4 +1,14 @@
 
 
 
 
 
1
  /** @type {import('next').NextConfig} */
2
- const nextConfig = {};
 
 
 
 
 
3
 
4
  export default nextConfig;
 
1
+ import path from "node:path";
2
+ import { fileURLToPath } from "node:url";
3
+
4
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
5
+
6
  /** @type {import('next').NextConfig} */
7
+ const nextConfig = {
8
+ output: "standalone",
9
+ turbopack: {
10
+ root: __dirname,
11
+ },
12
+ };
13
 
14
  export default nextConfig;