概要
- Cloud Foundry 上にシンプルな Node.js アプリケーションをデプロイして動作させる
- Cloud Foundry 環境は Pivotal Web Services を使用する
ソースコード
ソースコード一覧
.
├── Procfile
├── index.js
├── manifest.yml
└── package.json
Procfile
Procfile にはプログラムの開始コマンドを記述する。
今回は node コマンドで index.js を実行するよう指定している。
コロン左側にはプロセスタイプを指定する。プロセスタイプの web は HTTP 通信を処理することを意味している。
web: node index.js
参考: Production Server Configuration | Cloud Foundry Docs
index.js
HTTP リクエストを受けて結果を返すプログラム。
環境変数 PORT のデフォルト値は 8080 になっている。
ローカル環境でも動作するよう、環境変数が存在しない場合はポート番号に 8080 を指定している。
const http = require('http')
http.createServer(function (req, res) {
let body =
'<html><body>' + "\n" +
'<h1>Hello, world.</h1>' + "\n" +
`<div>process.env.PORT: ${process.env.PORT}</div>\n` +
'</body></html>' + "\n"
res.writeHead(200, {'Content-Type': 'text/html'})
res.end(body)
}).listen(process.env.PORT || 8080)
参考: Tips for Node.js Applications | Cloud Foundry Docs
manifest.yml
デプロイするアプリの環境設定ファイル。
random-route に true を指定することで衝突しないホストを自動生成している。
---
applications:
- name: my-nodejs-app
memory: 512M
instances: 1
random-route: true
buildpacks:
- https://github.com/cloudfoundry/nodejs-buildpack
参考:
- Deploying with App Manifests | Cloud Foundry Docs
- Tips for Node.js Applications | Cloud Foundry Docs
- App Manifest Attribute Reference | Cloud Foundry Docs
package.json
Node.js アプリケーションの設定ファイル。
Node.js のバージョンを指定しておく。
{
"name": "my-nodejs-app",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"engines": {
"node": "~>12"
}
}
参考:
- Node.js Buildpack | Cloud Foundry Docs
- Releases · cloudfoundry/nodejs-buildpack · GitHub
- Tips for Node.js Applications | Cloud Foundry Docs
- npm-package.json | npm Documentation
デプロイ
今回は、 Pivotal Web Services の Cloud Foundry 環境にデプロイしている。組織 (Org) とスペース (Space) は事前に作成している。
ログインする。
$ cf login -a https://api.run.pivotal.io
API エンドポイント: https://api.run.pivotal.io
(以下略)
組織とスペースを設定。
$ cf target -o myorg -s development
API エンドポイント https://api.run.pivotal.io
API バージョン: 2.142.0
ユーザー: you@example.com
組織: myorg
スペース: development
デプロイするソースコードを用意する。
$ tree
.
├── Procfile
├── index.js
├── manifest.yml
└── package.json
0 directories, 4 files
cf push コマンドでアプリケーションをデプロイする。
$ cf push
you@example.com としてマニフェストから組織 myorg / スペース development にプッシュしています...
(中略)
アプリが開始するのを待機しています...
名前: my-nodejs-app
要求された状態: started
経路: my-nodejs-app-xxxx-xxxxx.cfapps.io
最終アップロード日時: Sat 30 Nov 08:26:22 JST 2019
スタック: cflinuxfs3
ビルドパック: nodejs
タイプ: web
インスタンス: 1/1
メモリー使用量: 512M
開始コマンド: node index.js
状態 開始日時 cpu メモリー ディスク 詳細
#0 実行 2019-11-29T23:26:33Z 0.0% 512M の中の 14.2M 1G の中の 82.4M
デプロイしたアプリケーションに curl コマンドでアクセスして動作していることを確認。
$ curl https://my-nodejs-app-xxxx-xxxxx.cfapps.io/
<html><body>
<h1>Hello, world.</h1>
<div>process.env.PORT: 8080</div>
</body></html>
参考資料
- Getting Started with Pivotal Platform | Pivotal
- Node.js Buildpack | Cloud Foundry Docs
- Tips for Node.js Applications | Cloud Foundry Docs
- Deploying with App Manifests | Cloud Foundry Docs
- App Manifest Attribute Reference | Cloud Foundry Docs
- Releases · cloudfoundry/nodejs-buildpack · GitHub
- Production Server Configuration | Cloud Foundry Docs
- Pushing an App | Cloud Foundry Docs
- npm-package.json | npm Documentation