Dockerfile 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. ########################################################################
  2. # deps-resolver
  3. ########################################################################
  4. FROM node:20-slim AS deps-resolver
  5. WORKDIR /app
  6. COPY package.json yarn.lock ./
  7. RUN yarn --frozen-lockfile
  8. RUN tar -cf node_modules.tar \
  9. node_modules \
  10. && rm -rf node_modules
  11. ########################################################################
  12. # deps-resolver-prod
  13. ########################################################################
  14. FROM deps-resolver AS deps-resolver-prod
  15. WORKDIR /app
  16. RUN yarn --production
  17. RUN tar -cf node_modules.tar \
  18. node_modules \
  19. && rm -rf node_modules
  20. ########################################################################
  21. # builder
  22. ########################################################################
  23. FROM node:20-slim AS builder
  24. WORKDIR /app
  25. COPY package.json yarn.lock tsconfig.json tsconfig.build.json .eslintrc.js ./
  26. COPY src ./src
  27. COPY --from=deps-resolver /app/node_modules.tar ./
  28. RUN tar -xf node_modules.tar \
  29. && rm node_modules.tar \
  30. && yarn build \
  31. && tar -cf packages.tar \
  32. package.json \
  33. yarn.lock \
  34. dist \
  35. && rm -rf node_modules
  36. ########################################################################
  37. # production
  38. ########################################################################
  39. FROM node:20-slim
  40. ENV NODE_ENV=production
  41. ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium
  42. ENV LANG=ja_JP.UTF-8
  43. RUN apt-get update && apt-get install -y tini chromium locales fonts-ipafont fonts-ipaexfont fonts-ipafont-gothic fonts-ipafont-mincho && apt-get clean \
  44. && rm -rf /var/lib/apt/lists/* \
  45. && echo "ja_JP UTF-8" > /etc/locale.gen && locale-gen
  46. USER node
  47. WORKDIR /app
  48. COPY --from=deps-resolver-prod --chown=node:node \
  49. /app/node_modules.tar ./
  50. COPY --from=builder --chown=node:node \
  51. /app/packages.tar ./
  52. RUN tar -xf node_modules.tar \
  53. && tar -xf packages.tar \
  54. && rm node_modules.tar packages.tar
  55. # change permission for shared volume
  56. RUN mkdir -p /tmp/page-bulk-export && chmod -R 777 /tmp/page-bulk-export
  57. EXPOSE 3010
  58. ENTRYPOINT ["/usr/bin/tini", "-e", "143", "--"]
  59. CMD ["node", "dist/index.js"]