書籍「プログラマのためのGoogle Cloud Platform入門」の「第2章 Webアプリケーション実行基盤を構築しよう」で使用および提供されているPython製のサンプルアプリケーションをGoに書き換えてみました。サンプルは掲示板アプリケーションでGoogle Compute Engineにデプロイして使用することが前提となっています。
オリジナルは著者である阿佐志保さん(@_Dr_ASA)の次のリポジトリーです。
- asashiho/gcp-compute-engine: https://github.com/asashiho/gcp-compute-engine
本リポジトリーの公開に際しては、阿佐さんに問い合わせて許可を頂いています。
- appファイルに関しては、オリジナルと比較しやすいように処理の記載順などなるべく合わせています。
- appファイル以外の関数名などは、パッケージ化することを考慮して大文字で始めています。
- 影響がない範囲でGoのコーディング規約に従って書き換えています。(例:関数名には"_"を使用しない、など)
app_v1はCompute Engineとローカルの両方で実行できます。
Goがインストールされているか確認します。
$ go versionインストールされていない場合、インストールします。私が sudo apt-get install go でインストールした時はgo 1.3.3がインストールされてしまったので、ここでは公式サイトから最新版を取得する手順を示しています。
$ curl -O https://storage.googleapis.com/golang/go1.8.3.linux-amd64.tar.gz
$ sudo tar -C /usr/local -xzf go1.8.3.linux-amd64.tar.gz
$ mkdir -p $HOME/go/src
$ export PATH=$PATH:/usr/local/go/bin
$ export GOPATH=$HOME/goここでのexport文によるパスの設定は一時的なものなのでコンソールを抜けると無効になります。ログインの都度にexport文を実行するか .bashrc ファイルなどに環境変数として設定するなどしてください。
SQLite3がインストールされているか確認します。
$ sqlite3 -versionインストールされていない場合、別途インストールします。
$ sudo apt-get install sqlite3Gitがインストールされているか確認します。( go get 時に使用します)
$ git versionインストールされていない場合、別途インストールします。
$ sudo apt-get install gitGCCがインストールされているか確認します。(go-sqlite3で使用します)
$ gcc -vインストールされていない場合、別途インストールします。
$ sudo apt-get install gcc本リポジトリーのapp_v1を go get します。(-u は最新版の取得、-d はダウンロードのみ)
$ go get -u -d github.com/qt-luigi/gcp-compute-engine-go/app_v1ソースコードをコンパイルして、実行バイナリー「app」を作成します。
$ cd $GOPATH/src/github.com/qt-luigi/gcp-compute-engine-go/app_v1
$ go build -o app *.go以降、書籍に従ってセットアップしてください。
Go、SQLite3、Git、GCCがインストールされていない場合、インストールします。
本リポジトリーのapp_v1を go get します。(-u は最新版の取得、-d はダウンロードのみ)
$ go get -u -d github.com/qt-luigi/gcp-compute-engine-go/app_v1app.go ファイルの次の箇所をコメントに従って書き換えてください。
// ローカル実行の際は""に変更してください。
const installPath = "/opt/dengonban/v1"func main() {
// ローカル実行の際は":8080"に変更して「http://localhost:8080」でアクセスしてください。
if err := http.ListenAndServe(":80", nil); err != nil {
log.Fatal(err)
}
}実行バイナリーを作成して実行する場合、次のコマンドを実行します。
$ go build -o app *.go
$ ./appgo run で実行する場合、次のコマンドを実行します。
$ go run *.goapp_v2はapp_v1のデータベースがCloud SQL(MySQL)に置き換わったものです。
本リポジトリーのapp_v2を go get します。(-u は最新版の取得、-d はダウンロードのみ)
$ go get -u -d github.com/qt-luigi/gcp-compute-engine-go/app_v2セットアップについてはapp_v1を、GCP作業については書籍を、参照してください。
app_v3はapp_v2に画像ファイルをアップロードしてCloud Storageに格納する機能が追加されています。
本リポジトリーのapp_v3を go get します。(-u は最新版の取得、-d はダウンロードのみ)
$ go get -u -d github.com/qt-luigi/gcp-compute-engine-go/app_v3セットアップについてはapp_v2を、GCP作業については書籍を、参照してください。
systemdのログ表示:
$ sudo journalctl -u dengonban.service