umegusa's blog

備忘録

golang revelフレームワークをnginxで動かす!

さくらで借りてるサーバがCentOSなんですが、そこでnginx + golangフレームワーク revelフレームワークを使っていろいろ作業をして何とか動かせたので残しておきます。

revelフレームワークを入れる

golangの設定は以前お話しましたね。umegusa.hatenablog.jp
で、revelフレームワークのお話もしました。umegusa.hatenablog.jp

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

それでも詰まったので書きます。。。
※ 下記はrootで行ってください

revelフレームワークを入れる

Welcome to Revel, the Web Framework for Go!
ここです。よく見るとgolang v1.3以上というお話。
自分の環境は1.2.2だったのでアップデートします。
アップデートするには既存の/usr/local/go を削除して書き込む必要があるみたいです・・・
ということで既存のgolangを削除、golangの1.4をダウンロードし、解凍してもろもろ設定しました。
Go言語のインストール - golang.jp

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

新しくなったところでrevelフレームワークをインストールします。

# go get github.com/revel/revel

全く動きません。。。。
verboseコマンド付けてみてみます

# go get -v github.com/revel/revel
github.com/robfig/config (download)
github.com/robfig/pathtree (download)
Fetching https://gopkg.in/fsnotify.v1?go-get=1
Parsing meta tags from https://gopkg.in/fsnotify.v1?go-get=1 (status code 200)
get "gopkg.in/fsnotify.v1": found meta tag main.metaImport{Prefix:"gopkg.in/fsnotify.v1", VCS:"git", RepoRoot:"https://gopkg.in/fsnotify.v1"} at https://gopkg.in/fsnotify.v1?go-get=1
gopkg.in/fsnotify.v1 (download)

ここで止まります。
なんかgopkg.in/fsnotify.v1 がダウンロードできないみたいですね。
いろいろ調べていたらgitのバージョンがふるいっぽいです。
下記を参考にさせていただきました。
revel入れたいのにgo getが進まなかった - Qiita

# git clone https://gopkg.in/fsnotify.v1

これで動かないので・・・
ということでgitのバージョンをあげます。
標準のgitのバージョンは1.7.1でした。

# git --version
git version 1.7.1

gitをアンインストールしてから必要なパッケージを取得します。
gitをインストールするのに必要なパッケージは下記の通りです。

curl-devel
expat-devel
gettext-devel
openssl-devel
zlib-devel
perl-ExtUtils-MakeMaker

ということで削除から設定まで一気にやってしまいましょう!
こちらを参考にさせていただきました。
CentOS 6.5, yum でインストールした Git を 1.7.1 から 2.2.0 にバージョンアップする (※Git2.2.1,2.3.2版もあり) - Qiita

# yum remove git
# yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-ExtUtils-MakeMaker
# wget https://www.kernel.org/pub/software/scm/git/git-2.3.2.tar.gz
# tar -zxf git-2.3.2.tar.gz
# cd git-2.3.2
# make prefix=/usr/local all
# make prefix=/usr/local install
# export PATH=/usr/local/bin/git:$PATH
# git --version
git version 2.3.2

gitのバージョンは最新になりました。
もう一回入れてみると、今度は1.2.2のバージョンのものが適用されているようで、うまくインストールできませんでした。

# github.com/revel/revel
go/src/github.com/revel/revel/revel.go:4: import /root/go/pkg/linux_amd64/github.com/agtorre/gocolorize.a: object is [linux amd64 go1.2.2 X:none] expected [linux amd64 go1.4.2 X:precisestack]

ということで$GOPATH/src/github.com/revel を削除してもう一回インストール

# go get github.com/revel/revel
# go get github.com/revel/cmd/revel

これにて無事インストール完了です・・・・

nginxの設定を行う

nginxの設定を行います。
confファイルを書き換えるだけです。

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

内容を下記のように書き換えます。

server {
    listen       80;
    server_name  hostname;

    location ~ / {
        proxy_pass http://127.0.0.1:9000;
    }
}

リバースプロキシの設定を行います。
80番でアクセスされたときにlocalhostの9000番にアクセスするような設定をすることで、revelフレームワークで作成したアプリケーションにアクセスすることができます。

revelフレームワークでアプリケーションを作成する

いつものやつ

# revel new AppName

作成されたAppNameのapp.confのhttp.portは9000番を指定してください。(デフォルトは9000番)
あとは起動してサーバからアクセスするだけです。

# revel run AppName

アクセスするとrevelフレームワークのアプリケーションが起動するはずです。

ついでにいれたmysqlのメモ

完全にメモ。mysqlを入れたときのメモです。

# yum -y install mysql-server mysql

mysql入れたときにutf-8にするための設定を記述します。
/etc/my.cnf に下記の設定を入れます。

[mysqld]
character_set_server = utf8
collation_server = utf8_general_ci

[mysql]
#no-auto-rehash # faster start of mysql but no tab completition
default-character-set=utf8

んでmysql-serverをスタート。ついでに起動したときに開始するような処理も入れます。

# /etc/init.d/mysqld start
# chkconfig mysqld on

おしまい!

終わりに

revelフレームワークだけじゃなくて他のアプリケーションをnginxで動かす場合にも使えそうですね、リバースプロキシの設定。
今ってどういうのが主流なんだろ?他にあったら教えていただきたいです!