Vagrantの共有フォルダでNode.jsを編集するたびに自動再起動する

結論から、

私の結論としてはnodemonを使うしかないかと。

ソース監視の方式に

nodemon

supervisor

node-dev

pm2

っといったアプリがありますが、すべてデフォルトではVagrantの共有フォルダに反応してくれません。

試行錯誤で結局全て試してしまったので、紹介する。

Nodemonをインストール

nodemonをインストール

後はnodeコマンドの代わりにnodemonを使うだけ

これがスタンダードなやり方。

VagrantのSynced folderを使っている場合には遅くするために”L”というオプションをつけて、

っとしなくてはいけないのですが、これが何故か上手くいかない。

何故かと言うと、↑のコマンドではファイルの更新を監視する対象(watch)

が「*.*」っとなっている、これでは同階層のファイルに対する変更しか監視しない。

監視したい対象は自分で指定する必要がある。

私の場合はこんな感じ。

これでOK。

Vagrantの共有フォルダで更新を監視したいだけなら、ココまでの部分でOK。

以降は蛇足。

Supervisorのインストール。

supervisorをインストールした。

無視するファイルとディレクトリの指定は -i

npmでインストールをかけたときに異常に再起動しないために

としてみたけど、結局VagrantのSynced Folderでは、これも結局使えない。

Node-devのインストール

PM2のインストール

$ npm install pm2 -g

こうです。

そうするとこう。

ただひとつ残念なのが、今まで標準出力でリアルタイムに監視できてたログが見えなくなってしまうこと、標準出力がどこに言っているかというと

~/.pm2/logs/ ここ

ここに、

エラー:server-error-0.log

標準出力:server-out-0.log

っとわけて収納されている。

リアルタイム監視をしたいなら

っとすればリアルタイム監視ができます。

pm2での監視もういいよってなったらこう。

ただSynced Folderで使えない。

Node.jsでSSHからサーバを起動するけどBroken Pipeで止まっちゃう

件名の通り、

で起動したNode.jsのサーバがSSHでのログインが切れると止まってしまう。

正確な理由は、サーバのログ出力でエラーが発生したから。

Broken PipeするとSSHでのログインが切れる、ログインが切れると標準出力がなくなる、そうすると、、エラーが発生してサーバが落ちる。

っということ。

なのでログの吐き出し先を示してやる、かつバックグラウンドで走るように”&”をつけてやる。

これで、ログオフしてもserverが走り続けてくれる。。

と思ったらダメでした。

npmで発行してるnodeでリリース用のアプリがありました。

をインストール。

これでOK。

意味はserver.jsをサービスとして実行したということ。

AWSでGitを使う

AWSの環境ではどうやらCodeCommitというサービスを利用しなくてはいけないみたい。

AWS CodeCommitでは、Gitリポジトリのアクセス権限もIAM(Identity and Access Management)で管理されている。

IAMとは、「AWSユーザーに対して AWSのリソースへのアクセスできる範囲やアクセス方法を安全に制御するためのウェブサービス」のこと。

AWSの管理画面のダッシュボードから”IAM”の文字列でサービスをサーチ。

IAM_Management_Console

ユーザ名を設定、

IAM_Management_Console_2

次のステップ、グループ作って、ユーザ登録

試しにグループ名を「developers」として、

「AWSCodeCommitFullAccess」というパーミッションを設定する。

IAM_Management_Console

 

作成した「uploader」を覗いてみる。

Security credentialsのタブを叩いて

HTTPS Git credentials for AWS CodeCommit

でGenerate。

codecommit-iam-gc1

UsernameとPasswordもコピーしておく、

もしくは、CSVもダウンロードしておく。

CSVの中身はUsernameとPassword。

codecommit-iam-gc2

AWS CodeCommit Consoleに接続してレポジトリを作成する。

https://console.aws.amazon.com/codecommit

選択してる地域(region)がCodeCommitの対象外だと

AWS_Management_Console

 

みたいな感じでサポートされている地域の選択を促される。

仮に「US East(N.Virginia)」を選択する。

選択すると次のような画面。Get startedをクリック。

AWS_CodeCommit_Management_Console

レポジトリの名前をいれる。Create repositoryをクリック。

