2
0

Dockerfile 2.2 KB

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