Dockerfile 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. # ---- Base ----
  2. FROM node:22-alpine AS base
  3. RUN corepack enable && corepack prepare pnpm@latest --activate
  4. WORKDIR /app
  5. # ---- Dependencies ----
  6. FROM base AS deps
  7. COPY package.json pnpm-lock.yaml pnpm-workspace.yaml .pnpm-approve-builds.json ./
  8. RUN pnpm install --frozen-lockfile
  9. # ---- Build ----
  10. FROM base AS builder
  11. COPY --from=deps /app/node_modules ./node_modules
  12. COPY . .
  13. ENV NEXT_TELEMETRY_DISABLED=1
  14. RUN pnpm build
  15. # ---- Production ----
  16. FROM node:22-alpine AS runner
  17. WORKDIR /app
  18. ENV NODE_ENV=production
  19. ENV NEXT_TELEMETRY_DISABLED=1
  20. # Create non-root user
  21. RUN addgroup --system --gid 1001 nodejs && \
  22. adduser --system --uid 1001 nextjs
  23. # Copy standalone output
  24. COPY --from=builder /app/public ./public
  25. COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
  26. COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
  27. # Copy CLMM SDK dist (native requires)
  28. COPY --from=builder /app/src/lib/clmm-sdk/dist ./src/lib/clmm-sdk/dist
  29. # Data directory for SQLite
  30. RUN mkdir -p /app/data && chown nextjs:nodejs /app/data
  31. VOLUME /app/data
  32. USER nextjs
  33. EXPOSE 3000
  34. ENV HOSTNAME=0.0.0.0
  35. ENV PORT=3000
  36. CMD ["node", "server.js"]