Node.jsアプリをHerokuにデプロイする

Node.jsアプリをHerokuにデプロイする方法を調べましたので、その際の手順を残します。

基本的には公式のデプロイガイドを参照しています。OSはUbuntu 16.04 Serverです。

次のソフトウェアはインストールされているものとします。

  • Node.js
  • npm
  • Git

1. Herokuにアカウントを作ります

Herokuでアカウントを作ります。

2. Heroku CLIをUbuntuにインストールします

Heroku CLI(Command Line Interface)をインストールすると、herokuコマンドが使えるようになり、Herokuの操作が可能になります。

$ sudo add-apt-repository "deb https://cli-assets.heroku.com/branches/stable/apt ./"
$ curl -L https://cli-assets.heroku.com/apt/release.key | sudo apt-key add -
$ sudo apt-get update
$ sudo apt-get install heroku

バージョンを確認してみます。

$ heroku -v
heroku-cli/6.13.18 (linux-x64) node-v8.3.0

3. Herokuにログインします

$ heroku login
Enter your Heroku credentials:
Email: ***
Password: ***
Two-factor code: ***
Logged in as ***

4. Node.jsアプリを準備します

4-1. Hello Worldを返すNode.jsプロジェクトを用意します。

Node.jsプロジェクト用のフォルダ(node)を作り、そこにapp.jsを作成します。

@~/path/to/node/app.js

const http = require('http');
const server = http.createServer((req, res) => {
 res.statusCode = 200;
 res.setHeader('Content-Type', 'text/plain');
 res.end('Hello World\n');
}).listen(process.env.PORT || 3000, () => {
 console.log(`Server running.`);
});

注意. Herokuで使用されるポート番号は動的に変わるので、ポート番号は環境変数の process.env.PORT を使って指定します。

4-2. package.jsonを作成します。

Herokuに対して使用している言語や環境情報を伝えるにはpackage.jsonファイルを用意する必要があるので、npm initコマンドで作成します。途中の質問事項は適時入力するかEnterでスキップします。

$ cd ~/path/to/node
$ npm init
package name: (deploy-test) 
version: (1.0.0) 
description: 
entry point: (app.js) 
test command: 
git repository: 
keywords: 
author: 
license: (ISC) 

生成されたpackage.jsonには、start scriptを追加する必要があります。下の"start"の行を追加しました。これが無いとデプロイ後に npm ERR! missing script: start としてエラーが発生します。

@~/path/to/node/package.json

 "main": "app.js",
 "scripts": {
  "start": "node app.js",
  "test": "echo \"Error: no test specified\" && exit 1"
 },

4-3. Git管理をします

Gitリポジトリを作成します。

$ git init
$ git add .
$ git commit -m "Initial commit"

5. Herokuにデプロイします

プロジェクトフォルダに移動して、Heroku上に空のアプリケーションを作ります。

$ cd ~/path/to/node
$ heroku create
Creating app... done, ***
http://***.herokuapp.com/ | https://git.heroku.com/***.git
Git remote heroku added

このときリモートリポジトリにHerokuのリポジトリが自動で登録されます。登録されたか確認してみます。

$ git remote -v
heroku https://git.heroku.com/***.git (fetch)
heroku https://git.heroku.com/***.git (push)

最後にHerokuにアプリケーションをプッシュします。

$ git push heroku master

heroku create時に生成されたURLにアクセスするとWebサイトが表示されます。

 

6. 異常発生時は?

Herokuへのプッシュに失敗する場合は、コンソールに表示されるエラーメッセージを確認して対応します。

Herokuへのデプロイ後にサイトが表示されない場合は、heroku logs コマンドでエラーメッセージを確認して対応します。

$ heroku logs