当尝试使用奥托部署 Node.js 应用程序,但无法访问已部署的应用程序。
我已经创建了一个最小应用它只是监听端口 80 并回答状态请求:
var express = require('express');
var app = express();
var port = 80;
app.get('/status',function(req,res){
res.json({
hostname: req.hostname,
address: req.ip
});
});
var server = app.listen(port,function(){
console.log('PORT='+port);
});
Otto创建的本地虚拟机运行正常:
host$ otto compile
host$ otto dev
host$ otto dev ssh
guest$ npm install
guest$ sudo npm start
host$ curl http://`otto dev address`/status
然而,当应用程序部署在 AWS 上时
host$ otto infra
host$ otto build
host$ otto deploy
host$ otto deploy info
那么应用程序就无法通过 Otto 放置在其前面的 nginx 访问,这意味着类似这样的请求会失败:
host$ curl http://ec2-...amazonaws.com/status
如果我 ssh 进入部署的服务器
host$ ssh [email protected]
然后我无法启动节点应用程序,因为端口 80 已被占用:
ubuntu$ cd /srv/otto-app
ubuntu$ sudo npm start
Error: listen EADDRINUSE :::80
但我可以将端口更改为 8080 并启动节点应用程序:
ubuntu$ sudo vi server.js
ubuntu$ npm start
然后我就可以进入节点应用程序了:
host$ curl http://ec2-...amazonaws.com:8080/status
需要什么来指示 Otto 配置 AWS 虚拟机或正确启动 Node 应用程序?