マニュアルどおりやってみましたが、どうもgitからNodeNinjaへうまく繋がらなかったので、軽く手順をおさらいして、どこにファイルがアップされるのかメモします。

Gitの使い方

環境はMacでターミナルから使います。そもそもgitがインストールされてないと使えないので、Macの場合ですと、MacPortsやyumコマンドでインストールできるので、しておいてください。あと、sshじゃなくてzshのほうが、gitコマンドを予測してくれるので、なんとなく便利やと思います。

##local環境でディレクトリを作ります。とりあえず「nodeninja」とします。
$ mkdir nodeninja

##nodeninjaへ移動。
$ cd nodeninja

##git initでリポジトリを作ります。
$ git init

##remote branchへデプロイするには、
##ユーザー名とメールアドレスを設定する必要があります。
$ git config --global user.name 'name'
$ git config --global user.email 'a@b.c'

##上記の方法だと、~/.gitconfigに書かれる内容なので、
##僕の場合は仕事で別の設定してあるので、
##nodeninja内だけの設定にしました。その場合は--globalを付けないだけです。
$ git config user.name 'name'
$ git config user.email 'a@b.c'

##NodeNinjaのremote brnchに接続します。
##***は個別にNodeNinjaで設定されたIPアドレスです。
$ git remote add node-ninja node@***.***.***.***:repo

##問題なく繋がれば、git remote -v で確認できます。
$ git remote -v
node-ninja	node@***.***.***.***:repo (fetch)
node-ninja	node@***.***.***.***:repo (push)

##ここで繋がらなければ、shh公開鍵を作って設定する必要があります。
##ssh公開鍵をrsa形式で作ります。
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/[home]/.ssh/id_rsa): ##Enter押す

##何もなければ作られましたが、既にある場合は上書きしますか?と聞いてくるので
##(y/n)で答えます。
/Users/[home]/.ssh/id_rsa already exists.
Overwrite (y/n)? 

##できた公開鍵の内容をコピーしてNodeNinjaで設定します。
##NodeNinjaでの設定方法はマニュアルどおり。
$ cat ~/.ssh/id_rsa.pub

NodeNinjaに登録するときは、だーーっと出てきた公開鍵の頭に「ssh-rsa」をつけて、末尾に「ユーザー名@マシン名」をつける必要があります。

.gitignoreを作る

.gitignoreは、addやcommitを無視したいファイルを対象とする設定ファイルです。.gitリポジトリもこの.gitignoreも、不可視ファイルになっています。不可視ファイルを表示する設定にすると、これらを触ることができます。しかし今度は、.DS_Storeというファイルが見えてしまいますね。これはいらないファイルなので、.gitignoreでgitに含まないファイルとして登録しておけばOKです。.flaファイルや.psdファイルを含めない、などの設定もできます。ここでは具体的な書き方と使い方は書きませんが、ちょっとした参考程度に書きます。

##正規表現が使えます。
*\#*
*~*
.*
*.log
*.log.*
.DS_Store
*のコピー
*.fla
*.psd
*.dat
npm-debug.log
node_modules

Hello Worldをデプロイしてみる。

##viでもvimでもどっちでもいいんで、「server.js」というファイル名を作って、
##中にHello Worldを作ります。
$ vim server.js
-
-
-
-
"server.js" [New File]

##書き込むときは、キーボードの「i」を押します。
-
-
-
-
-- INSERT --

##INSERTが出たら書き込める状態なので、下記をコピペします。
var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello NodeNinjan');
}).listen(8080);

##ペーストできたら、「esc」キーを押します。
##-- INSERT --が消えるので、「:wq」と入力してEnterを押します。
## lsを押すと、保存されているのがわかると思います。
$ ls
server.js

#git statusで更新されているファイルの確認。
$ git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#	server.js

##gitは親切に次行うべきコマンドを書いててくれてます。
## git add <file> と書いてますが、git add .で大丈夫です。
$ git add .

