# syntax = docker/dockerfile:1.2 ## Install dev and compilation dependencies, build files FROM docker.io/library/alpine:edge as build LABEL stage=build WORKDIR /iceshrimp # Install compilation dependencies RUN apk add --no-cache --no-progress git alpine-sdk python3 py3-setuptools nodejs npm linux-headers brotli # Copy in all files for the build COPY . ./ # Prepare yarn cache RUN --mount=type=cache,target=/iceshrimp/.yarncache cp -r .yarncache/. .yarn # Configure corepack and install dev mode dependencies for compilation RUN npm install -g corepack && corepack enable && corepack prepare --activate && yarn --immutable # Save yarn cache RUN --mount=type=cache,target=/iceshrimp/.yarncache rm -rf .yarncache/* && cp -r .yarn/. .yarncache # Build the thing RUN env NODE_ENV=production yarn build # Optimize RUN env NODE_ENV=production yarn build:optimize # Prepare focused yarn cache RUN --mount=type=cache,target=/iceshrimp/.yarncache_focused cp -r .yarncache_focused/. .yarn # Remove dev deps RUN yarn focus-production # Save focused yarn cache RUN --mount=type=cache,target=/iceshrimp/.yarncache_focused rm -rf .yarncache/* && cp -r .yarn/. .yarncache_focused ## Runtime container FROM docker.io/library/alpine:edge LABEL stage=runtime WORKDIR /iceshrimp # Install runtime dependencies RUN apk add --no-cache --no-progress tini ffmpeg zip unzip nodejs npm libheif-dev # Copy built files COPY --from=build /iceshrimp /iceshrimp # Configure corepack RUN npm install -g corepack && corepack enable && corepack prepare --activate # Remove unnecessary npm RUN apk del npm ENV NODE_ENV=production VOLUME "/iceshrimp/files" ENTRYPOINT [ "/sbin/tini", "--" ] CMD [ "yarn", "run", "migrateandstart" ]