NodeJS应用部署指南¶
入门指南¶
准备工作¶
首先,我们从github上clone一个nodejs的示例程序。
$ git clone https://github.com/sinacloud/nodejs-getting-started.git
$ cd nodejs-getting-started
$ ls
README.md index.js package.json
示例代码中包含了三个文件,其中 index.js 是代码文件, package.json 是 npm 的包管理描述文件。
index.js 的代码如下,这是一个简单的 Express 应用,注意代码的最后一行,所有的NodeJS应用都需要监听环境变量的 PORT 指定的端口(默认为5050),并处理这个端口收到的所有HTTP请求。
var express = require('express')
var app = express()
app.get('/', function (req, res) {
res.send('Hello World')
})
app.listen(process.env.PORT || 5050)
下面是 package.json 的代码,其中的 dependencies 指定了本示例程序的依赖包, scripts/start 里指定了如何运行本示例代码。(新浪云在部署应用的时候会根据这个文件来安装应用相关的依赖以及来启动应用程序)。
{
"name": "nodejs-getting-started",
"description": "getting started with nodejs on sinacloud platform",
"version": "0.0.1",
"private": true,
"author": {
"name": "sae",
"email": "saemail@sina.cn"
},
"dependencies": {
"express": "^4.13.3"
},
"engines": {
"node": "0.10.36"
},
"scripts": {
"start": "node index.js"
}
}
我们执行 npm install && npm start ,在本地运行这个示例程序,现在我们可以通过 http://localhost:5050 来访问我们的应用了。
$ npm install && npm start
express@4.13.3 node_modules/express
├── escape-html@1.0.2
...
└── send@0.13.0 (destroy@1.0.3, statuses@1.2.1, ms@0.7.1, mime@1.3.4, http-errors@1.3.1)
> nodejs-getting-started@0.0.1 start /private/tmp/nodejs_helloworld
> node index.js
部署应用¶
应用创建完后,会显示你的应用的 git 仓库地址以及如何将代码提交到该 git 仓库,按照说明提交代码。
$ git remote add sinacloud https://git.sinacloud.com/helloworld
$ git push sinacloud master
...
remote: Exporting git code...
remote: Uploading...
-----> Xxx app detected
-----> Creating runtime environment
...
remote: Deploy and waiting for app to be ready .....
To https://git.sinacloud.com/ymp9vm2385
+ 74d7d50...470cb46 master -> master
部署的时候,git 会显示当前的进度,如果部署失败,会提示相应的错误信息(比如 package.json 格式问题等)。
部署完成后,我们就可以通过 http://helloworld.applinzi.com 来访问我们的应用了。
容器管理¶
在应用页面的左侧导航栏选择[容器管理],在这个页面可以管理您刚才部署的容器实例,并查看容器的实时运行状态信息。
构建和运行说明¶
如何识别应用是NodeJS应用?¶
新浪云容器通过通过判断应用根目录下是否存在 package.json 文件来判断一个应用是否是NodeJS应用。
指定NodeJS版本¶
部署应用的时候,最好指定你需要用到的NodeJS版本(使用和你本地测试用的版本一致)。如果不指定,容器云构建的时候默认会使用目前版本最高的stable版本。
$ node --version
v4.1.1
你可以在 package.json 中指定你要使用的NodeJS版本(删掉上面最前面的‘v’,只保留版本号)。
{
"name": "myapp",
"description": "a really cool app",
"version": "1.0.0",
"engines": {
"node": "4.1.1"
}
}
指定Npm版本¶
大部分时候,你不需要单独指定npm版本,使用NodeJS自带的npm就可以了。
Npm 2.1.x 以前的版本有很多已知的问题,如果你使用的NodeJS版本的npm比较老,你可以通过以下方法指定你要使用的npm版本。
{
"name": "myapp",
"description": "a really cool app",
"version": "0.0.1",
"engines": {
"npm": "2.1.x"
}
}
自定义构建过程¶
如果你有一些自定义的脚本需要在构建的时候运行,你可以使用npm的postinstall脚本,该脚本会在所有构建动作完成后最后执行,例:
{
"scripts": {
"start": "node index.js",
"test": "mocha",
"postinstall": "bower install && grunt build"
}
}
Runtime说明¶
服务端最终调用 npm start 来启动应用。