0%

Cloud9 on Docker - Part3: GoとMartiniをインストール

じぶんクラウドのDocker上に構築したCloud9にブラウザから接続してどこでもNode.jsの開発ができるようになりました。メニューのRun - Run with にはデフォルトでいろいろな言語のRnnerがあります。ここにGoもありました。最近使っていなかったので今回はGoの開発環境を追加しようと思います。

プロジェクト

デフォルトのNode.jsに加えてGoをインストールします。リポジトリはこちらです。Cloud9へのGoのインストールについてはWriting a Go Appに書いてあります。

Dockerfile

Goをダウンロードしてインスト-ルします。Go環境変数は/root/.profileに追記します。

FROM node:0.12
MAINTAINER Masato Shimizu <ma6ato@gmail.com>

RUN git clone https://github.com/c9/core.git /cloud9 && \
cd /cloud9 && ./scripts/install-sdk.sh

RUN npm install hexo-cli -g
RUN wget -O - https://storage.googleapis.com/golang/go1.4.2.linux-amd64.tar.gz | tar -xzC /usr/local -f - &\
& \
echo "export GOPATH=/workspace/gocode" >> /root/.profile && \
echo "export PATH=$PATH:/usr/local/go/bin:/workspace/gocode/bin" >> /root/.profile

WORKDIR /workspace

docker-compose.yml

docker-compose.ymlには今回使用するWebアプリのMartiniで使用する3000ポートを公開します。

cloud9:
build: .
restart: always
ports:
- 8080:80
- 15454:15454
- 3000:3000
- 4000:4000
volumes:
- ./workspace:/workspace
- ~/.gitconfig:/root/.gitconfig:ro
- ~/.ssh/id_rsa:/root/.ssh/id_rsa:ro
- /etc/localtime:/etc/localtime:ro
command: node /cloud9/server.js --port 80 -w /workspace --auth user:password

Dockerイメージを再作成します。これまでNode.jsのアプリは/workspaceで作業していました。このディレクトリはDockerホストにマップしているので起動しているコンテナやイメージを破棄しても消えません。

$ docker-compose build
$ docker-compose up -d

Cloud9のコンソールから環境変数が設定されているか確認します。

$ go env GOROOT
/usr/local/go
$ go env GOPATH
/workspace/gocode
$ which go
/usr/local/go/bin/go

Martini

MartiniはGo用のSinatraライクなマイクロフレームワークです。Cloud9のコンソールからgo getでインストールします。インストール先はGOPATHに設定した/workspace/gocode/になります。

$ go get github.com/go-martini/martini

server.go

workspaceに適当なディレクトリを作成します。/のルートと簡単なHello Worldを書きます。

package main

import "github.com/go-martini/martini"

func main() {
m := martini.Classic()
m.Get("/", func() string {
return "Hello world!"
})
m.Run()
}

起動

server.goを選択した状態でCloud9のRunボタンを押して起動します。

martini-run.png

またはCloud9のコンソールから直接go runを実行します。

$ cd /workspace/martini
$ go run server.go
````

コンソールからcurlでテストします。

```bash
$ curl localhost:3000
Hello world!root

Previewが動かない

メニューからPreview -> Preview Runnning Applicationを選択できます。残念ながらホスト名がundefinedになってしまいました。まだ設定が足りないようです。

cloud9-preview-undefined.png

直接Cloud9のホストに対してブラウザを開くとHello Worldが表示されました。とりあえずプレビューはできそうです。

martini-hello.png