فهرست منبع

add docker-entrypoint.sh

Yuki Takei 6 سال پیش
والد
کامیت
661cffa2c7
2فایلهای تغییر یافته به همراه48 افزوده شده و 28 حذف شده
  1. 34 16
      docker/Dockerfile
  2. 14 12
      docker/docker-entrypoint.sh

+ 34 - 16
docker/Dockerfile

@@ -29,6 +29,17 @@ RUN --mount=type=cache,target=/usr/local/share/.cache/yarn \
 
 
 
+##
+## deps-resolver-prod
+##
+FROM deps-resolver AS deps-resolver-prod
+
+# shrink dependencies for production
+RUN --mount=type=cache,target=/usr/local/share/.cache/yarn \
+  yarn install --production
+
+
+
 ##
 ## prebuilder-default
 ##
@@ -37,10 +48,14 @@ LABEL maintainer Yuki Takei <yuki@weseek.co.jp>
 
 ENV appDir /opt/growi
 
-COPY --from=deps-resolver ${appDir}/node_modules ${appDir}/node_modules
-COPY . ${appDir}/
-
-WORKDIR ${appDir}
+COPY bin ${appDir}/bin
+COPY config ${appDir}/config
+COPY public ${appDir}/public
+COPY resource ${appDir}/resource
+COPY src ${appDir}/src
+COPY tmp ${appDir}/tmp
+COPY babel.config.js package.json yarn.lock ${appDir}/
+COPY *.md LICENSE ${appDir}/
 
 
 
@@ -50,7 +65,7 @@ WORKDIR ${appDir}
 FROM prebuilder-default AS prebuilder-nocdn
 
 # replace env.prod.js for NO_CDN
-COPY nocdn/env.prod.js config
+COPY docker/nocdn/env.prod.js ${appDir}/config/
 
 
 
@@ -61,16 +76,18 @@ FROM prebuilder-${flavor} AS builder
 
 ENV appDir /opt/growi
 
+COPY --from=deps-resolver ${appDir}/node_modules ${appDir}/node_modules
+
+WORKDIR ${appDir}
+
 # build
 RUN yarn build:prod
-# shrink dependencies for production
-RUN --mount=type=cache,target=/usr/local/share/.cache/yarn \
-  yarn install --production
 
 # remove unnecessary files
-WORKDIR /tmp
-RUN --mount=target=. sh docker/bin/remove-unnecessary-files.sh
-WORKDIR ${appDir}
+RUN rm -rf bin
+RUN rm -rf node_modules
+RUN rm -rf src/client src/linter-checker src/test
+RUN rm -rf babel.config.js
 
 
 
@@ -86,16 +103,17 @@ ENV appDir /opt/growi
 RUN --mount=type=cache,target=/var/cache/apk \
   apk add tini
 
-COPY --from=builder --chown=node:node ${appDir} ${appDir}
+COPY docker/docker-entrypoint.sh /
+COPY --from=deps-resolver-prod --chown=node:node \
+  ${appDir}/node_modules ${appDir}/node_modules
+COPY --from=builder --chown=node:node \
+  ${appDir} ${appDir}
 
-# create symlink for FILE_UPLOAD=local
-WORKDIR /tmp
-RUN --mount=target=. sh docker/bin/symlink-for-uploading-to-local.sh
 WORKDIR ${appDir}
 
 USER node
 VOLUME /data
 EXPOSE 3000
 
-ENTRYPOINT ["/sbin/tini", "-e", "143", "--"]
+ENTRYPOINT ["/docker-entrypoint.sh"]
 CMD ["yarn", "server:prod"]

+ 14 - 12
docker/bin/symlink-for-uploading-to-local.sh → docker/docker-entrypoint.sh

@@ -1,12 +1,14 @@
-#!/bin/sh
-
-set -e
-
-# Corresponds to `FILE_UPLOAD=local`
-mkdir -p /data/uploads
-if [ ! -e "$appDir/public/uploads" ]; then
-  ln -s /data/uploads $appDir/public/uploads
-fi
-
-chown node:node /data/uploads
-chown -h node:node $appDir/public/uploads
+#!/bin/sh
+
+set -e
+
+# Corresponds to `FILE_UPLOAD=local`
+mkdir -p /data/uploads
+if [ ! -e "$APP_DIR/public/uploads" ]; then
+  ln -s /data/uploads $APP_DIR/public/uploads
+fi
+
+chown node:node /data/uploads
+chown -h node:node $appDir/public/uploads
+
+exec "/sbin/tini -e 143 -- $@"