43 lines
1.5 KiB
Text
43 lines
1.5 KiB
Text
|
|
# ---- Base ----
|
||
|
|
FROM node:22-alpine AS base
|
||
|
|
WORKDIR /app
|
||
|
|
|
||
|
|
# ---- Dependencies ----
|
||
|
|
FROM base AS dependencies
|
||
|
|
COPY package.json package-lock.json* .npmrc* ./
|
||
|
|
COPY packages/web/package.json ./packages/web/
|
||
|
|
COPY packages/shared/package.json ./packages/shared/
|
||
|
|
RUN npm install --workspace=packages/shared --workspace=packages/web 2>/dev/null || npm install
|
||
|
|
|
||
|
|
# ---- Build ----
|
||
|
|
FROM dependencies AS build
|
||
|
|
COPY packages/shared/ ./packages/shared/
|
||
|
|
COPY packages/web/ ./packages/web/
|
||
|
|
COPY tsconfig.base.json ./
|
||
|
|
RUN npm run build --workspace=packages/shared
|
||
|
|
RUN npm run build --workspace=packages/web
|
||
|
|
|
||
|
|
# ---- Production ----
|
||
|
|
FROM base AS production
|
||
|
|
ENV NODE_ENV=production
|
||
|
|
COPY --from=build /app/packages/web/.next ./packages/web/.next
|
||
|
|
COPY --from=build /app/packages/web/public ./packages/web/public
|
||
|
|
COPY --from=build /app/packages/web/package.json ./packages/web/
|
||
|
|
COPY --from=build /app/packages/shared/dist ./packages/shared/dist
|
||
|
|
COPY --from=build /app/packages/shared/package.json ./packages/shared/
|
||
|
|
COPY --from=build /app/node_modules ./node_modules
|
||
|
|
COPY --from=build /app/package.json ./
|
||
|
|
EXPOSE 3000
|
||
|
|
WORKDIR /app/packages/web
|
||
|
|
CMD ["node", "/app/node_modules/.bin/next", "start", "-p", "3000"]
|
||
|
|
|
||
|
|
# ---- Development ----
|
||
|
|
FROM dependencies AS development
|
||
|
|
COPY packages/shared/ ./packages/shared/
|
||
|
|
COPY packages/web/ ./packages/web/
|
||
|
|
COPY tsconfig.base.json ./
|
||
|
|
RUN npm run build --workspace=packages/shared
|
||
|
|
EXPOSE 3000
|
||
|
|
WORKDIR /app/packages/web
|
||
|
|
CMD ["node", "/app/node_modules/.bin/next", "dev", "--port", "3000", "--turbopack"]
|