使用Cloud Foundry和Node.js创建一个Hello World应用程序
总结
-
- 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
参考:生产服务器配置 | Cloud Foundry 文档
索引.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)
参考:Node.js 应用程序的技巧 | Cloud Foundry 文档
清单.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的翻译:
配件.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