2
0

Dockerfile 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  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 node_modules.tar 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/dist
  50. ##
  51. ## release
  52. ##
  53. FROM node:14-slim
  54. LABEL maintainer Yuki Takei <yuki@weseek.co.jp>
  55. ENV NODE_ENV production
  56. ENV appDir /opt
  57. COPY --from=deps-resolver-prod --chown=node:node \
  58. ${appDir}/node_modules.tar ${appDir}/
  59. COPY --from=builder --chown=node:node \
  60. ${appDir}/packages.tar ${appDir}/
  61. RUN chown node:node ${appDir}
  62. USER node
  63. # extract node_modules.tar
  64. WORKDIR ${appDir}
  65. RUN tar xf node_modules.tar
  66. RUN tar xf packages.tar
  67. RUN rm node_modules.tar packages.tar
  68. WORKDIR ${appDir}/packages/slackbot-proxy
  69. EXPOSE 8080
  70. CMD ["node", "-r", "dotenv-flow/config", "dist/index.js"]