File size: 2,147 Bytes
58965dc 0e5ff83 aa9a337 78a8204 d33d6f3 78a8204 2f40f2a 2fba1ba 4331e77 2fba1ba 78a8204 175152f 2fba1ba 860e4c5 78a8204 aa9a337 c87f264 c79fc15 8853d35 1e3175c 8853d35 0e5ff83 1a77343 551d891 0e5ff83 1e3175c d33d6f3 8853d35 935daef 860e4c5 1e3175c 0e5ff83 2cb16fa 1e3175c 0e5ff83 78a8204 0e5ff83 78a8204 0e5ff83 78a8204 0e5ff83 78a8204 0e5ff83 ed460a5 0e5ff83 1a77343 12f6404 551d891 f75b6cb 0e5ff83 |
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 |
# syntax=docker/dockerfile:1
ARG INCLUDE_DB=false
FROM node:24-slim AS base
# 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
USER root
RUN apt-get update
RUN apt-get install -y libgomp1 libcurl4 curl dnsutils nano
# ensure npm cache dir exists before adjusting ownership
RUN mkdir -p /home/user/.npm && chown -R 1000:1000 /home/user/.npm
USER user
COPY --chown=1000 .env /app/.env
COPY --chown=1000 entrypoint.sh /app/entrypoint.sh
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:24 AS builder
WORKDIR /app
COPY --link --chown=1000 package-lock.json package.json ./
ARG APP_BASE=
ARG PUBLIC_APP_COLOR=
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=false
ENV INCLUDE_DB=${INCLUDE_DB}
# svelte requires APP_BASE at build time so it must be passed as a build arg
ARG APP_BASE=
ARG PUBLIC_APP_COLOR=
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"]
|