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
Terraform 、 Consul 、 Passenger はまったく初めてです。
AWS仮想マシンをプロビジョニングするか、Nodeアプリを適切に起動するようにOttoに指示するには、何が必要ですか?
Ottoは Passenger をnginxと一緒にデプロイして、Nodeアプリケーションを管理し、そのコンステレーションでPassenger デフォルトでは期待 that a Nodeアプリケーションにはapp.js
メインファイルとしてアプリケーションルートにあります。
また、Passengerは、Nodeアプリケーションが実行されているポートを再マップするため、アプリケーションは、ポート80ではなく、使用可能なユーザーポートで起動する必要があります。
最小限のサンプルコード が更新され、デプロイされたAWSサーバーが機能するようになりました。