AWS_CodeCommit_Management_Console

すると次のような画面

AWS_CodeCommit_Management_Console

丁寧にチュートリアルが出てくるので、これに従って作業する。

GitとAWSはすでにインストールされている。

http_—_ec2-user_ip-172-31-22-208___—_ssh_-i___Documents_working_20170214PorkYou_SSHPrivateKey_PorkYou_pem_ec2-user_54_169_104_147_—_119×47

AWS CodeCommit managed policyはすでに「AWSCodeCommitFullAccess」が設定されている。

それで、ローカルマシーンに戻って

上で設定したuploaderのusernameとpasswordを入れてクローンする。

 

 

 

ローカルマシーン(MAC)に戻って、Gitがインストールされていなかったらインストールする。

次にAWS CLIをインストール。

AWS CLIとはコマンドラインインターフェース

 

これをインストールする、、のだが

それを入れるためにpipをインストールする必要がある。

pipとはPythonのパッケージマネージェのこと。

でインストール

OK。インストールされている。

AWS CLIのインストール

 

 

 

AWSでGit環境を設定できなかったパターン2

Gitをインストール

 

uploaderユーザでリモートリポジトリを作成

前回の記事と同様に、、git push origin masterまでいって

! [remote rejected] master -> master (shallow update not allowed)

のエラーで終わり。

 

 

 

 

 

AWSでGit環境の構築できなかったパターン

AWSにec2-userでログイン。

Gitでアップロードするのは「uploader」というユーザが行うとして、

まず「uploader」というユーザを作成。

この「uploader」をSSH鍵で認証できるようにする。

ローカルマシーン(MACの場合)でRSA暗号方式の鍵を作成。

暗号キー完成。

id_rsaのファイルの内容をコピー。

そしたら、またAWSに戻って。

一旦uploaderとして作業

以下のファイル暗号キーの内容をローカルからペースト

これで一旦ローカルからuploaderでSSH接続できるか確認。

ローカルから

では、またAWSでec2-userで作業。

そして、対象のフォルダのユーザもuploaderに変更

移行作業はuploaderで行う。

リモートリポジトリの作成

次に、ローカルマシーンに戻って、リモートへの接続の簡便化のため

下みたいに編集。

ローカルリポジトリの作成。

ローカルレポジトリからプッシュ

完了!!

っと思ったら、

っというエラーメッセージ、、取り敢えず。保留。

 

 

 

MEAN.IOをセットアップ

MEAN.IOを採用。

同じ系統でMEAN.JSというのもあるようだが、MEAN.IOのほうが風説が良いので採用。

MEANコマンドをインストール。

ついでにgulpも

そして、meanコマンドでどこかのフォルダにプロジェクトを展開

すべての質問にデフォルトでリターン連打。

の指示に従って、

gulpを実行

では、サーバを実行。

OK

AWSにNodeJSとMongoDBをセットアップ

AWSにMEANの環境をセットアップする

まずyumアップデート

環境構築に必要なパッケージを一気に取得

Nodejsのインストールのために

nvmをインストール

で、Nodejsのいい感じのバージョンをインストール。

そのいい感じのバージョンをデフォルトとする。

次にMongoDBをインストールする

MongoDBインストール用のyumレポジトリを記述する

それでは、yumでMongoDBをインストール・スタート・起動のたびにスタートするように設定

取り敢えずここまでOK。

 

AWSでVPSを作成してみる

AWS(Amazon Web Server)でVPS(Virtual Private Server)を作成。

AWS_Management_Console

OSにAmazon Linux AMI

CPUにti.micro

キーペアをダウンロードして、完了

キーペアは一度しかダウンロードできないので大切に保存。

完成したら、IPv4 Public IPに向けて接続する。

MACの場合

ちなみにこのときにキーペアへのパーミッションエラーが出る場合がある。

そのときはキーペアの属性をchmodで400にしてやる。

エラーの原因がほかのユーザも閲覧できるということだから、

属性をかえて自分しか見れないようにする。

で接続、早速↓みたいなメッセージが出ている

のですなおに

それから/etc/environmentというファイルを作成

と入力・保存。

これで次回ログインから問題なし。