Closed6

HerokuにNestアプリをデプロイしてみる

shuntakashuntaka

前提

  • Heroku Echoプラン
  • アカウント作成、MFA、クレカ登録済み
  • /backend配下にNestアプリ
  • npm workspaces構成のモノレポ想定
shuntakashuntaka

heroku.yml側でデプロイするには、以下のコマンドでクラウド側に設定が必要みたい

heroku stack:set container -a <アプリ名>
shuntakashuntaka

Nestプロジェクトをデプロイしてみる。

backend/Dockerfile
FROM node:16.13.1-alpine AS build
WORKDIR /app

COPY backend/package.json ./

COPY package-lock.json ./
RUN npm ci

COPY backend/tsconfig.build.json ./
COPY backend/tsconfig.json ./
COPY backend/src ./app
RUN npm run build

FROM node:16.13.1-alpine AS production


ENV PORT=80

WORKDIR /app

COPY --from=build /app/dist /app/dist
COPY --from=build /app/node_modules /app/node_modules
COPY --from=build /app/package.json /app/package.json

EXPOSE 80 443
ENTRYPOINT [ "node" ]
CMD [ "dist/main.js" ]

https://stackoverflow.com/questions/54500977/building-a-heroku-docker-image-for-a-specific-context

Docker build contextは常にDockerfileを含むディレクトリに設定され、単独で設定することはできません。

要はリポジトリルートからpackage-lock.jsonをコンテナに含めるために、Docker build contextに入れたいんだが、Dockerファイルがあるbackendディレクトリにcontextにが固定されてしまう問題

↑の回答通り、シンボリックリンクを貼ったらイケた。気づきそうで気づかない解決策だなー、助かった。

ln -s backend/Dockerfile Dockerfile.heroku
heroku.yml
build:
  docker:
    web: Dockerfile.heroku
  config:
    PORT: 80
shuntakashuntaka

いけた

$ heroku logs -a <アプリ名>
(中略)
2023-02-23T09:41:06.195246+00:00 heroku[web.1]: State changed from crashed to starting
2023-02-23T09:41:11.787489+00:00 heroku[web.1]: Starting process with command `dist/main.js`
2023-02-23T09:41:13.777509+00:00 app[web.1]: [Nest] 2  - 02/23/2023, 9:41:13 AM     LOG [NestFactory] Starting Nest application...
2023-02-23T09:41:13.796051+00:00 app[web.1]: [Nest] 2  - 02/23/2023, 9:41:13 AM     LOG [InstanceLoader] AppModule dependencies initialized +39ms
2023-02-23T09:41:13.804030+00:00 app[web.1]: [Nest] 2  - 02/23/2023, 9:41:13 AM     LOG [RoutesResolver] HealthCheckController {/health-check}: +8ms
2023-02-23T09:41:13.807259+00:00 app[web.1]: [Nest] 2  - 02/23/2023, 9:41:13 AM     LOG [RouterExplorer] Mapped {/health-check, GET} route +3ms
2023-02-23T09:41:13.811675+00:00 app[web.1]: [Nest] 2  - 02/23/2023, 9:41:13 AM     LOG [NestApplication] Nest application successfully started +4ms
2023-02-23T09:41:14.095808+00:00 heroku[web.1]: State changed from starting to up
2023-02-23T09:41:16.056939+00:00 heroku[router]: at=info method=GET path="/health-check" host=アプリ名.herokuapp.com request_id=b157c392-eb6e-4384-b33b-4938291496cc fwd="123.198.75.191" dyno=web.1 connect=0ms service=10ms status=204 bytes=106 protocol=https
2023-02-23T09:41:28.755604+00:00 heroku[router]: at=info method=GET path="/health-check" host=アプリ名.herokuapp.com request_id=64e80f72-151c-49c8-aba2-7698478c2484 fwd="123.198.75.191" dyno=web.1 connect=0ms service=3ms status=204 bytes=106 protocol=https

shuntakashuntaka

次は、PlanetScaleと繋げるよ!ってことでクローズ

このスクラップは2023/02/23にクローズされました