Dockerfile 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. # syntax = docker/dockerfile:1.2
  2. ##
  3. ## deps-resolver
  4. ##
  5. FROM node:14-slim AS deps-resolver
  6. LABEL maintainer Yuki Takei <yuki@weseek.co.jp>
  7. ENV appDir /opt
  8. WORKDIR ${appDir}
  9. COPY ./package.json ./
  10. COPY ./yarn.lock ./
  11. COPY ./lerna.json ./
  12. # setup
  13. RUN yarn config set network-timeout 300000
  14. RUN npx lerna bootstrap
  15. ##
  16. ## deps-resolver-prod
  17. ##
  18. FROM deps-resolver AS deps-resolver-prod
  19. # shrink dependencies for production
  20. RUN yarn install --production
  21. ##
  22. ## builder
  23. ##
  24. FROM node:14-slim AS builder
  25. LABEL maintainer Yuki Takei <yuki@weseek.co.jp>
  26. ENV appDir /opt
  27. COPY --from=deps-resolver ${appDir}/node_modules ${appDir}/node_modules
  28. # copy all packages
  29. COPY packages ${appDir}/packages
  30. COPY ./package.json ./
  31. COPY ./yarn.lock ./
  32. COPY ./lerna.json ./
  33. # build
  34. RUN yarn lerna run --scope @growi/slack --scope @growi/slackbot-proxy build
  35. ##
  36. ## release
  37. ##
  38. FROM gcr.io/distroless/nodejs:14
  39. LABEL maintainer Yuki Takei <yuki@weseek.co.jp>
  40. ENV appDir /opt
  41. COPY --from=deps-resolver-prod \
  42. ${appDir}/node_modules ${appDir}/node_modules
  43. COPY --from=builder \
  44. ${appDir}/packages/slack/dist ${appDir}/slack
  45. COPY --from=builder \
  46. ${appDir}/packages/slackbot-proxy/dist ${appDir}/slackbot-proxy
  47. WORKDIR ${appDir}
  48. VOLUME /data
  49. EXPOSE 3000
  50. CMD ["yarn", "server:prod"]