LoginSignup
9
8

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-06-25

じぶんクラウドの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ポートを公開します。

~/node_apps/docker-cloud9/docker-compose.yml
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を書きます。

/workspace/martini/server.go
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でテストします。

$ curl localhost:3000
Hello world!root

Previewが動かない

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

cloud9-preview-undefined.png

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

martini-hello.png

9
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
8