月別アーカイブ: 2014年2月

HerokuにGo言語+MongoDBのWebアプリケーションをデプロイする

Good! Counter Application

Herokuでは公式ではGo言語はサポートされていないにも関わらず、意外なほど簡単にデプロイすることができる。

http://good-counter-go.herokuapp.com/
https://github.com/inatus/good-counter-go

前準備

  • Herokuへアカウント登録
  • Heroku toolbeltのインストール
  • $GOPATHの設定

ググれば情報がいくらでも出てくる。

Go言語のソースフォルダの作成

$GOPATH/src内にソースフォルダを作成する必要がある。

$ mkdir $GOPATH/src/good-counter-go
$ cd $GOPATH/src/good-counter-go
$ git init

herokuプロジェクトの作成

Heroku Toolbeltにログインし、新規にプロジェクトを作成する。

$ heroku login
Enter your Heroku credentials.
Email: you@example.com
Password:
Uploading ssh public key /Users/you/.ssh/id_rsa.pub
$ heroku create -b https://github.com/kr/heroku-buildpack-go.git
Creating vast-brook-7638... done, stack is cedar
BUILDPACK_URL=https://github.com/kr/heroku-buildpack-go.git
http://vast-brook-7638.herokuapp.com/ | git@heroku.com:vast-brook-7638.git

プロジェクト名の変更

ランダムにプロジェクト名が付けられるので、任意の名前に変更する。

$ heroku apps:rename good-counter-go
Renaming vast-brook-7638 to good-counter-go... done
http://good-counter-go.herokuapp.com/ | git@heroku.com:good-counter-go.git
Git remote heroku updated

HerokuプロジェクトにMongoDBアドオンの追加

プロジェクトにMongoDBアドオン(無料版)を追加する。無料版を利用する場合であってもHerokuの設定画面からクレジットカード情報を入力する必要があるようだ。

$ heroku addons:add mongohq
Adding mongohq on good-counter-go... done, v4 (free)
Use `heroku addons:docs mongohq` to view documentation.

Go Webアプリケーションを作成

MongoDBと連携したWebアプリケーションを作成する。ポイントは以下の通り。

httpサーバのポートに環境変数PORTを指定

http.ListenAndServe(":"+os.Getenv("PORT"), nil)

MongoDBのURLに環境変数MONGOHQ_URLを指定

環境変数MONGOHQ_URLにユーザ名、パスワードも含まれている。

sess, err := mgo.Dial(os.Getenv("MONGOHQ_URL"))

データベース名をMongoHQの管理画面を確認して指定

HerokuのApps管理画面からMongoHQの管理画面に入り、DB名を確認する。Goが接続するDB名にこれを設定する。

Heroku Apps管理画面

MongoHQ管理画面

const MONGO_DB_NAME = "app21817638"
c := mgoSession.DB(MONGO_DB_NAME).C("count")

DBにコレクション・ドキュメントを挿入

コマンドラインから追加する場合

Admin画面のUsersタブより新規ユーザを追加し、コマンドラインから以下のようにコンソールにログインする。

MongoHQ User追加画面

$ mongo troup.mongohq.com:10084/app21817638 -u <user> -p <password>

管理画面から追加する場合

Colletions画面のCreate a collectionからコレクションを作成する。

MongoHQ Collection追加画面

Herokuレポジトリへのアプリケーションの登録

ソースをレポジトリにコミットする。

$ git add -A .
$ git commit -m 'Add source'

Heroku用の設定ファイルを作成、ライブラリをダウンロードし、レポジトリにコミットする。

$ echo 'web: good-counter-go' > Procfile
$ go get github.com/kr/godep
$ godep save 
$ git add -A .
$ git commit -m 'Add dependencies'

最後に、Herokuにpushする。

$ git push heroku master
-----> Fetching custom git buildpack... done
-----> Go app detected
-----> Using go1.1.2
-----> Running: godep go install -tags heroku ./...
-----> Discovering process types
       Procfile declares types -> web
-----> Compressing... done, 3.0MB
-----> Launching... done, v5
       http://good-counter-go.herokuapp.com deployed to Heroku

動作確認

$ heroku open

リソースをGithubにもpushする場合

Githubで新規レポジトリを作成し(自動initにしない)、以下のようにする。

$ git remote add origin https://github.com/inatus/good-counter-go.git
$ git push -u origin master