Ao tentar usar Otto para implantar um aplicativo Node.js, o aplicativo implantado não está acessível.
Eu criei um aplicativo mínimo que simplesmente escuta na porta 80 e responde a solicitações de status:
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);
});
A máquina virtual local criada por Otto funciona bem:
host$ otto compile
host$ otto dev
host$ otto dev ssh
guest$ npm install
guest$ sudo npm start
host$ curl http://'otto dev address'/status
No entanto, quando o aplicativo é implantado na AWS por
host$ otto infra
host$ otto build
host$ otto deploy
host$ otto deploy info
o aplicativo não pode ser acessado por meio do nginx que Otto coloca na frente dele, o que significa que algo como essa solicitação falha:
host$ curl http://ec2-...amazonaws.com/status
Se eu ssh no servidor implantado
host$ ssh [email protected]
então não consigo iniciar o aplicativo do nó porque a porta 80 já está sendo usada:
ubuntu$ cd /srv/otto-app
ubuntu$ sudo npm start
Error: listen EADDRINUSE :::80
mas posso alterar a porta para 8080 e iniciar o aplicativo do nó:
ubuntu$ sudo vi server.js
ubuntu$ npm start
e depois posso acessar o aplicativo do nó:
host$ curl http://ec2-...amazonaws.com:8080/status
Sou completamente novo no Terraform , Cônsul e Passageiro .
O que é necessário para instruir a Otto a provisionar a máquina virtual da AWS ou iniciar adequadamente o aplicativo do Node?