##次にコミットします。git commitだけだと、vimが立ち上がって、
##コメントを書かなければならないので、いっぺんに行うために-mオプションを付けます。
$ git commit -m 'first commit'

##git pushでデプロイ完了です。
$ git push node-ninja master

##[rejected]と出たら、コンフリクトが起きてます。
! [rejected]  master -> master (non-fast forward)

##コンフリクトが起きてしまったら、git pull で直ると思います。
##今回は、初めて使う想定なので、普段だとgit pull --rebaseとか使いましょう。
##git pullだけではダメで、remoteリポジトリ名とmasterブランチを指定します。
$ git pull node-ninja master

##最後、git pushしてみます。
$ git push node-ninja master

自分はわりと最後のgit pushでつまずいてしまいましたが、git pull node-ninja masterすれば直りました。よっぽどのレアケースやと思います・・・。

NodeNinjaのディレクトリ構成

デプロイできても、さていったいどこにファイルがアップされたのか、探すのに苦労しました。$ node server.jsしないと、Hello Worldも表示できないですからね・・・。では早速sshでNodeNinjaにアクセスします。マニュアルにも載ってますが念のため。

##***のところはNodeNinjaのIPアドレス
$ ssh node@***.***.***.***
                     __              __         __
   ____  ____   ____/ /__    ____   /_/____    /_/____
  / __ \/ __ \ / __  / _ \  / __ \ __ / __ \  __/ __  \ 
 / / / / /_/ // /_/ /  __/ / / / // // / / / / / /_/ /_
/_/ /_/\____(_)__,_/\___/ /_/ /_//_//_/ /_/_/ /\___,__/
               Welcome to a Node-Ninja! /____/


##ログインできたと思います。
$ ls
auto_deploy  local  node-service  repo

下記の方法でNode.jsを実行すると書きましたが取り消します。

##ホームディレクトリの、node-serviceの中に、デプロした内容が入っています。
$ cd node-service
$ ls
current  profile  releases

##3つのフォルダーがありますが、profileはよく分からず、
##releasesはデプロイした時間ごとにディレクトリができてて、
##currentには最新のreleasesのシンボリックリンクがはられています。
##ということで、このcurrentの中に、デプロイしたserver.jsが入っているので、
##nodeで実行してみましょう。

$ node current/server.js

追記:2012/08/29

NodeNinjaの中の方が教えて下さいましたとおり、NodeNinjaはgit push でデプロイ後にnodeが実行されることを確認しました。NodeNinjaの中の方、ありがとうございました。とはいえ、動くまで確認が難しかったので、一応参考までに手順をメモします。つか、マニュアルをちゃんと読めよσ(゚∀゚ )オレ

PugJSが動いているか確認しましょう。

これがとても便利なmoduleになってます。NodeNinjaのログのページで、「[info] starting watch」の項目があるかどうかを確認して下さい。その右側にある数字は、デプロイしたマイナス9時間の数字で、~/node-service/release/の中を指しています。デプロイすると、最新のディレクトリがここにでき、PugJSが監視するディレクトリも変更されます。まず、僕はここが動いてなかったみたいです。動いているか確認する方法は、

##***のところはNodeNinjaのIPアドレス
$ ssh node@***.***.***.***

## 動いているプロセスを書くにする。
$ ps aux

node 0:09 /home/node/.nvm/v0.6.18/bin/node /home/node/local/bin/pugjs
node 0:04 /home/node/.nvm/v0.6.18/bin/node /home/node/local/bin/pugjs --webhook

この2つがあるかどうかを確認して下さい。動いていたら、ログの画面に、下の画像のようなログが出てきます。

緑色文字で[info] Successfulとなったら動いていると思います。自分は、git pushデプロイしても、これが動いている様子がなく、その度にサーバーを削除してサーバーを作成しました。もう作成できなかったらどうしよう・・・って思ってましたが大丈夫でした。

config.jsonファイルを作ってデプロイしましょう。

