Implementação do aplicativo Node.js no AWS usando o Otto

3

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?

    
por J P 09.11.2015 / 11:54

1 resposta

1

A Otto implanta o Passenger junto com o nginx para gerenciar o aplicativo Node, e nessa constelação Passenger defaults para esperar que um aplicativo Node tenha um app.js na raiz do aplicativo como o arquivo principal.

E o Passenger remapeia qualquer porta na qual o aplicativo Node está sendo executado, portanto, o aplicativo deve ser iniciado apenas em alguma porta de usuário disponível, não na porta 80.

O código de exemplo mínimo foi atualizado para que o servidor AWS implantado funcione.

    
por 10.11.2015 / 22:53