Dockerfile 2.1 KB

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