|
@@ -1,22 +1,31 @@
|
|
|
-# syntax = docker/dockerfile:1
|
|
|
|
|
|
|
+# syntax = docker/dockerfile:1.4
|
|
|
|
|
+
|
|
|
|
|
+ARG OPT_DIR="/opt"
|
|
|
|
|
+ARG PNPM_HOME="/root/.local/share/pnpm"
|
|
|
|
|
|
|
|
##
|
|
##
|
|
|
## base
|
|
## base
|
|
|
##
|
|
##
|
|
|
FROM node:20-slim AS base
|
|
FROM node:20-slim AS base
|
|
|
|
|
|
|
|
-ENV optDir="/opt"
|
|
|
|
|
|
|
+ARG OPT_DIR
|
|
|
|
|
+ARG PNPM_HOME
|
|
|
|
|
+
|
|
|
|
|
+WORKDIR $OPT_DIR
|
|
|
|
|
|
|
|
-WORKDIR ${optDir}
|
|
|
|
|
|
|
+# install tools
|
|
|
|
|
+RUN --mount=type=cache,target=/var/lib/apt,sharing=locked \
|
|
|
|
|
+ --mount=type=cache,target=/var/cache/apt,sharing=locked \
|
|
|
|
|
+ apt-get update && apt-get install -y ca-certificates wget --no-install-recommends
|
|
|
|
|
|
|
|
# install pnpm
|
|
# 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)" PNPM_VERSION="10.4.1" sh -
|
|
|
|
|
-ENV PNPM_HOME="/root/.local/share/pnpm"
|
|
|
|
|
|
|
+RUN wget -qO- https://get.pnpm.io/install.sh | ENV="$HOME/.shrc" SHELL="$(which sh)" PNPM_VERSION="10.4.1" sh -
|
|
|
|
|
+ENV PNPM_HOME=$PNPM_HOME
|
|
|
ENV PATH="$PNPM_HOME:$PATH"
|
|
ENV PATH="$PNPM_HOME:$PATH"
|
|
|
|
|
|
|
|
# install turbo
|
|
# install turbo
|
|
|
-RUN pnpm add turbo --global
|
|
|
|
|
|
|
+RUN --mount=type=cache,target=$PNPM_HOME/store,sharing=locked \
|
|
|
|
|
+ pnpm add turbo --global
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -25,13 +34,15 @@ RUN pnpm add turbo --global
|
|
|
##
|
|
##
|
|
|
FROM base AS builder
|
|
FROM base AS builder
|
|
|
|
|
|
|
|
-ENV optDir="/opt"
|
|
|
|
|
|
|
+ENV PNPM_HOME=$PNPM_HOME
|
|
|
|
|
+ENV PATH="$PNPM_HOME:$PATH"
|
|
|
|
|
|
|
|
-WORKDIR ${optDir}
|
|
|
|
|
|
|
+WORKDIR $OPT_DIR
|
|
|
|
|
|
|
|
COPY . .
|
|
COPY . .
|
|
|
|
|
|
|
|
-RUN pnpm install ---frozen-lockfile
|
|
|
|
|
|
|
+RUN --mount=type=cache,target=$PNPM_HOME/store,sharing=locked \
|
|
|
|
|
+ pnpm install ---frozen-lockfile
|
|
|
|
|
|
|
|
# build
|
|
# build
|
|
|
RUN turbo run clean
|
|
RUN turbo run clean
|
|
@@ -40,7 +51,7 @@ RUN turbo run build --filter @growi/pdf-converter
|
|
|
# make artifacts
|
|
# make artifacts
|
|
|
RUN pnpm deploy out --prod --filter @growi/pdf-converter
|
|
RUN pnpm deploy out --prod --filter @growi/pdf-converter
|
|
|
RUN rm -rf apps/pdf-converter/node_modules && mv out/node_modules apps/pdf-converter/node_modules
|
|
RUN rm -rf apps/pdf-converter/node_modules && mv out/node_modules apps/pdf-converter/node_modules
|
|
|
-RUN tar -zcf packages.tar.gz \
|
|
|
|
|
|
|
+RUN tar -zcf /tmp/packages.tar.gz \
|
|
|
package.json \
|
|
package.json \
|
|
|
apps/pdf-converter/package.json \
|
|
apps/pdf-converter/package.json \
|
|
|
apps/pdf-converter/dist \
|
|
apps/pdf-converter/dist \
|
|
@@ -55,27 +66,27 @@ RUN tar -zcf packages.tar.gz \
|
|
|
FROM node:20-slim
|
|
FROM node:20-slim
|
|
|
LABEL maintainer="Yuki Takei <yuki@weseek.co.jp>"
|
|
LABEL maintainer="Yuki Takei <yuki@weseek.co.jp>"
|
|
|
|
|
|
|
|
|
|
+ARG OPT_DIR
|
|
|
|
|
+
|
|
|
ENV NODE_ENV="production"
|
|
ENV NODE_ENV="production"
|
|
|
ENV PUPPETEER_EXECUTABLE_PATH="/usr/bin/chromium"
|
|
ENV PUPPETEER_EXECUTABLE_PATH="/usr/bin/chromium"
|
|
|
ENV LANG="ja_JP.UTF-8"
|
|
ENV LANG="ja_JP.UTF-8"
|
|
|
|
|
|
|
|
-ENV optDir="/opt"
|
|
|
|
|
-ENV appDir="${optDir}/pdf-converter"
|
|
|
|
|
|
|
+ENV appDir="$OPT_DIR/pdf-converter"
|
|
|
|
|
|
|
|
-RUN apt-get update && apt-get install -y chromium fonts-lato fonts-ipafont-gothic fonts-noto-cjk gosu \
|
|
|
|
|
- && apt-get clean \
|
|
|
|
|
- && rm -rf /var/lib/apt/lists/*; \
|
|
|
|
|
|
|
+RUN --mount=type=cache,target=/var/lib/apt,sharing=locked \
|
|
|
|
|
+ --mount=type=cache,target=/var/cache/apt,sharing=locked \
|
|
|
|
|
+ apt-get update; \
|
|
|
|
|
+ apt-get install -y chromium fonts-lato fonts-ipafont-gothic fonts-noto-cjk gosu; \
|
|
|
|
|
+ rm -rf /var/lib/apt/lists/*; \
|
|
|
# verify that the binary works
|
|
# verify that the binary works
|
|
|
- gosu nobody true
|
|
|
|
|
-
|
|
|
|
|
-# copy artifacts
|
|
|
|
|
-COPY --from=builder --chown=node:node \
|
|
|
|
|
- ${optDir}/packages.tar.gz ${appDir}/
|
|
|
|
|
|
|
+ gosu nobody true
|
|
|
|
|
|
|
|
# extract artifacts as 'node' user
|
|
# extract artifacts as 'node' user
|
|
|
USER node
|
|
USER node
|
|
|
WORKDIR ${appDir}
|
|
WORKDIR ${appDir}
|
|
|
-RUN tar -xf packages.tar.gz && rm packages.tar.gz
|
|
|
|
|
|
|
+RUN --mount=type=bind,from=builder,source=/tmp/packages.tar.gz,target=/tmp/packages.tar.gz \
|
|
|
|
|
+ tar -zxf /tmp/packages.tar.gz -C ${appDir}/
|
|
|
|
|
|
|
|
COPY --chown=node:node --chmod=700 apps/pdf-converter/docker/docker-entrypoint.sh /
|
|
COPY --chown=node:node --chmod=700 apps/pdf-converter/docker/docker-entrypoint.sh /
|
|
|
|
|
|