Monthly archives "1月 2015"

node.jsをevennodeにデプロイしよう

evennodeはnode.js専用のPaaSなので、使い方は非常に簡単。
ほとんどブラウザから設定できるので迷わないとは思うが、一応使い方を説明しておく。
ローカル環境はCentOS 6.5で、gitはインストール済み、node.jsのソースコードも作成済みとする。
evennodeのサインアップやログインはHPから行える。
ここではサインアップしてログイン後のコントロールパネルからアプリの作成手順を説明する。
 

アプリの作成

コントロールパネルの「APPS」タブを開き、「CREATE NEW APP」をクリックする。
evennode.01
 

プランの選択

好きなプランを選ぶ。とりあえずお試しならFreeで良いだろう。
evennode.02
 

node.jsの設定

Domainでサブドメイン名を設定する。これは他のevennodeのアプリとかぶらない名前にする必要がある。
Server locationはEuropa(Ireland)かUnited States(lowa)かを選べる。(どちらが日本から速いとかは調べていない)
Custom Domainは独自ドメインを使う場合に設定する。
Select app’s platformはNode.jsかio.jsかを選べる。普通はNode.jsで良いだろう。
Node.js varsionはv0.8.6~最新まで指定可能。
Startup commandは自動かカスタムかを選べる。
以上でアプリが作られる。
evennode.03
 

アプリの管理

さらにアプリの詳細設定を行う。
APPタブで作ったアプリをクリックする。
evennode.04
 

Public keysの管理

Manage public keysをクリックする。
evennode.05
 

Public keysの設定

Public keys for GitにGit用の公開鍵を設定してSaveボタンを押す。
evennode.06
 

環境変数の管理

環境変数の設定が必要な場合は、Environment varsをクリックする。
evennode.07
 

環境変数の設定

Nameに環境変数名、Valueに環境変数の値を入れて、Saveボタンを押す。
evennode.08
以上でevennodeでの作業は終了。
 

app.jsの作成

ここからローカル環境での作業になる。
参考文献:Node.js Hello World app
evennodeではどうもルートディレクトリのapp.jsを起動するようになっているようだ。
(package.jsonの”main”や”scripts”: {“start”}で別のソースコードを起動するよう記述しても認識されなかった)
app.js以外から起動したい場合はapp.js内でrequireで呼ぶ。
例えば、server/app.jsを起動したい場合は、ルートディレクトリにapp.jsを作成して下記を記述する。

require('./server/app.js');

 

Gitのリモートリポジトリを登録する

git remote add evennode git@evennode.com:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.git

リポジトリのアドレスはevennodeのコントロールパネルの「Manage app > Git deployment > Repository」に記述してある。
 

デプロイする

gitでプッシュしてデプロイ完了。

git push evennode master

 

その他Tips:bower installが起動しない問題

bower installを起動する術がないので、bower installでインストールされるべきモジュール群もコミットしておく。
 

その他Tips:SSLの設定方法

設定方法は提供されていない。
support@evennode.com にメールしてSSLを設定したい旨を伝えると、SSL certificateとprivate keyを送れと返事が返ってくるので、送ると設定してくれる。
メールは英語でやり取りできる。
 

その他Tips:アプリの削除方法

APPSから削除したいアプリを選び、Settings > DELETE APP から削除できる。
evennode.09


0

node.jsをpivotal.ioにデプロイしよう

pivotal.ioのデプロイはgitを使わず、CF CLIという独自ツールを使うので、ちょっと特殊である。
使い方が分からなかったので備忘録メモ。
ローカル環境はCentOS 6.5とする。
 

CF CLIのインストール

参考文献:Set Up Your PWS Account and Download the CF CLI
上記の参考文献を参考にCentOS用のrpmをダウンロードしてインストール。
 

CF CLIにログイン

CentOSの端末から下記の通り入力する。

$ cf login -a https://api.run.pivotal.io
Email: user@example.com
Password: ••••••••

 

manifest.ymlの作成

参考文献:
Tips for Node.js Applications Application Bundling
PaaS基盤「Cloud Foundry V2」内部で使われるBuildpack、Wardenコンテナの仕組みとは?(前編)

デプロイしたいアプリのカレントディレクトリにmanifest.ymlを作成する。
内容は下記の通り。

---
applications:
- name: my-app
  buildpack: https://github.com/cloudfoundry/heroku-buildpack-nodejs.git
  command: node server/app.js

my-appはアプリ名である。urlにも使われるので他のアプリとかぶらない名前を付ける必要がありそう。
buildpackはこのURLで固定。
commandはnodeで立ち上げたいソースコードを指定。
 

.cfigunoreの作成

デプロイに含めたくないファイルがある場合は.cfigunoreに書き込む。
.gitigunoreの書式と全く同じ。
以下に例を示す。

