web-dev-qa-db-ja.com

Ottoを使用したAWSでのNode.jsアプリのデプロイ

Otto を使用して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

TerraformConsulPassenger はまったく初めてです。

AWS仮想マシンをプロビジョニングするか、Nodeアプリを適切に起動するようにOttoに指示するには、何が必要ですか?

3
J P

Ottoは Passenger をnginxと一緒にデプロイして、Nodeアプリケーションを管理し、そのコンステレーションでPassenger デフォルトでは期待 that a Nodeアプリケーションにはapp.jsメインファイルとしてアプリケーションルートにあります。

また、Passengerは、Nodeアプリケーションが実行されているポートを再マップするため、アプリケーションは、ポート80ではなく、使用可能なユーザーポートで起動する必要があります。

最小限のサンプルコード が更新され、デプロイされたAWSサーバーが機能するようになりました。

1
J P