File size: 2,420 Bytes
cb7eb23
c853e0d
a8a9533
4dd4f43
6b73ca1
4dd4f43
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f277bb8
4dd4f43
 
de19c90
6b73ca1
 
f2dc679
 
4dd4f43
6b73ca1
f277bb8
 
 
 
 
 
4dd4f43
 
 
623efa6
eb71e1f
324dc9f
63f63db
3c0d5dd
63f63db
a8a9533
 
0de29d4
a8a9533
3c0d5dd
 
 
63f63db
fb0e56a
 
f277bb8
 
3c0d5dd
a8a9533
94c06a8
3c0d5dd
a8a9533
4dd4f43
a8a9533
 
4dd4f43
a8a9533
 
 
 
 
4dd4f43
a8a9533
 
4dd4f43
a8a9533
eb5499b
a8a9533
 
aaecac2
a8a9533
 
 
 
 
 
29db50b
 
0de29d4
a8a9533
 
 
 
 
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
86
87
88
89
90
91
92
93
94
95
96
97
98
# syntax=docker/dockerfile:1
ARG INCLUDE_DB=true

FROM node:20-slim AS base
ENV PLAYWRIGHT_SKIP_BROWSER_GC=1

# install dotenv-cli
RUN npm install -g dotenv-cli

# switch to a user that works for spaces
RUN userdel -r node
RUN useradd -m -u 1000 user
USER user

ENV HOME=/home/user \
	PATH=/home/user/.local/bin:$PATH

WORKDIR /app

# add a .env.local if the user doesn't bind a volume to it
RUN touch /app/.env.local


RUN npm i --no-package-lock --no-save [email protected]
USER root
RUN apt-get update
RUN apt-get install wget git gnupg curl -y
RUN npx playwright install --with-deps chromium
RUN chown -R 1000:1000 /home/user/.npm
RUN mkdir -p /home/user/.cache/mongodb-binaries && \
    chown -R 1000:1000 /home/user/.cache
USER user

COPY --chown=1000 .env /app/.env
COPY --chown=1000 entrypoint.sh /app/entrypoint.sh
COPY --chown=1000 gcp-*.json /app/
COPY --chown=1000 package.json /app/package.json
COPY --chown=1000 package-lock.json /app/package-lock.json

RUN chmod +x /app/entrypoint.sh


FROM node:20 AS builder

WORKDIR /app

COPY --link --chown=1000 package-lock.json package.json ./

ARG APP_BASE=
ARG PUBLIC_APP_COLOR=blue
ENV BODY_SIZE_LIMIT=15728640

RUN --mount=type=cache,target=/app/.npm \
        npm set cache /app/.npm && \
        npm ci

COPY --link --chown=1000 . .

RUN git config --global --add safe.directory /app && \
    npm run build

# mongo image
FROM mongo:7 AS mongo

# image to be used if INCLUDE_DB is false
FROM base AS local_db_false

# image to be used if INCLUDE_DB is true
FROM base AS local_db_true

# copy mongo from the other stage
COPY --from=mongo /usr/bin/mongo* /usr/bin/

ENV MONGODB_URL=mongodb://localhost:27017
USER root
RUN mkdir -p /data/db
RUN chown -R 1000:1000 /data/db
USER user
# final image
FROM local_db_${INCLUDE_DB} AS final

# build arg to determine if the database should be included
ARG INCLUDE_DB=true
ENV INCLUDE_DB=${INCLUDE_DB}

# svelte requires APP_BASE at build time so it must be passed as a build arg
ARG APP_BASE=
# tailwind requires the primary theme to be known at build time so it must be passed as a build arg
ARG PUBLIC_APP_COLOR=blue
ARG PUBLIC_COMMIT_SHA=
ENV PUBLIC_COMMIT_SHA=${PUBLIC_COMMIT_SHA}
ENV BODY_SIZE_LIMIT=15728640
#import the build & dependencies
COPY --from=builder --chown=1000 /app/build /app/build
COPY --from=builder --chown=1000 /app/node_modules /app/node_modules

CMD ["/bin/bash", "-c", "/app/entrypoint.sh"]