Dockerfile 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. # syntax = docker/dockerfile:experimental
  2. ARG flavor=default
  3. ##
  4. ## deps-resolver
  5. ##
  6. FROM node:14-slim AS deps-resolver
  7. LABEL maintainer Yuki Takei <yuki@weseek.co.jp>
  8. ENV appDir /opt/growi
  9. WORKDIR ${appDir}
  10. COPY ./package.json ./
  11. COPY ./yarn.lock ./
  12. # setup
  13. RUN yarn config set network-timeout 300000
  14. RUN yarn
  15. # install official plugins
  16. RUN yarn add growi-plugin-lsx growi-plugin-pukiwiki-like-linker growi-plugin-attachment-refs
  17. # install peerDependencies
  18. RUN yarn add -D react-images@1.0.0 react-motion
  19. ##
  20. ## deps-resolver-prod
  21. ##
  22. FROM deps-resolver AS deps-resolver-prod
  23. # shrink dependencies for production
  24. RUN yarn install --production
  25. ##
  26. ## prebuilder-default
  27. ##
  28. FROM node:14-slim AS prebuilder-default
  29. LABEL maintainer Yuki Takei <yuki@weseek.co.jp>
  30. ENV appDir /opt/growi
  31. COPY --from=deps-resolver ${appDir}/node_modules ${appDir}/node_modules
  32. # copy all files except the files listed in Dockerfile.dockerignore
  33. COPY . ${appDir}
  34. # overwirte package.json and yarn.lock
  35. COPY --from=deps-resolver ${appDir}/package.json ${appDir}/package.json
  36. COPY --from=deps-resolver ${appDir}/yarn.lock ${appDir}/yarn.lock
  37. ##
  38. ## prebuilder-nocdn
  39. ##
  40. FROM prebuilder-default AS prebuilder-nocdn
  41. # replace env.prod.js for NO_CDN
  42. COPY docker/nocdn/env.prod.js ${appDir}/config/
  43. ##
  44. ## builder
  45. ##
  46. FROM prebuilder-${flavor} AS builder
  47. ENV appDir /opt/growi
  48. WORKDIR ${appDir}
  49. # build
  50. RUN yarn build:prod
  51. # remove except artifacts
  52. WORKDIR /tmp
  53. RUN --mount=target=. sh docker/bin/remove-except-artifacts.sh
  54. WORKDIR ${appDir}
  55. ##
  56. ## release
  57. ##
  58. FROM node:14-alpine
  59. LABEL maintainer Yuki Takei <yuki@weseek.co.jp>
  60. ENV appDir /opt/growi
  61. # install tini
  62. RUN apk add tini su-exec
  63. COPY docker/docker-entrypoint.sh /
  64. RUN chmod 700 /docker-entrypoint.sh
  65. COPY --from=deps-resolver-prod --chown=node:node \
  66. ${appDir}/node_modules ${appDir}/node_modules
  67. COPY --from=builder --chown=node:node \
  68. ${appDir} ${appDir}
  69. WORKDIR ${appDir}
  70. VOLUME /data
  71. EXPOSE 3000
  72. ENTRYPOINT ["/sbin/tini", "-e", "143", "--", "/docker-entrypoint.sh"]
  73. CMD ["yarn", "server:prod"]