Dockerfile 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. # base image
  2. FROM node:22-alpine3.21 AS base
  3. LABEL maintainer="takatost@gmail.com"
  4. # if you located in China, you can use aliyun mirror to speed up
  5. # RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
  6. # if you located in China, you can use taobao registry to speed up
  7. # RUN npm config set registry https://registry.npmmirror.com
  8. RUN apk add --no-cache tzdata
  9. RUN corepack enable
  10. ENV PNPM_HOME="/pnpm"
  11. ENV PATH="$PNPM_HOME:$PATH"
  12. ENV NEXT_PUBLIC_BASE_PATH=
  13. # install packages
  14. FROM base AS packages
  15. WORKDIR /app/web
  16. COPY package.json .
  17. COPY pnpm-lock.yaml .
  18. # Use packageManager from package.json
  19. RUN corepack install
  20. RUN pnpm install --frozen-lockfile --registry https://registry.npmmirror.com/
  21. #RUN pnpm install --frozen-lockfile
  22. # build resources
  23. FROM base AS builder
  24. WORKDIR /app/web
  25. COPY --from=packages /app/web/ .
  26. COPY . .
  27. ENV NODE_OPTIONS="--max-old-space-size=4096"
  28. RUN pnpm build:docker
  29. # production stage
  30. FROM base AS production
  31. ENV NODE_ENV=production
  32. ENV EDITION=SELF_HOSTED
  33. ENV DEPLOY_ENV=PRODUCTION
  34. ENV CONSOLE_API_URL=http://127.0.0.1:5001
  35. ENV APP_API_URL=http://127.0.0.1:5001
  36. ENV MARKETPLACE_API_URL=https://marketplace.dify.ai
  37. ENV MARKETPLACE_URL=https://marketplace.dify.ai
  38. ENV PORT=3000
  39. ENV NEXT_TELEMETRY_DISABLED=1
  40. ENV PM2_INSTANCES=2
  41. # set timezone
  42. ENV TZ=UTC
  43. RUN ln -s /usr/share/zoneinfo/${TZ} /etc/localtime \
  44. && echo ${TZ} > /etc/timezone
  45. WORKDIR /app/web
  46. COPY --from=builder /app/web/public ./public
  47. COPY --from=builder /app/web/.next/standalone ./
  48. COPY --from=builder /app/web/.next/static ./.next/static
  49. COPY docker/entrypoint.sh ./entrypoint.sh
  50. # global runtime packages
  51. RUN pnpm add -g pm2 \
  52. && mkdir /.pm2 \
  53. && chown -R 1001:0 /.pm2 /app/web \
  54. && chmod -R g=u /.pm2 /app/web
  55. ARG COMMIT_SHA
  56. ENV COMMIT_SHA=${COMMIT_SHA}
  57. USER 1001
  58. EXPOSE 3000
  59. ENTRYPOINT ["/bin/sh", "./entrypoint.sh"]