|  |  | @@ -1,79 +1,80 @@ | 
		
	
		
			
			|  |  |  | # base image | 
		
	
		
			
			|  |  |  | FROM node:22-alpine3.21 AS base | 
		
	
		
			
			|  |  |  | LABEL maintainer="takatost@gmail.com" | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | # if you located in China, you can use aliyun mirror to speed up | 
		
	
		
			
			|  |  |  | # RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | RUN apk add --no-cache tzdata | 
		
	
		
			
			|  |  |  | RUN corepack enable | 
		
	
		
			
			|  |  |  | ENV PNPM_HOME="/pnpm" | 
		
	
		
			
			|  |  |  | ENV PATH="$PNPM_HOME:$PATH" | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | # install packages | 
		
	
		
			
			|  |  |  | FROM base AS packages | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | WORKDIR /app/web | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | COPY package.json . | 
		
	
		
			
			|  |  |  | COPY pnpm-lock.yaml . | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | # Use packageManager from package.json | 
		
	
		
			
			|  |  |  | RUN corepack install | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | # if you located in China, you can use taobao registry to speed up | 
		
	
		
			
			|  |  |  | # RUN pnpm install --frozen-lockfile --registry https://registry.npmmirror.com/ | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | RUN pnpm install --frozen-lockfile | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | # build resources | 
		
	
		
			
			|  |  |  | FROM base AS builder | 
		
	
		
			
			|  |  |  | WORKDIR /app/web | 
		
	
		
			
			|  |  |  | COPY --from=packages /app/web/ . | 
		
	
		
			
			|  |  |  | COPY . . | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | ENV NODE_OPTIONS="--max-old-space-size=4096" | 
		
	
		
			
			|  |  |  | RUN pnpm build:docker | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | # production stage | 
		
	
		
			
			|  |  |  | FROM base AS production | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | ENV NODE_ENV=production | 
		
	
		
			
			|  |  |  | ENV EDITION=SELF_HOSTED | 
		
	
		
			
			|  |  |  | ENV DEPLOY_ENV=PRODUCTION | 
		
	
		
			
			|  |  |  | ENV CONSOLE_API_URL=http://127.0.0.1:5001 | 
		
	
		
			
			|  |  |  | ENV APP_API_URL=http://127.0.0.1:5001 | 
		
	
		
			
			|  |  |  | ENV MARKETPLACE_API_URL=https://marketplace.dify.ai | 
		
	
		
			
			|  |  |  | ENV MARKETPLACE_URL=https://marketplace.dify.ai | 
		
	
		
			
			|  |  |  | ENV PORT=3000 | 
		
	
		
			
			|  |  |  | ENV NEXT_TELEMETRY_DISABLED=1 | 
		
	
		
			
			|  |  |  | ENV PM2_INSTANCES=2 | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | # set timezone | 
		
	
		
			
			|  |  |  | ENV TZ=UTC | 
		
	
		
			
			|  |  |  | RUN ln -s /usr/share/zoneinfo/${TZ} /etc/localtime \ | 
		
	
		
			
			|  |  |  | && echo ${TZ} > /etc/timezone | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | WORKDIR /app/web | 
		
	
		
			
			|  |  |  | COPY --from=builder /app/web/public ./public | 
		
	
		
			
			|  |  |  | COPY --from=builder /app/web/.next/standalone ./ | 
		
	
		
			
			|  |  |  | COPY --from=builder /app/web/.next/static ./.next/static | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | COPY docker/entrypoint.sh ./entrypoint.sh | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | # global runtime packages | 
		
	
		
			
			|  |  |  | RUN pnpm add -g pm2 \ | 
		
	
		
			
			|  |  |  | && mkdir /.pm2 \ | 
		
	
		
			
			|  |  |  | && chown -R 1001:0 /.pm2 /app/web \ | 
		
	
		
			
			|  |  |  | && chmod -R g=u /.pm2 /app/web | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | ARG COMMIT_SHA | 
		
	
		
			
			|  |  |  | ENV COMMIT_SHA=${COMMIT_SHA} | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | USER 1001 | 
		
	
		
			
			|  |  |  | EXPOSE 3000 | 
		
	
		
			
			|  |  |  | ENTRYPOINT ["/bin/sh", "./entrypoint.sh"] | 
		
	
		
			
			|  |  |  | # base image | 
		
	
		
			
			|  |  |  | FROM node:24-alpine AS base | 
		
	
		
			
			|  |  |  | LABEL maintainer="takatost@gmail.com" | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | # if you located in China, you can use aliyun mirror to speed up | 
		
	
		
			
			|  |  |  | # RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | RUN apk add --no-cache tzdata | 
		
	
		
			
			|  |  |  | RUN corepack enable | 
		
	
		
			
			|  |  |  | RUN npm install -g pnpm@10.13.1 | 
		
	
		
			
			|  |  |  | ENV PNPM_HOME="/pnpm" | 
		
	
		
			
			|  |  |  | ENV PATH="$PNPM_HOME:$PATH" | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | # install packages | 
		
	
		
			
			|  |  |  | FROM base AS packages | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | WORKDIR /app/web | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | COPY package.json . | 
		
	
		
			
			|  |  |  | COPY pnpm-lock.yaml . | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | # Use packageManager from package.json | 
		
	
		
			
			|  |  |  | RUN corepack install | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | # if you located in China, you can use taobao registry to speed up | 
		
	
		
			
			|  |  |  | # RUN pnpm install --frozen-lockfile --registry https://registry.npmmirror.com/ | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | RUN pnpm install --frozen-lockfile | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | # build resources | 
		
	
		
			
			|  |  |  | FROM base AS builder | 
		
	
		
			
			|  |  |  | WORKDIR /app/web | 
		
	
		
			
			|  |  |  | COPY --from=packages /app/web/ . | 
		
	
		
			
			|  |  |  | COPY . . | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | ENV NODE_OPTIONS="--max-old-space-size=4096" | 
		
	
		
			
			|  |  |  | RUN pnpm build:docker | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | # production stage | 
		
	
		
			
			|  |  |  | FROM base AS production | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | ENV NODE_ENV=production | 
		
	
		
			
			|  |  |  | ENV EDITION=SELF_HOSTED | 
		
	
		
			
			|  |  |  | ENV DEPLOY_ENV=PRODUCTION | 
		
	
		
			
			|  |  |  | ENV CONSOLE_API_URL=https://www.hawstars.com/ss-dify | 
		
	
		
			
			|  |  |  | ENV APP_API_URL=https://www.hawstars.com/ss-dify | 
		
	
		
			
			|  |  |  | ENV MARKETPLACE_API_URL=https://marketplace.dify.ai | 
		
	
		
			
			|  |  |  | ENV MARKETPLACE_URL=https://marketplace.dify.ai | 
		
	
		
			
			|  |  |  | ENV PORT=3000 | 
		
	
		
			
			|  |  |  | ENV NEXT_TELEMETRY_DISABLED=1 | 
		
	
		
			
			|  |  |  | ENV PM2_INSTANCES=2 | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | # set timezone | 
		
	
		
			
			|  |  |  | ENV TZ=UTC | 
		
	
		
			
			|  |  |  | RUN ln -s /usr/share/zoneinfo/${TZ} /etc/localtime \ | 
		
	
		
			
			|  |  |  | && echo ${TZ} > /etc/timezone | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | WORKDIR /app/web | 
		
	
		
			
			|  |  |  | COPY --from=builder /app/web/public ./public | 
		
	
		
			
			|  |  |  | COPY --from=builder /app/web/.next/standalone ./ | 
		
	
		
			
			|  |  |  | COPY --from=builder /app/web/.next/static ./.next/static | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | COPY docker/entrypoint.sh ./entrypoint.sh | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | # global runtime packages | 
		
	
		
			
			|  |  |  | RUN pnpm add -g pm2 \ | 
		
	
		
			
			|  |  |  | && mkdir /.pm2 \ | 
		
	
		
			
			|  |  |  | && chown -R 1001:0 /.pm2 /app/web \ | 
		
	
		
			
			|  |  |  | && chmod -R g=u /.pm2 /app/web | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | ARG COMMIT_SHA | 
		
	
		
			
			|  |  |  | ENV COMMIT_SHA=${COMMIT_SHA} | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | USER 1001 | 
		
	
		
			
			|  |  |  | EXPOSE 3000 | 
		
	
		
			
			|  |  |  | ENTRYPOINT ["/bin/sh", "./entrypoint.sh"] |