Closed6
HerokuにNestアプリをデプロイしてみる
前提
- Heroku Echoプラン
- アカウント作成、MFA、クレカ登録済み
- /backend配下にNestアプリ
- npm workspaces構成のモノレポ想定
Heroku CLIを入れる
brew tap heroku/brew && brew install heroku
ブラウザが勝手に起動して、ログインされる
heroku login
git init
heroku.yml側でデプロイするには、以下のコマンドでクラウド側に設定が必要みたい
heroku stack:set container -a <アプリ名>
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 /app/dist /app/dist
COPY /app/node_modules /app/node_modules
COPY /app/package.json /app/package.json
EXPOSE 80 443
ENTRYPOINT [ "node" ]
CMD [ "dist/main.js" ]
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
いけた
$ 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
次は、PlanetScaleと繋げるよ!ってことでクローズ
このスクラップは2023/02/23にクローズされました