Yuki Takei 1 год назад
Родитель
Сommit
8125415be0
1 измененных файлов с 40 добавлено и 15 удалено
  1. 40 15
      apps/slackbot-proxy/docker/Dockerfile

+ 40 - 15
apps/slackbot-proxy/docker/Dockerfile

@@ -9,28 +9,46 @@ ENV optDir /opt
 
 WORKDIR ${optDir}
 
-RUN yarn global add turbo
+# install pnpm
+RUN apt-get update && apt-get install -y ca-certificates wget --no-install-recommends \
+  && wget -qO- https://get.pnpm.io/install.sh | ENV="$HOME/.shrc" SHELL="$(which sh)" sh -
+ENV PNPM_HOME "/root/.local/share/pnpm"
+ENV PATH "$PNPM_HOME:$PATH"
+
+# install turbo
+RUN pnpm add turbo --global
+
+
+
+##
+## partialrepos
+##
+FROM base AS partialrepos
+
+ENV optDir /opt
+
+WORKDIR ${optDir}
+
 COPY . .
 RUN turbo prune @growi/slackbot-proxy --docker
 
 
+
 ##
 ## deps-resolver
 ##
-FROM node:20-slim AS deps-resolver
+FROM base AS deps-resolver
 
 ENV optDir /opt
 
 WORKDIR ${optDir}
 
 # copy files
-COPY --from=base ${optDir}/out/json/ .
-COPY --from=base ${optDir}/out/yarn.lock ./yarn.lock
+COPY --from=partialrepos ${optDir}/out/json/ .
+COPY --from=partialrepos ${optDir}/out/pnpm-lock.yaml ./pnpm-lock.yaml
 
-# setup (with network-timeout = 1 hour)
-RUN yarn config set network-timeout 3600000
-RUN yarn global add node-gyp
-RUN yarn --frozen-lockfile
+RUN pnpm add node-gyp --global
+RUN pnpm install --no-frozen-lockfile
 
 # make artifacts
 RUN tar -cf node_modules.tar \
@@ -45,7 +63,7 @@ RUN tar -cf node_modules.tar \
 ##
 FROM deps-resolver AS deps-resolver-prod
 
-RUN yarn --production
+RUN pnpm install --no-frozen-lockfile --prod
 # make artifacts
 RUN tar -cf node_modules.tar \
   node_modules \
@@ -57,7 +75,7 @@ RUN tar -cf node_modules.tar \
 ##
 ## builder
 ##
-FROM node:20-slim AS builder
+FROM base AS builder
 
 ENV optDir /opt
 
@@ -66,8 +84,8 @@ WORKDIR ${optDir}
 RUN yarn global add turbo
 
 # copy files
-COPY --from=base ${optDir}/out/full/ .
-COPY --from=base ${optDir}/out/yarn.lock ./yarn.lock
+COPY --from=partialrepos ${optDir}/out/full/ .
+COPY --from=partialrepos ${optDir}/out/pnpm-lock.yaml ./pnpm-lock.yaml
 COPY ["tsconfig.base.json", "./"]
 
 # copy dependent packages
@@ -102,16 +120,23 @@ ENV NODE_ENV production
 
 ENV optDir /opt
 ENV appDir ${optDir}/slackbot-proxy
-USER node
+
+# Add pnpm
+RUN apt-get update && apt-get install -y ca-certificates wget --no-install-recommends \
+  && wget -qO- https://get.pnpm.io/install.sh | ENV="$HOME/.shrc" SHELL="$(which sh)" sh - \
+  && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false
+ENV PNPM_HOME "/root/.local/share/pnpm"
+ENV PATH "$PNPM_HOME:$PATH"
+
 # copy artifacts
 COPY --from=deps-resolver-prod --chown=node:node \
   ${optDir}/node_modules.tar ${appDir}/
 COPY --from=builder --chown=node:node \
   ${optDir}/packages.tar ${appDir}/
 
+# extract artifacts as 'node' user
+USER node
 WORKDIR ${appDir}
-
-# extract artifacts
 RUN tar -xf node_modules.tar
 RUN tar -xf packages.tar
 RUN rm node_modules.tar packages.tar