mirror of
https://github.com/kremalicious/umami.git
synced 2024-12-22 09:13:37 +01:00
Trim Docker image size
* Only copy production node dependencies into image * Use multi-stage build to make use of node dependency cache * Use non-root user
This commit is contained in:
parent
8e2759d7c4
commit
34d82166e4
38
Dockerfile
38
Dockerfile
@ -1,17 +1,39 @@
|
||||
FROM node:12.18-alpine
|
||||
|
||||
# Build image
|
||||
FROM node:12.18-alpine AS build
|
||||
ARG DATABASE_TYPE
|
||||
|
||||
ENV DATABASE_URL "postgresql://umami:umami@db:5432/umami" \
|
||||
DATABASE_TYPE=$DATABASE_TYPE
|
||||
WORKDIR /build
|
||||
|
||||
WORKDIR /app
|
||||
EXPOSE 3000
|
||||
COPY package.json yarn.lock /build/
|
||||
|
||||
COPY package.json yarn.lock /app/
|
||||
RUN yarn install --frozen-lockfile
|
||||
# Install only the production dependencies
|
||||
RUN yarn install --production
|
||||
|
||||
COPY . /app
|
||||
# Cache these modules for production
|
||||
RUN cp -R node_modules/ prod_node_modules/
|
||||
|
||||
# Install development dependencies
|
||||
RUN yarn install
|
||||
|
||||
COPY . /build
|
||||
RUN yarn build
|
||||
|
||||
# Production image
|
||||
FROM node:12.18-alpine AS production
|
||||
WORKDIR /app
|
||||
|
||||
# Copy cached dependencies
|
||||
COPY --from=build /build/prod_node_modules ./node_modules
|
||||
|
||||
# Copy generated Prisma client
|
||||
COPY --from=build /build/node_modules/\.prisma/ ./node_modules/\.prisma/
|
||||
|
||||
COPY --from=build /build/yarn.lock /build/package.json ./
|
||||
COPY --from=build /build/.next ./.next
|
||||
COPY --from=build /build/public ./public
|
||||
|
||||
USER node
|
||||
|
||||
EXPOSE 3000
|
||||
CMD ["yarn", "start"]
|
||||
|
Loading…
Reference in New Issue
Block a user