【エラー対処】HerokuでNode.js(express)アプリ起動に失敗(failed to bind to $PORT)

[記事内には広告が含まれています]

こんにちは、現役エンジニアの inno_tech です。

HerokuNode.js(express)のWebアプリをデプロイしたところ、Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch というエラーが発生しました

Web process failed to bind to $PORT within 60 seconds of launchの解決方法をまとめました。

ちなみに、HerokuでNode.jsアプリケーションを公開方法の詳細はこちらにまとめているので参考にしてください。

あわせて読みたい
【まとめ】Node.js製WebアプリをHerokuで公開する方法 Node.js(express)で開発したWebアプリケーションをインターネット上に公開する方法をお探しでしょうか? 本記事を見れば、HerokuというPaasプラットフォームを利用してN...

本記事はUbuntu 20.04LTS / Node.js v16系 で動作を確認しております。

もくじ

エラー原因 | ポート番号の不一致

まずはHeroku CLIからログを確認します。

# ログを確認
heroku logs --tail

# エラーログ
Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch

冒頭に記載のように、Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch が発生しています。

調べてみると、Heroku起動時のポート番号アプリケーション(express)の起動ポート番号が一致しない場合のエラーだとわかりました。

Heroku上では動的にポートが決定される仕様であるため、環境変数から取得する必要があります

対策 | 環境変数からポート番号を取得

expressサーバーを起動しているapp.jsのポート指定部分を書き換えます。

Node.jsの場合、process.env.PORT環境変数からポート番号を取得できるので、以下のようにすればOKです。

const http    = require('http');
const express = require('express');
 
//(中略)

/* サーバーの起動 */
const server = http.createServer(app);
server.listen(process.env.PORT || 3000);

まとめ

今回のまとめです。

  • Heroku上のアプリケーションは、動的にポート番号が割り当てられる
  • プログラム上ではポート番号を環境変数から取得する

発売2ヶ月で15万部を突破した評判の書籍はこちら。数値化を意識することでボヤっとしていた仕事が具体的に捉えられるようになり、もっと前に進めるようになりますね。

参考になったでしょうか。
ほかにも役立つ情報が他のページにもあるかもしれません。
ご覧になるかはあなた次第です!

この記事がイイねと思ったら、Twitterフォロー か  にほんブログ村のどちらかしてくれたら嬉しいよ!

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!

コメント / ご要望

コメントする

goto
もくじ
閉じる