自分用の備忘録としてレンタルサーバー(xServer)でCGIを利用してGOで記述したプログラムを動かした方法を書き記していきます(自分ができたというだけで正しいことを書いている保証はありません)。
苦戦したポイント、手順とともに紹介してきます。
つまづくポイントとしてはrootがないためconfの設定をいじれない点。また共有サーバーのためGOのプログラム(GO本体)をインストールするのはちょっと怖い。
初期設定の段階でCGIの置き場所は決められているので.htaccessをいじる必要はない。サイトを「apache CGI」めぐっていると
AddHandler cgid-script .cgi
的な文言を書けと書いてあり惑わされる。しかしxServerの場合はこれと同じ効力を持った記述がconfigファイル(自分はいじれない)にあるので.htaccessに改めて記述する必要はない(FCGIを使う場合を除く)。
とっても厄介。まず素の状態のxServerはGOを扱える状態ではなく、その上サーバー(物理)は共有されていて、個々人に割り当てられているサーバーは一種のVPSなので変なプログラムや設定を突っんむことができない(できるけどミスった際の責任がやばい)。以上から自分の判断でGOをインストールするのはやめた。どこまで汚染されるかわからないし、VPSのユーザーとかbinとかのファイルってどういう設定なのかわからない状態でいじりたくない。つみかな?
GOを直接扱うのは諦めたがどうやらCGIはバイナリファイル(実行ファイル)でも動くようなのでGOプログラムをbuildしてできたバイナリファイルをCGIとして使うことにした。CGIは拡張子が.cgiでサーバーが実行できるプログラムなら何でもいいようだ(要検証)。メモ帳で描いたperlも動いたし、GOのバイナリファイルも最終的には動作した。
GOのバイナリファイルを実行するにあたって苦戦下ことがひとつあった。自分はWindowsOSを使っているのだがxServerはLinuxなのだ。察しがいい人ならもうわかるっていうかそもそもこんなところで躓くはずもないのだが、バイナリファイル同じものを使うはずもなし。なんのためのクロスコンパイルなのか(そもそもこの言葉知らんかった)。
普段Webフロントしかいじらないので知らなかったが、OSの違いがコンパイルの段階で存在していた。さらにこのクロスコンパイル、Macなら簡単にできるらしいがWindowsはちょっとめんどくさかった。下のコマンドでxServer用のバイナリファイルファイルにコンパイルした。Windowsだと毎回このsetをしなければいけないうえにgccを入れたり、楽したいときはmake.bat(ようわからん)をする必要があるらしい。Macは下のコマンド打つだけでいいらしい。
Windows set GOOS=linux set GOARCH=amd64 go build faile.go
Mac GOOS=linux GOARCH=amd64 go build faile.go
CGI走らせるのにもこんだけ必要な知識がたくさんあった。インフラ周りいじれる人まじで尊敬できることを再確認した勉強になりました。