.git
.sass-cache
.tmp
.idea
/dist
/e2e
/node_modules/bower
/node_modules/*grunt*
/node_modules/open
/node_modules/*jshint*
/node_modules/*karma*
/node_modules/requirejs
/node_modules/supertest
/node_modules/should
/node_modules/*imagemin*
/public
/.buildignore
/.editorconfig
/.gitattributes
/.gitignore
/.travis.yml
/.yo-rc.json
/.cfignore
/Gruntfile.js
/karma.conf.js
/protractor.conf.js
/manifest.yml

 

デプロイ

デプロイしたいアプリのカレントディレクトリから下記の通り入力する。

cf push my-app

下記のように処理が進めば成功。

Using manifest file /home/user/my-app/manifest.yml

Updating app my-app in org user-name / space development as user@exsample.com...
OK

Uploading my-app...
Uploading app files from: /home/user/my-app
Uploading 25.8M, 4613 files
Done uploading               
OK

Starting app my-app in org user-name / space development as user@exsample.com...
-----> Downloaded app package (13M)

...(node_modules内のパッケージなどをインストール)

1 of 1 instances running

App started


OK

App my-app was started using this command `node server/app.js`

Showing health and status for app my-app in org user-name / space development as user@exsample.com...
OK

requested state: started
instances: 1/1
usage: 1G x 1 instances
urls: my-app.cfapps.io
package uploaded: Sun Jan 18 01:10:58 +0000 2015

     state     since                    cpu    memory      disk   
#0   running   2015-01-18 10:11:53 AM   0.0%   77M of 1G   59.1M of 1G   

あとはmy-app.cfapps.ioにアクセスするとアプリが表示される。
 

おまけ:環境変数の設定

環境変数の設定が必要な場合は、pivotal.ioのコントロールパネルからアプリを指定してEnv Variablesタブから設定する。
 


0

node.jsが使えるレンタルサーバー比較

Node Hostingから候補のサーバーのベンチマークをとってみた。
候補条件は独自ドメインでSSLが使えるプランである。
ベンチマークは開発中のサイトグルチャを動かしたときのユーザーページの表示速度である。
ベンチマークの結果は以下の通り。

サーバー プラン 料金(月) ベンチマーク
heroku SSL Addon $20=2334円 8秒
evennode 768MB RAM 3 instance €13=1757円 8秒
お名前.com vps メモリ2GBプラン 1315円(税抜),1420円(税込) 測定していないがめちゃ遅かった
AWS EC2 t2.small $13.14=1531円(バージニア1年間前払いなし) 30秒
Microsoft Azure 西日本Basic A0 1428円 30秒
openshift Bronze 3 Small gears 0円 30秒
bluemix 128MB RAM 1 instance 0円 30秒
Cloud Foundry 128MB RAM 1 instance $2.7=314円 1分30秒
NodeNinja 無料 0円 動かず
MODULUS 396MB RAM $14.4=1680円 動くがリロードで404エラー
Pogoapp 256MB RAM $5=583円 使い方分からず

為替レートは以下の通りの本日のレートで計算した。
$1=116.563702円
€1=135.232545円

サーバー コメント
heroku 独自ドメインSSL無しか、herokuサブドメインでSSL有りなら無料で使えるので最高の選択だろう。ただし、SSL Addonを入れると月$20かかってくる。
evennode 独自ドメインSSL有りでherokuより安くなり、速度もherokuと同等である。グルチャevennodeを使っている。
お名前.com vps 計測していないがめちゃ遅かった。30秒はかかっていただろう。あとSSL使う場合、別途初年度24,000円(税抜)かかるようだ。
AWS EC2 t2.smallでも30秒かかるので遅い。これより一段上のプランであるt2.mediumは3年間全前払いでも$16.86=1968円かかるのでevennodeより高くなるのでベンチマーク対象外とした。
Microsoft Azure 30秒かかった。ちなみに西日本StandardA0(1632円)、A1(5508円)、A7(78336円)も試してみたが速度は同じ。また、Microsoft Azure WebsitesのFREEを試してみたが、ブラウザのコンソールにwebsocketsのサーバー確立エラーが表示される。しかし、Azure Website での Socket.IO を使用する Node.js チャット アプリケーションの構築ではwebsocketが使えると書いてあるし、設定でもwebsocketを有効にしているのだが。
openshift 無料でSSLも使えるので非常に魅力的だったが速度が遅い。一段上のプランであるsmall.highcpuは$18.25=2130円かかるのでevennodeより高くなるのでベンチマーク対象外とした。
bluemix IBMが提供するCloud Foundryと同じシステムのPaaSである。Node Hostingには載ってないが、node.js使えるので使ってみたが、30秒かかるので遅い。
Cloud Foundry 最低$2.7は魅力的だが、めちゃ遅い。1GBも試してみたが同じ速度だった。SSLは使えない。ドキュメントにはCLOUD FLARE使いましょうと書いてあった。無料でSSLが使えるらしい。ってか、heroku + CLOUD FLAREで完全無料でSSL使えるんじゃね?
NodeNinja 無料で魅力的だがグルチャが動かなかった。SSLにできるかも不明。
MODULUS 動くには動くが、トップページの読み込みが異常に長いうえにリロードすると404エラーになってしまう。トップページさえ読み込めれば、他のページは速かった。SSLは無料で使える。
Pogoapp $5でSSLが使えるのでかなり魅力的だったが使い方が分からなかった。ドキュメントのページが404エラーになる。デプロイ用のgitもアドインで入れるっぽい。操作が特殊なので使うのを断念。

なお、各サーバーのデプロイ方法は下記のリンク参照。
node.jsをevennodeにデプロイしよう
node.jsをpivotal.ioにデプロイしよう
AWS EC2にnode.jsサーバーを構築しよう
angular-fullstackをherokuにデプロイする方法

他のサーバーのベンチマークをとらなかった理由は下記の通り。

サーバー 理由
appfog SSL有りが月$50するので高い
Baidu App Engine ホームページが中国語で分からない。中国国家の検閲が入って突然使えなくなっても困るし
clever cloud SSLが使えるか明記されていない。最低でも€14.4かかりevennodeより高いのでベンチマーク取らず
cloudnode ベータ版につき無料っぽいが、BaaSっぽい。SSLは使えるらしい。登録しようとしたが、短縮URLが表示されるだけで登録できない
dotCloud SSL付きだと$30.24するので高い。お試し期間もなさそう
exoscale apps リンク先エラー。PaaSは止めたっぽい
nodejitsu 最低でも月$25と高い。お試し期間もなし
JSApp.US Web IDE?ブラウザでコーディングする必要有り。プロプライエタリとして使うにはセキュリティが心配。
NAE(CN) リンク先エラー。どっちにしろ中国だし
RoseHosting 最低でも月$19.95するので高い。2CPUs 1GB RAM 30GB SSDは魅力的だが。SSL使えるかは不明

0

AWS EC2にnode.jsサーバーを構築しよう

環境は以下の通り。
・サーバーはAWS EC2
・サーバーのOSはAMI Linux
・ローカルのOSはCentOS 6.5
・ローカルにはnode.jsサーバーのソースコードがあるものとする

説明内容は以下の通り。
・サーバーにnode.jsをインストール
・サーバーにgitサーバーを立てる
・サーバーにnode.jsサーバーのソースコードをデプロイする
・サーバーのnode.jsサーバーを起動する

AWS EC2でのサーバー構築方法はsimtterができるまで(サーバー取得と設定)を参照して欲しい。
EC2からのリモートコントロールにはTera Termを使う。
Tera Termの使い方はchat.acができるまで(statusnetをインストール)を参照して欲しい。
ただし、今回インストールするOSはubuntuではなくAMI Linuxとする。
AMI Linuxのユーザー名はec2-userになる。

では、OSまで入った前提で以降を説明する。
 

node.jsをインストール

参考文献:
node.jsをyumでインストールする(centos6.5)
Amazon Linux AMI に関するよくある質問
Tera Termから下記コマンド実行。

sudo yum install nodejs npm --enablerepo=epel

 

gitサーバーを立てる

参考文献:自宅のCentOSにGitサーバを構築してみた
Tera Termから下記コマンド実行。

sudo yum install git git-deamon git-all xinetd
sudo chkconfig xinetd on
sudo vi /etc/xinetd.d/git-daemon

 
内容は

service git
{
        disable         = no
        socket_type     = stream
        wait            = no
        user            = nobody
        server          = /usr/libexec/git-core/git-daemon
        server_args     = --base-path=/home --export-all --user-path=ec2-user --syslog --inetd --verbose
        log_on_failure  += USERID
}

 
xinetd を起動

sudo service xinetd start

 
リポジトリ作成

cd ~
mkdir test.git
cd test.git
git --bare init --shared

 
gitグループを作成してユーザをそのグループに追加

sudo groupadd git
sudo usermod -G wheel,git ec2-user
sudo chown -R root:git ~/test.git

 

node.jsサーバーをデプロイする

ローカルのgitにはすでに何らかのソースコードをコミットしているものとする。
ローカルから下記コマンドを実行する。
 
リモートリポジトリの登録

git remote add origin ssh://ec2-user@[Public IP]:/~/test.git

※ [Public IP]はAWS EC2に割り当てられたIPアドレスを指定する。独自ドメインを設定している場合はドメイン名でも良い。
※ ssh 用の鍵ペアはTera Termでの通信で使う鍵と同じである。
 
リモートリポジトリに push

git push origin master

 

node.jsサーバーを起動する

サーバーで下記コマンドを実行する。
 
クローン作成

cd ~
git clone test.git

 
node.jsサーバー起動

cd test
node app.js

※ app.jsは自分が起動したいソースファイルに適宜読み替えること。


0