February 2, 2014

1093 letters 3 mins read

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

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名にこれを設定する。

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

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

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

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

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

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

Colletions画面のCreate a 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