じぶんクラウドのDocker上に構築したCloud9にブラウザから接続してどこでもNode.jsの開発ができるようになりました。メニューのRun - Run with にはデフォルトでいろいろな言語のRunnerがあります。ここに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ボタンを押して起動します。
またはCloud9のコンソールから直接go run
を実行します。
$ cd /workspace/martini
$ go run server.go
コンソールからcurlでテストします。
$ curl localhost:3000
Hello world!root
Previewが動かない
メニューからPreview -> Preview Runnning Applicationを選択できます。残念ながらホスト名がundefinedになってしまいました。まだ設定が足りないようです。
直接Cloud9のホストに対してブラウザを開くとHello Worldが表示されました。とりあえずプレビューはできそうです。