そもそも自分がexpressで作ったというのもありますが、ログに黄色文字で[error] ********/server.jsの文字が出てました。expressで作った場合は、app.jsに成ってるはずで、NodeNinjaが自動でnode起動してくれるとしたら、なんでserver.jsが起動するのか。ちゃんとマニュアル読めよσ(゚∀゚ )オレなんですが、NodeNinjaのデフォルト設定では、「server.js」ファイルが起動することになってて、他のファイル名にするためには、config.jsonファイルに名前を指定してあげなければなりません。他にも、起動するNode.jsのバージョンを指定したり、npmをNodeNinja上で使ってnode_modulesをインストールするかしないかを、true,falseで指定できます。

{
  "version": "v0.6.18",
  "npm": false,
  "main": "app.js",
  "args": [],
  "envs": {}
}

自分はこのように書いて、デプロしました。ちなみに、いくら”main”: “app.js”と書いてても、”npm”: trueになってたら、強制的に”main”: “server.js”になってしまったのでご注意を。ちなみにこのconfig.jsonがどこに反映されるかは、下記の場所。

$ cat local/pugjs/watch.json
{
  "20120829121127": {
    "version": "v0.6.18",
    "npm": false,
    "main": "app.js",
    "args": [],
    "envs": {},
    "node": "/home/node/.nvm/v0.6.18/bin/node",
    "path": "/home/node/node-service/releases/20120829121127"
  }
}

npmをfalseにしたら.gitignoreを追記する。

NodeNinjaでは、expressとかSocket.IOがプリインストールされているので、これらのnode_modulesをgit pushデプロイする必要がありません。なので、.gitignoreに、「node_modules」を追記しておくといいと思います。

package.jsonで必要なmoduleを指定する。

node_modulesがデプロイする必要がないので、使うmoduleをpackage.jsonに追記する必要が出てきます。僕は下記の内容にしました。

{
    "name": "application-name"
  , "version": "0.0.1"
  , "private": true
  , "dependencies": {
      "express": "2.5.11"
    , "ejs": ">= 0.0.1"
    , "socket.io": "0.8.7"
    , "mongoose": "2.7.2"
  }
}

これをデプロイすると、反映されます。ここまで来るのに何回もサーバーを削除しては作成を繰り返してたので、けっこうドキドキでした・・・。さて、うまいことPugJSのログも出てるし、それぞれ修正したものを一気にデプロイしました。PugJSからもログが出て、サーバーが起動しそうな雰囲気でしたが、[error]events.js:48と出ました。あ、サーバー消したりしたから、MongoDBが起動していない!

$ svcadm enable mongodb

これで解決![info]Express server listening on port 3000 in development modeって出ました!!バンザーイ!\(^o^)/

【Node.js】NodeNinjaへGitコマンドでのデプロイとディレクトリ構成(追記あり:2012/08/29)
Pocket

Tagged on:         

2 thoughts on “【Node.js】NodeNinjaへGitコマンドでのデプロイとディレクトリ構成(追記あり:2012/08/29)

  • 2012/08/29 at 17:44
    Permalink

    ども!中の人でござる(^^

    Node Ninja では git で push すると 自動で Node のプロセスが起動する仕組みになっているでござる。一度マシンを再作成(STOP → DELETE で削除してから再度作成)して、もう一度 push してみてくだされ。只今提供しているマシンに上限があるため、削除後はなるべく早めにマシンを作成してくだされ。わからないことがあればTwitterのダイレクトメッセージでもおこたえするでござるよ!

    Reply
    • 2012/08/29 at 17:52
      Permalink

      NodeNinja中の人殿。コメントありがとうござりまする!自分はサーバーサイド苦手で勉強中の身のフロント側人間なので、NodeNinjaのサービスを、本当にありがたく使わせていただいております!この場をお借りして御礼申し上げます。ありがとうございます!

      さて、起動方法、pushでデプロイすれば起動するのをご教授頂きありがとうございます!早速試してみます!

      Reply

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です