如何在PAAS自动运行中制作NodeJS应用程序?

时间:2015-02-08 06:57:02

标签: node.js meteor paas demeteorizer

我在流星中写了一个简单的应用程序。我使用demeteorizer来消除它对流星的依赖。现在我已将我的demeteorized包上传到Gandi NodeJS simple hosting instance。我可以从控制台运行它,但是当我重新启动实例时,我无法自动运行它。

我将默认的server.js移出了实例启动时运行的方式。这是它包含的内容:

var http = require("http");

http.createServer(function(req, res) {
    res.writeHead(200, {"Content-Type": "text/html; charset=utf-8"});
    res.end('<!DOCTYPE html><html><meta charset="utf-8"><title>It works' +
            "</title><b>It works!</b><br /><br />This is the server's " +
            "default server.js.");
}).listen(8080);
console.log("Server ready to accept requests on port 8080");

在我的本地机器上运行demeteorizer,它创建了一个project.json文件,我将其余的bundle上传到vhosts / default dir:

hosting-user@Secret-History-Node-Test:~/web/vhosts/default$ more package.json
{
  "name": "secrethistory",
  "description": "secrethistory - automatically converted by Demeteorizer. https
://github.com/onmodulus/demeteorizer",
  "version": "0.0.1",
  "main": "main.js",
  "scripts": {
    "start": "node main.js"
  },
  "engines": {
    "node": "0.10.36"
  },
  "dependencies": {
    "websocket-driver": ">=0.4.0",
    "faye-websocket": "^0.7.3 || ^0.8.0",
    "node-uuid": "^1.4.1",
    "sockjs": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.11.tgz",
    "es5-ext": "~0.9.2",
    "event-emitter": "~0.2.2",
    "next-tick": "0.1.x",
    "memoizee": "~0.2.5",
    "cli-color": "https://registry.npmjs.org/cli-color/-/cli-color-0.2.3.tgz",
    "css-parse": "https://github.com/reworkcss/css-parse/tarball/aa7e23285375ca6

根据demeteorizer文档,在我可以启动节点之前,我必须设置一些env变量。使用命令行中的以下内容,我可以成功运行我的应用程序。

export MONGO_URL=mongodb://localhost:27017/secrethistory 
export PORT=8080 
export ROOT_URL=http://localhost:8080
node main

(这些值有点违反直觉,与许多demeteorizer教程所说的相矛盾,但它直接来自demeteorizer docs并起作用。)

鉴于我对简单托管启动脚本的访问权限有限,我不知道如何在节点启动时启动我的应用程序或如何在运行之前设置环境变量。

你可以帮我弄清楚如何在启动PAAS实例时运行我的应用程序吗?

更多信息

以下是从实例运行节点的方法:

hosting-user@Secret-History-Node-Test:~/web/vhosts/default$ ps -ef | grep node
5000        73     1  0 06:06 ?        00:00:00 python /srv/admin/scripts/watchd --logfile /srv/data/var/log/www/nodejs-watchd.log --pidfile /srv/run/nodejs/nodejs-watchd.pid --app-logfile /srv/data/var/log/www/nodejs.log --app-dir /srv/data/web/vhosts/default /srv/admin/scripts/nodejs/node-bootstrap.sh

2 个答案:

答案 0 :(得分:2)

最后,我通过摆弄来解决这个问题。虽然我认为可能有一个更清洁的解决方案。

我将我的env变量添加到project.json

中scripts脚本指令的起始行
"start": "MONGO_URL=mongodb://localhost:27017/secrethistory PORT=8080 ROOT_URL=http://localhost:8080 node main.js"

我确认这适用于

npm start

现在,如何在服务器启动时使npm启动?

我将forever-monitor安装为JS软件包,但不安装CLI,因为我无法从PAAS实例的控制台访问系统。

然后我创建了一个简单的server.js,它在实例启动时自动运行:

var forever = require('forever-monitor');

var child = forever.start(['npm start'], {
    'max': 3,
    'silent' : true
});

欢迎提出建议。

答案 1 :(得分:0)