umegusa's blog

備忘録

Nginx + Golang でWebアプリケーション開発を試してみた

NginxとGolangを使ってWebアプリケーションを作成してみたい!
とかそんなことを思い立ったのでチャレンジしてみました。

実行環境

OSのバージョンは下記の通りです。
サーバはサクラVPS借りてやってます。

# cat /etc/system-release
CentOS release 6.6 (Final)

CentOS 6.6ですね。

Nginxのインストール

yumを使ってインストールします。

# yum install nginx

ここで落ちてきたのがバージョンが低いものでした。
ですのでアップデートします。
まずはnginx用リポジトリを作成します。

# vi /etc/yum.repo.d/nginx.repo

内容は下記のようになります。
nginx.repo

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/rhel/$releasever/$basearch/
gpgcheck=0
enabled=1

そしてアップデートします。

# yum update

最後にPATHを通しておきます。
.bashrcなどに書いておくといいかもしれません。

# export PATH=$PATH:/usr/local/nginx/sbin

Nginxのインストールは以上で完了です。

Nginxの設定

NginxでWebサーバの設定を行う

続いて設定を行います。
以前はApacheで動いていたのでごっちゃにならないように設定します。

まずサーバ起動時にNginxが立ち上がるようにします。
Apacheも同様の設定をしていたので、そちらの設定は解除するような形になりますね。

# chkconfig httpd off
# chkconfig nginx on

完了したら今度はNginxを起動します。

# service nginx start

okが出たらアクセスしてみましょう。
画像のようにWelcome to Nginx!というページが出てくるはずです。
f:id:umegusa:20150222023314p:plain
ページが表示されればOKです。

Golangが動くように設定を行う

yumでインストールすると
/etc/nginx/
の中にconfigファイルが量産されてるはずです。
serverの設定を下記のように書き換えます。

# vi /etc/nginx/conf.d/default.conf

一番簡易的な設定は下記のとおりになるのかな?
default.conf

server {
    listen       80;
    server_name  hostname;

    location / {
        fastcgi_pass  127.0.0.1:9000;
        include       fastcgi_params;
    }
}

hostnameは自分のサーバのホストになります。
以上でNginx側の設定は完了です。

Golangのインストール

ダウンロードは下記ページでできます。
Downloads - The Go Programming Language

今回はwgetを使用してGolangをインストールします。

# wget https://storage.googleapis.com/golang/go1.2.2.linux-amd64.tar.gz
# tar -C /usr/local -xzf go1.2.2.linux-amd64.tar.gz

インストールが完了したらPATHを通します。
こちらも.bashrcに書いておくと問題ないかもしれません。

export GOROOT=/usr/local/go
export PATH=$PATH:/usr/local/go/bin

最後に実行できるか確認してみましょう。

# go -V

golangのバージョンなどが表示されていれば問題なくインストールされています。

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

今回はチュートリアルをほぼそのまま流用したものを使用して記述してみます。
index.go

package main

import (
    "fmt"
    "net"
    "net/http"
    "net/http/fcgi"
)

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1:])
}

func main() {
    l, err := net.Listen("tcp", "127.0.0.1:9000")
    if err != nil {
        return
    }
    http.HandleFunc("/", handler)
    fcgi.Serve(l, nil)
}

tcpソケットでListenして終わりです。
ポート番号などNginxで設定したものとあわせてください。

Webアプリケーションを実行する

今回は /var/golang/ 下に作成したプログラムを格納しました。(多分どこでも大丈夫だと思います)

作成したプログラムを実行します。

# cd /var/golang/
# go run index.go

もしくは

# cd /var/golang/
# go build index.go
# ./index

で実行できます。
あとはプログラムで設定したURLにアクセスして、
表示されれば完了になります。

バックグラウンドで実行しておく

実行コマンドの後に & をつけることでバックグラウンドで実行されるようになります。

# ./index &

プロセスを殺すときはkillコマンドを実行しましょう。

# jobs
# kill %job_number

以上です。

終わりに

ゴーファー君かわいいですね。
軽くしか触っていないのですが、Golang思ったよりさくさくかけそうな印象をうけました。
Swiftと合わせて勉強していきたいなと思います。