-
Notifications
You must be signed in to change notification settings - Fork 22
Expand file tree
/
Copy pathDockerfile.backoffice
More file actions
85 lines (69 loc) · 2.93 KB
/
Copy pathDockerfile.backoffice
File metadata and controls
85 lines (69 loc) · 2.93 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
ARG BUN_IMAGE=oven/bun:1.3
ARG RUNTIME_IMAGE=oven/bun:1.3-distroless
# ---- Dependencies stage ----
FROM ${BUN_IMAGE} AS deps-dev
WORKDIR /usr/src/app
# Copy only workspace manifests to maximize install cache hits
COPY package.json bun.lock ./
COPY packages/app-builder/package.json ./packages/app-builder/
COPY packages/backoffice/package.json ./packages/backoffice/
COPY packages/shared/package.json ./packages/shared/
COPY packages/marble-api/package.json ./packages/marble-api/
COPY packages/typescript-utils/package.json ./packages/typescript-utils/
COPY packages/ui-design-system/package.json ./packages/ui-design-system/
COPY packages/ui-icons/package.json ./packages/ui-icons/
COPY packages/tailwind-preset/package.json ./packages/tailwind-preset/
COPY packages/tests/package.json ./packages/tests/
# Install WITH dev dependencies (needed for build stage)
RUN --mount=type=cache,target=/root/.bun \
bun ci
# ---- Build stage ---- (uses dev deps from above)
FROM ${BUN_IMAGE} AS build
WORKDIR /usr/src/app
# Copy full source AFTER deps to leverage layer caching
COPY . .
# Reuse cached node_modules from deps stage (root + workspace-local)
COPY --from=deps-dev /usr/src/app/node_modules ./node_modules
COPY --from=deps-dev /usr/src/app/packages/backoffice/node_modules ./packages/backoffice/node_modules
# Build-time configuration
ARG SENTRY_ORG
ENV SENTRY_ORG=$SENTRY_ORG
ARG SENTRY_PROJECT
ENV SENTRY_PROJECT=$SENTRY_PROJECT
ARG SENTRY_RELEASE
ENV SENTRY_RELEASE=$SENTRY_RELEASE
RUN bun run -F backoffice build
# Collect build artifacts and dependencies for runtime
RUN mkdir -p /prod/backoffice && \
cp -R packages/backoffice/.output /prod/backoffice/.output
# ---- Production Dependencies stage ----
FROM ${BUN_IMAGE} AS deps-prod
WORKDIR /usr/src/app
# Copy only workspace manifests to maximize install cache hits
COPY package.json bun.lock ./
COPY packages/app-builder/package.json ./packages/app-builder/
COPY packages/backoffice/package.json ./packages/backoffice/
COPY packages/shared/package.json ./packages/shared/
COPY packages/marble-api/package.json ./packages/marble-api/
COPY packages/typescript-utils/package.json ./packages/typescript-utils/
COPY packages/ui-design-system/package.json ./packages/ui-design-system/
COPY packages/ui-icons/package.json ./packages/ui-icons/
COPY packages/tailwind-preset/package.json ./packages/tailwind-preset/
COPY packages/tests/package.json ./packages/tests/
# Install ONLY production dependencies
RUN --mount=type=cache,target=/root/.bun \
bun install --production --frozen-lockfile
# ---- Runtime stage (backoffice) ----
FROM ${RUNTIME_IMAGE} AS backoffice
WORKDIR /prod/backoffice
ENV NODE_ENV=production
ARG PORT=8080
ENV PORT=${PORT:-8080}
ARG APP_VERSION
ENV APP_VERSION=$APP_VERSION
# Copy build output
COPY --from=build /prod/backoffice/.output ./.output
# Copy ONLY production dependencies
COPY --from=deps-prod /usr/src/app/node_modules ./node_modules
EXPOSE $PORT
CMD [".output/server/index.mjs"]