【问题标题】:Deploying NodeJS application to Openshift将 NodeJS 应用程序部署到 Openshift
【发布时间】:2016-06-02 20:27:45
【问题描述】:

我有一个正在运行的 SailsJS 应用程序,我想将它部署到 Openshift,但和往常一样,它并不顺利。 这是我到目前为止所做的:

rhc app create myApp nodejs-0.10
rhc cartridge add mongodb-2.4

在这两个之后,我可以看到应用程序已创建,当我访问给定的 URL 时,我得到了欢迎页面。

我安装了RockMongo,发现我的mongodb也可以访问了。

由于我已经有代码,我继续以下操作:

git remote add openshift -f <openshift-git-repo-url>
git merge openshift/master -s recursive -X ours
git push openshift HEAD

在我将现有代码与远程 openshift 合并后(如上面的命令),事情开始出错。

当我访问应用程序的 url 时,我收到 503 服务暂时不可用。如果我访问 RockMongo 并尝试使用给定的凭据登录,我会收到

Unable to connect MongoDB, please check your configurations. 
MongoDB said:Failed to connect to: 127.10.37.130:27017: Transport endpoint is not connected.

此外,在“应用程序面板”中,我的应用程序状态正在构建(并且会保持这种状态数小时)。将代码推送到 openshift 后,应用程序停止了,并且在(自动)重建它之后,我收到了一些错误,最后一个是

remote: An error occurred executing 'gear postreceive' (exit code: 34)
remote: Error message: CLIENT_ERROR: Failed to execute: 'control build' for /var/lib/openshift/538f1c205004461655000227/nodejs

有人知道发生了什么吗?

也许我没有正确设置端口、应用程序 url、数据库 url?但是话说回来,为什么 RockMongo 停止工作了?

更新

这是我的 mongo 配置:

 mongo: {
   module: 'sails-mongo',
   user: 'admin',
   password: '********',
   url: process.env.OPENSHIFT_MONGODB_DB_URL + 'surge'
 }

我还需要设置server_port = process.env.OPENSHIFT_NODEJS_PORTserver_ip_address = process.env.OPENSHIFT_NODEJS_IP 吗? 我的应用程序的根目录中有一些 server.js 文件,我看到这里使用了这些变量。

如果我运行env | grep NODEJS,这就是我得到的结果

OPENSHIFT_NODEJS_PATH_ELEMENT=/var/lib/openshift/538f1c205004461655000227//.node_modules/.bin:/opt/rh/nodejs010/root/usr/bin
OPENSHIFT_NODEJS_PORT=8080
OPENSHIFT_NODEJS_LD_LIBRARY_PATH_ELEMENT=/opt/rh/nodejs010/root/usr/lib64
OPENSHIFT_NODEJS_IDENT=redhat:nodejs:0.10:0.0.17
OPENSHIFT_NODEJS_LOG_DIR=/var/lib/openshift/538f1c205004461655000227/app-root/logs/
OPENSHIFT_NODEJS_IP=127.10.37.129
OPENSHIFT_NODEJS_PID_DIR=/var/lib/openshift/538f1c205004461655000227/nodejs//run/
OPENSHIFT_NODEJS_VERSION=0.10
OPENSHIFT_NODEJS_DIR=/var/lib/openshift/538f1c205004461655000227/nodejs/

这就是我得到的env | grep mongo

OPENSHIFT_ROCKMONGO_DIR=/var/lib/openshift/538f1c205004461655000227/rockmongo/
PHPRC=/var/lib/openshift/538f1c205004461655000227/rockmongo/etc/conf/php.ini
OPENSHIFT_ROCKMONGO_IDENT=redhat:rockmongo:1.1:0.0.12
OPENSHIFT_MONGODB_IDENT=redhat:mongodb:2.4:0.2.11
OPENSHIFT_MONGODB_DB_URL=mongodb://admin:PASSWORD_HERE@127.10.37.130:27017/
OPENSHIFT_MONGODB_DIR=/var/lib/openshift/538f1c205004461655000227/mongodb/

【问题讨论】:

  • 尝试向我们提供一些代码?就像您的 MongoDB 连接字符串一样(删除用户名/密码)。您也可能尝试绑定到不允许的 0.0.0.0 或 localhost。
  • 嗨,我刚刚更新了我的答案。我也觉得我错过了一些配置,但不知道是什么问题:/
  • 是的,您需要设置要绑定的 ip 和端口,这可能是您的应用程序无法启动的原因。还可以使用 rhc tail 检查您的日志文件。

标签: node.js openshift sails.js


【解决方案1】:

以防万一其他人偶然发现这个问题,这是我必须做的。

我创建了单独的文件 config/application.js,然后放在那里

module.exports = {
  port: process.env.OPENSHIFT_NODEJS_PORT,
  host: process.env.OPENSHIFT_NODEJS_IP,
  environment: 'production'
};

我还发现了应用程序无法启动的问题。安装后失败(凉亭安装未成功完成)。要修复它,应该添加到 package.json 的脚本部分

"postinstall": "export HOME=/var/lib/openshift/[instance-id]/app-root/runtime/repo; ./node_modules/bower/bin/bower install" 

【讨论】:

  • instance-id 到底是什么?
  • uf,已经有一段时间了,我不再使用 Node 了,但我想说这是你在 OpenShift 上创建应用程序后得到的一个实例。如果这不是真的,请告诉我,我会尝试深入研究该代码。
  • 是的,它是 openshift 用户的 id(可以通过 USER 环境变量检索)
  • 唷,我真的不记得了,我不认为我对 RockMongo 有任何问题。
猜你喜欢
  • 1970-01-01
  • 2014-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-26
  • 1970-01-01
相关资源
最近更新 更多