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で使えない。

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環境の構築できなかったパターン

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

Vagrant/CentOSにMEANの環境を一瞬で作成しようとしてできなかった。

Vagrant/CentOSにMEANの環境を一瞬で作成する

 

 

 

 

Rubyが最新版でないことが問題。

/etc/profileを編集

rbenvを実行するときに必要なモジュールをインストール

rubyの2.3.3をインストール

MongoDBを3.4にアップグレード

MongoDB3.4のyumレポジトリを追加

もともとあるMongoのレポジトリを修正

MongoDBのアップグレード

・・・・・・・・

どう頑張ってもうまくいかない。。ので、諦めた。

一応、今後のために覚え書きとして記事にしておく。

・・・・・・・・

 

Vagrantをリロードしたらnodeもnpmもなくなっていた。。

幸いnvmを入れていたので、nvmですぐにインストールし直そうと思ったら。

nvmもないし、

っと、そうしたらnodeもnpmも回復。何故だかわからないけど。

まぁよし。

 

[2017/2/17追記]

イチイチログインのたびに上を実行するのも面倒なので、

~/.bashrcに以下のコードを追加。

 

Vagrant共有フォルダのパーミッションってchmodできない

VagrantのCentOSのYeomanでひな形つくって、展開とかしてたらpermission errorが発生。

そこら辺、解決しようとchmodしても一向に権限が変わらない。。

原因はchmodしようとしているフォルダがVagrantの共有フォルダのため

みたい。

Vagrantfileに権限の設定を変更して再起動することみたい。

↓を↓みたいに変更する。

 

VagrantにYoemanでAngular-Material-FullStackをインストール

YoemanとGruntとbowerをAngular-Material-FullStackをインストール

プロジェクトのディレクトリに移動

そして、Yoemanを実行。Angular-Material-FullStackを展開

ちなみに、ここで使っているnodejsのバージョンは6.9.5です。

バージョンを7以上にするとエラーがひどいみたいなので、

しかし、エラーがバンバンでる。。

前に試して見たエラーの対策を使って、対応してみる。

そうしたうえで実行

ダメでした。