Dockerfile 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. # syntax = docker/dockerfile:1.2
  2. ##
  3. ## deps-resolver-base
  4. ##
  5. FROM node:14-slim AS deps-resolver-base
  6. ENV appDir /opt
  7. WORKDIR ${appDir}
  8. COPY ./package.json ./
  9. COPY ./yarn.lock ./
  10. COPY ./lerna.json ./
  11. COPY ./packages/slack/package.json ./packages/slack/package.json
  12. COPY ./packages/slackbot-proxy/package.json ./packages/slackbot-proxy/package.json
  13. # setup
  14. RUN yarn config set network-timeout 300000
  15. ##
  16. ## deps-resolver-dev
  17. ##
  18. FROM deps-resolver-base AS deps-resolver-dev
  19. RUN npx lerna bootstrap
  20. ##
  21. ## deps-resolver-prod
  22. ##
  23. FROM deps-resolver-base AS deps-resolver-prod
  24. RUN npx lerna bootstrap -- --production
  25. # make artifacts
  26. RUN tar cf dependencies.tar node_modules packages/slackbot-proxy/node_modules
  27. ##
  28. ## builder
  29. ##
  30. FROM node:14-slim AS builder
  31. ENV appDir /opt
  32. WORKDIR ${appDir}
  33. COPY --from=deps-resolver-dev ${appDir}/node_modules node_modules
  34. # copy all related packages
  35. COPY packages/slack packages/slack
  36. COPY packages/slackbot-proxy packages/slackbot-proxy
  37. COPY ./package.json ./
  38. COPY ./lerna.json ./
  39. COPY ./tsconfig.base.json ./
  40. COPY ./packages/slack ./packages/slack
  41. COPY ./packages/slackbot-proxy ./packages/slackbot-proxy
  42. # build
  43. RUN yarn lerna run build
  44. # make artifacts
  45. RUN tar cf packages.tar \
  46. packages/slack/package.json \
  47. packages/slack/dist \
  48. packages/slackbot-proxy/package.json \
  49. packages/slackbot-proxy/.env \
  50. packages/slackbot-proxy/dist
  51. ##
  52. ## release
  53. ##
  54. FROM node:14-slim
  55. LABEL maintainer Yuki Takei <yuki@weseek.co.jp>
  56. ENV NODE_ENV production
  57. ENV appDir /opt
  58. # copy artifacts
  59. COPY --from=deps-resolver-prod --chown=node:node \
  60. ${appDir}/dependencies.tar ${appDir}/
  61. COPY --from=builder --chown=node:node \
  62. ${appDir}/packages.tar ${appDir}/
  63. RUN chown node:node ${appDir}
  64. USER node
  65. # extract artifacts
  66. WORKDIR ${appDir}
  67. RUN tar xf dependencies.tar
  68. RUN tar xf packages.tar
  69. RUN rm dependencies.tar packages.tar
  70. WORKDIR ${appDir}/packages/slackbot-proxy
  71. EXPOSE 8080
  72. CMD ["node", "-r", "dotenv-flow/config", "dist/index.js"]