Google Compute Engine 上の Nginx で運用していたブログを、GAE/Go (Go on Google App Engine) に移行した。

GAE/Go とは

GAE/Go は、Google が提供する Go言語用の PaaS 。マネージドSSLの提供開始により、 カスタムドメインもつけるだけで SSL化されるようになった。

PaaS はアプリを動かすものだが、静的サイトを公開したければ、静的ファイルをを配信する アプリを書けばよい。と言っても必要なファイルは2つだけ。

public/
main.go
app.yaml

GAE で公開(deploy)するための準備

GCPの開始や、gcloud の初期設定(デフォルトプロジェクトの登録など)が済んでいる状態で、 下記コマンドを実行し、GAE を東京リージョンで使える状態にする。

gcloud app create --region=asia-northeast1

次に、2つのファイルを public ディレクトリと同じ階層に作成。

main.go

package main

import "net/http"

func init() {
    http.Handle("/", http.FileServer(http.Dir("public")))
}
  • public ディレクトリ配下を公開するアプリ

app.yaml

runtime: go
api_version: go1

skip_files:
- ^(?!main\.go|public)

handlers:
- url: /.*
  secure: always
  script: _go_app
  • GAE の設定ファイル
  • skip_files: で main.go と publicディレクトリのみ deploy するように指定
  • secure: always で http を https にリダイレクト

GAE で公開

app.yaml があるディレクトリで、gcloud コマンドを実行すれば public 配下が公開される。

gcloud app deploy

このサイトの場合

このブログは Hugo を使っていて 、以前書いたように、Hugo の操作は全て Makefile を利用している。そのため、下記コマンドを打てば、public 配下が更新され、deploy が 実行される。make 便利。

make deploy