Yuki Takei 4 лет назад
Родитель
Сommit
e534e3738e
3 измененных файлов с 43 добавлено и 47 удалено
  1. 43 26
      docker/Dockerfile
  2. 0 14
      docker/Dockerfile.dockerignore
  3. 0 7
      docker/bin/remove-except-artifacts.sh

+ 43 - 26
docker/Dockerfile

@@ -13,16 +13,15 @@ LABEL maintainer Yuki Takei <yuki@weseek.co.jp>
 ENV appDir /opt/growi
 
 WORKDIR ${appDir}
-COPY ./package.json ./
-COPY ./yarn.lock ./
+COPY ./package.json .
+COPY ./yarn.lock .
+COPY ./lerna.json .
+COPY ./packages/app/package.json packages/app/
+COPY ./packages/slack/package.json packages/slack/
 
 # setup
 RUN yarn config set network-timeout 300000
-RUN yarn
-# install official plugins
-RUN yarn add -W growi-plugin-lsx growi-plugin-pukiwiki-like-linker growi-plugin-attachment-refs
-# install peerDependencies
-RUN yarn add -W -D react-images@1.0.0 react-motion
+RUN npx lerna bootstrap
 
 
 
@@ -34,24 +33,31 @@ FROM deps-resolver AS deps-resolver-prod
 # shrink dependencies for production
 RUN yarn install --production
 
+# make artifacts
+RUN tar cf node_modules.tar node_modules \
+  packages/app/node_modules \
+  packages/slack/node_modules
+
 
 
 ##
 ## prebuilder-default
 ##
 FROM node:14-slim AS prebuilder-default
-LABEL maintainer Yuki Takei <yuki@weseek.co.jp>
 
 ENV appDir /opt/growi
 
-COPY --from=deps-resolver ${appDir}/node_modules ${appDir}/node_modules
-
-# copy all files except the files listed in Dockerfile.dockerignore
-COPY . ${appDir}
+COPY ./package.json ./
+COPY ./lerna.json ./
+COPY ./tsconfig.base.json ./
+# copy all related packages
+COPY packages/slack packages/slack
+COPY packages/app packages/app
 
-# overwirte package.json and yarn.lock
-COPY --from=deps-resolver ${appDir}/package.json ${appDir}/package.json
-COPY --from=deps-resolver ${appDir}/yarn.lock ${appDir}/yarn.lock
+# copy dependent packages
+COPY --from=deps-resolver ${appDir}/node_modules .
+COPY --from=deps-resolver ${appDir}/packages/slack/node_modules packages/slack/
+COPY --from=deps-resolver ${appDir}/packages/app/node_modules packages/app/
 
 
 
@@ -77,31 +83,42 @@ WORKDIR ${appDir}
 # build
 RUN yarn build:prod
 
-# remove except artifacts
-WORKDIR /tmp
-RUN --mount=target=. sh docker/bin/remove-except-artifacts.sh
-WORKDIR ${appDir}
+# make artifacts
+RUN tar cf packages.tar \
+  packages/app/package.json \
+  packages/app/config \
+  packages/app/public \
+  packages/app/tmp \
+  packages/slack/package.json \
+  packages/slack/dist
+
 
 
 
 ##
 ## release
 ##
-FROM node:14-alpine
+FROM node:14-slim
 LABEL maintainer Yuki Takei <yuki@weseek.co.jp>
 
 ENV appDir /opt/growi
 
-# install tini
-RUN apk add tini su-exec
+COPY --from=deps-resolver-prod --chown=node:node \
+  ${appDir}/node_modules.tar ${appDir}/
+COPY --from=builder --chown=node:node \
+  ${appDir}/packages.tar ${appDir}/
 
 COPY docker/docker-entrypoint.sh /
 RUN chmod 700 /docker-entrypoint.sh
+RUN chown node:node ${appDir}
 
-COPY --from=deps-resolver-prod --chown=node:node \
-  ${appDir}/node_modules ${appDir}/node_modules
-COPY --from=builder --chown=node:node \
-  ${appDir} ${appDir}
+USER node
+
+# extract node_modules.tar
+WORKDIR ${appDir}
+RUN tar xf node_modules.tar
+RUN tar xf packages.tar
+RUN rm node_modules.tar packages.tar
 
 WORKDIR ${appDir}
 

+ 0 - 14
docker/Dockerfile.dockerignore

@@ -1,14 +0,0 @@
-.git
-.github
-.vscode
-node_modules
-packages
-src/linter-checker
-src/test
-.editorconfig
-.eslint*
-.gitignore
-.prettier*
-.stylelint*
-app.json
-Procfile

+ 0 - 7
docker/bin/remove-except-artifacts.sh

@@ -1,7 +0,0 @@
-#!/bin/sh
-
-set -e
-
-rm -rf \
-  ${appDir}/docker \
-  ${appDir}/node_modules \