-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDockerfile
76 lines (62 loc) · 2.56 KB
/
Dockerfile
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
# -----------------------------------------------
# Base Image with Doppler
# -----------------------------------------------
FROM node:22-alpine AS doppler
# Install Doppler CLI
RUN wget -q -t3 'https://packages.doppler.com/public/cli/rsa.8004D9FF50437357.key' -O /etc/apk/keys/[email protected] && \
echo 'https://packages.doppler.com/public/cli/alpine/any-version/main' | tee -a /etc/apk/repositories && \
apk add doppler
# Install image manipulation tools
RUN apk update
RUN apk add ghostscript graphicsmagick
# Install corepack
RUN npm install -g corepack@latest
# Install pnpm
ENV PNPM_HOME="/pnpm"
ENV PATH="$PNPM_HOME:$PATH"
RUN corepack enable pnpm
# -----------------------------------------------
# Builder Image
# -----------------------------------------------
FROM doppler AS builder
# Install dependencies
WORKDIR /app
COPY package.json ./
COPY pnpm-lock.yaml ./
COPY pnpm-workspace.yaml ./
COPY apps/backend/package.json ./apps/backend/package.json
COPY apps/frontend/package.json ./apps/frontend/package.json
COPY packages/types/package.json ./packages/types/package.json
COPY packages/eslint-config-3dp4me/package.json ./packages/eslint-config-3dp4me/package.json
RUN pnpm install
# Copy code
COPY . .
ARG PROJECT_NAME hearing
# For some reason we need to build types first. Turbo should be able to figure this
# Build everything, then build the frontend for the specific project
RUN pnpm run build --filter types
RUN pnpm run build --filter='!frontend'
WORKDIR /app/apps/frontend
RUN pnpm run build:${PROJECT_NAME}
# -----------------------------------------------
# Runtime Image
# -----------------------------------------------
FROM doppler AS runtime
# Install the prod dependencies
WORKDIR /build
COPY apps/backend/package.json .
COPY pnpm-lock.yaml ./
COPY pnpm-workspace.yaml ./
COPY apps/backend/package.json ./apps/backend/package.json
COPY apps/frontend/package.json ./apps/frontend/package.json
COPY packages/types/package.json ./packages/types/package.json
COPY packages/eslint-config-3dp4me/package.json ./packages/eslint-config-3dp4me/package.json
RUN pnpm install --filter backend --prod
# Copy over the built backend
COPY --from=builder /app/apps/backend/build ./apps/backend
# Copy over the built frontend to be served by the backend
COPY --from=builder /app/apps/frontend/dist ./apps/backend/frontend/
# Install libvips (needs to be done AFTER pnpm install)
RUN apk add vips-dev -U -X http://dl-3.alpinelinux.org/alpine/edge/testing/
# Install production deps
ENTRYPOINT doppler run -p backend -c ${DOPPLER_CONFIG} -- node /build/apps/backend/bundle.js