|
|
|
FROM node:20-alpine AS base |
|
|
|
|
|
ENV PNPM_HOME="/pnpm" |
|
ENV PATH="$PNPM_HOME:$PATH" |
|
|
|
|
|
RUN apk update && apk add --no-cache \ |
|
openssl \ |
|
&& rm -rf /var/cache/apk/* |
|
|
|
|
|
RUN npm install -g npm@latest |
|
|
|
|
|
FROM base AS clone |
|
WORKDIR /usr/src/app |
|
RUN apk add --no-cache git |
|
RUN git clone https://github.com/ShowMeTheMoney2023/top.git . |
|
|
|
|
|
FROM base AS build |
|
COPY --from=clone /usr/src/app /usr/src/app |
|
WORKDIR /usr/src/app |
|
|
|
|
|
RUN npm install -g pnpm |
|
|
|
|
|
RUN chown -R node:node /usr/src/app/node_modules |
|
|
|
|
|
USER node |
|
|
|
|
|
RUN chmod -R 777 /usr/src/app/node_modules /usr/src/app/.pnpm |
|
|
|
|
|
RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile |
|
RUN pnpm run -r build |
|
|
|
|
|
RUN pnpm deploy --filter=server --prod /usr/src/app |
|
RUN pnpm deploy --filter=server --prod /usr/src/app-sqlite |
|
|
|
|
|
RUN cd /usr/src/app && pnpm exec prisma generate |
|
RUN cd /usr/src/app-sqlite && rm -rf ./prisma && mv prisma-sqlite prisma && pnpm exec prisma generate |
|
|
|
|
|
RUN npm install prisma |
|
RUN npx prisma generate |
|
|
|
|
|
WORKDIR /usr/src/app |
|
EXPOSE 4000 |
|
|
|
|
|
ENV NODE_ENV=production |
|
ENV HOST="0.0.0.0" |
|
ENV SERVER_ORIGIN_URL="" |
|
ENV MAX_REQUEST_PER_MINUTE=200 |
|
ENV AUTH_CODE="" |
|
ENV DATABASE_URL="" |
|
ENV CRON_EXPRESSION="" |
|
|
|
|
|
RUN chmod +x ./docker-bootstrap.sh |
|
CMD ["./docker-bootstrap.sh"] |
|
|
|
|
|
FROM base AS app |
|
COPY --from=build /usr/src/app /app |
|
WORKDIR /app |
|
EXPOSE 4000 |
|
|
|
|
|
ENV NODE_ENV=production |
|
ENV HOST="0.0.0.0" |
|
ENV SERVER_ORIGIN_URL="" |
|
ENV MAX_REQUEST_PER_MINUTE=200 |
|
ENV AUTH_CODE="" |
|
ENV DATABASE_URL="" |
|
ENV CRON_EXPRESSION="0 8 * * *" |
|
|
|
|
|
RUN chmod +x ./docker-bootstrap.sh |
|
CMD ["./docker-bootstrap.sh"] |