Dockerfile 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. # syntax = docker/dockerfile:1
  2. ARG NODE_VERSION=24
  3. ##
  4. ## base
  5. ##
  6. FROM node:${NODE_VERSION}-slim AS base
  7. ENV optDir="/opt"
  8. WORKDIR ${optDir}
  9. # install pnpm
  10. RUN apt-get update && apt-get install -y ca-certificates wget --no-install-recommends \
  11. && wget -qO- https://get.pnpm.io/install.sh | ENV="$HOME/.shrc" SHELL="$(which sh)" PNPM_VERSION="10.4.1" sh -
  12. ENV PNPM_HOME="/root/.local/share/pnpm"
  13. ENV PATH="$PNPM_HOME:$PATH"
  14. # install turbo
  15. RUN pnpm add turbo --global
  16. ##
  17. ## builder
  18. ##
  19. FROM base AS builder
  20. ENV optDir="/opt"
  21. WORKDIR ${optDir}
  22. COPY . .
  23. RUN pnpm add node-gyp --global
  24. RUN pnpm install ---frozen-lockfile
  25. # build
  26. RUN turbo run build --filter @growi/slackbot-proxy
  27. # make artifacts
  28. RUN pnpm deploy out --prod --filter @growi/slackbot-proxy
  29. RUN rm -rf apps/slackbot-proxy/node_modules && mv out/node_modules apps/slackbot-proxy/node_modules
  30. RUN tar -zcf packages.tar.gz \
  31. package.json \
  32. apps/slackbot-proxy/package.json \
  33. apps/slackbot-proxy/dist \
  34. apps/slackbot-proxy/.env \
  35. apps/slackbot-proxy/node_modules
  36. ##
  37. ## release
  38. ##
  39. ARG NODE_VERSION=24
  40. FROM node:${NODE_VERSION}-slim
  41. LABEL maintainer="Yuki Takei <yuki@weseek.co.jp>"
  42. ENV NODE_ENV="production"
  43. ENV optDir="/opt"
  44. ENV appDir="${optDir}/slackbot-proxy"
  45. # copy artifacts
  46. COPY --from=builder --chown=node:node \
  47. ${optDir}/packages.tar.gz ${appDir}/
  48. # extract artifacts as 'node' user
  49. USER node
  50. WORKDIR ${appDir}
  51. RUN tar -xf packages.tar.gz && rm packages.tar.gz
  52. WORKDIR ${appDir}/apps/slackbot-proxy
  53. EXPOSE 8080
  54. CMD ["node", "-r", "dotenv-flow/config", "dist/index.js"]