はじめてのHeroku(node.js)
Herokuを使ってみたくなったので環境を構築してみたのですよ。
環境:MacOS 10.7.3 / nodebrew 0.5.0 / node 0.6.13 / npm 1.1.9
herokuコマンドのインストール
The Heroku CLI | Heroku Dev Centerから、インストーラをダウンロードしてきます。
Linuxとか書かないでDebian/Ubuntuって書いてるってことは、RHEL系は別の方法でインストールするのかな?
今回の環境はMacOSXなので、heroku-toolbelt.pkgをダウンロード、実行してウィザードを進めて行きます。
特に失敗することなく正常にインストールされるかと。
インストールされたか確認するため、コマンドを実行してみます。
$ which heroku
/usr/bin/heroku
$ heroku --version
2.25.0
ちゃんとインストールされてるみたい。
公開鍵認証用の鍵を作る
公開鍵認証に必要な鍵を生成します。
$ ssh-keygen -t rsa -C "Heroku" Generating public/private rsa key pair. Enter file in which to save the key (/Users/sasaplus1/.ssh/id_rsa): Enter passphrase (empty for no passphrase):
生成時にいろいろ入力を促されますが、
Enter file in which to save the key | どういうファイル名で保存するか |
Enter passphrase (empty for no passphrase) | パスフレーズの入力(空の場合はパスフレーズなし) |
~/.ssh以下に既に他の鍵が存在する場合は最初のやつに気をつけて入力(/Users/(username)/.ssh/heroku_id_rsaとか)して、後は空でも良いかと。
公開鍵認証の設定ファイルを編集する
~/.ssh/configを編集します。githubなんかを使っている場合は既に何かしら書いているのではないでしょうか。
Host heroku.com User git Port 22 Hostname heroku.com IdentityFile ~/.ssh/(秘密鍵のファイル) TCPKeepAlive yes IdentitiesOnly yes
鍵を生成するとid_rsaとid_rsa.pubというファイルが生成されますが、秘密鍵は前者の方です。
ファイル名を指定して生成した場合はそのファイル名そのものの方になります。ファイル名の最後に.pubのない方です。
ログイン
事前に登録しておいたアカウントと、先ほど生成した鍵を使って、ログインします。
この作業は最初の一度だけで良いみたい。
$ heroku login Enter your Heroku credentials. Email: {email address} Password (typing will be hidden): Found the following SSH public keys: 1) xxx_id_rsa.pub 2) zzz_id_rsa.pub 3) heroku_id_rsa.pub Which would you like to use with your Heroku account? 3 Uploading SSH public key /Users/sasaplus1/.ssh/heroku_id_rsa.pub Authentication successful.
鍵が複数存在する場合、どの鍵を使用するか聞いてくるので先ほど生成した鍵の番号を選びます。
鍵が一つしか無い場合は……それが使用されるのかな、どうなのかな。
アプリケーションを作る
とりあえず簡易なアプリケーションを作ります。
bitbucket*1にheroku-helloworldという名前でgitリポジトリを作りました。
Mercurialでもデプロイできればなあ…… 一応hg-gitを使うと出来ないことも無いみたいですが。
$ git clone git@bitbucket.org:sasaplus1/heroku-helloworld.git
$ cd heroku-helloworld/
HelloWorldを表示させたいだけなので、とりあえずexpressを入れます。
$ npm install express
続いてweb.jsを書きます。
var express = require('express'), app = express.createServer(); app.get('/', function (req, res) { res.send('Hello, World!'); }); app.listen(process.env.PORT || 3000);
続いてpackage.jsonを書きます。
{ "name": "heroku-helloworld", "version": "0.0.1", "dependencies": { "express": "2.5.9" }, "engines": { "node": "0.6.13", "npm": "1.1.9" } }
Herokuで使用できるnode.jsとnpmのバージョンは
http://heroku-buildpack-nodejs.s3.amazonaws.com/manifest.nodejs
http://heroku-buildpack-nodejs.s3.amazonaws.com/manifest.npm
みたいです。
expressのバージョン番号は
$ npm ls (path)/heroku-helloworld └─┬ express@2.5.9 ├─┬ connect@1.8.7 │ └── formidable@1.0.9 ├── mime@1.2.4 ├── mkdirp@0.3.0 └── qs@0.4.2
で確認します。モジュール名@バージョン番号なので今回インストールされたバージョンは2.5.9ですね。
あとはProcfileと.gitignoreを作成して終わりです。
$ echo 'web: node web.js' > Procfile $ echo 'node_modules/' > .gitignore
リポジトリへコミット
作成したファイルをリポジトリへコミットします。ついでにプッシュも。
$ git add . $ git commit -m "initial commit" $ git push origin master
Heroku上にアプリケーションを作成
以下のコマンドでアプリケーションを作成します。
$ heroku create --stack cedar --buildpack http://github.com/hakobera/heroku-buildpack-nodejs.git
buildpackのあたりは……package.jsonで指定したnode.jsとnpmのバージョンを使う場合に必要なものだったかな……?
デプロイ
Herokuにリポジトリをプッシュして、デプロイします。
$ git push heroku master
と普通は実行するみたいですが
$ git push git@heroku.com:(heroku appsで表示されるやつ).git master
と実行しました。git remote addとかよくわからないので。
多分どちらでも動くんじゃないでしょうか。多分。
昔の記事を参考にすると、このあとプロセスを起動させないといけないみたいなのですが、コンソールにはLaunching... done, v4とか表示されてるので勝手に起動してくれてるみたいですね。
完成品
出来上がったのがこちら。リポジトリはこっち。
Herokuはハマらなければ簡単、Gitが難しいという感じでした。
参考:
Getting Started on Heroku with Node.js | Heroku Dev Center
GitHub - hakobera/rtvote: Realtime voting application written by Node.js. This app can run on Heroku.
http://www.eiplab.com/2011/06/heroku-node-js-express-helloworld/
Herokuで鍵がPermission denied (publickey). になる時 - opamp_sando's blog
追記:
再度HerokuでHelloWorld - 四角革命前夜で作り直したのでbitbucketのリポジトリは削除しました。