始めに

自分用の備忘録としてレンタルサーバー(xServer)でCGIを利用してGOで記述したプログラムを動かした方法を書き記していきます(自分ができたというだけで正しいことを書いている保証はありません)。

苦戦したポイント、手順とともに紹介してきます。

本題

苦戦したポイント

  • xServer側の設定
  • .htaccess
  • そもそも共有サーバー
  • コンパイル・バイナリファイル

xServer側の設定

  • xServerはWebサーバーとしてApacheとnginxを使っている
  • root権限が渡されていない
  • CGIはpublic_html下ならどこにプログラムを置いても実行できる

つまづくポイントとしてはrootがないためconfの設定をいじれない点。また共有サーバーのためGOのプログラム(GO本体)をインストールするのはちょっと怖い。

.htaccess

初期設定の段階で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走らせるのにもこんだけ必要な知識がたくさんあった。インフラ周りいじれる人まじで尊敬できることを再確認した勉強になりました。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です