【CGI】
昔のPerl製CGIをレンタルサーバーで動かしてみたので、その公開手順を共有

記事イメージ

こんにちは、堺です。

CGI(Common Gateway Interface)は一昔前に主流だったWebアプリのプラットフォームですが、現代のレンタルサーバーでも大体のものは動かすことが可能です。

今回は、既に完成している昔のCGIスクリプト(Perl製)をレンタルサーバーで動かしてみたので、手順を共有してみたいと思います。

何を動かしてみたのか?

「三国志NET」という、2003年に個人により開発されたフリーのCGI製ブラウザゲームを稼働させてみました。

多人数登録型の国盗りシミュレーションでプレイヤーは武将として参加します。そのテーマの関係上様々な人間ドラマが展開されてきました。

現在も三国志NETは派生(改造)版が稼働しているなど一部に根強い人気があるゲームです。私自身も長年参加しているよしみで、手元にあったオリジナル版のスクリプトを実験台として使ってみました。

(開発元サイトはずいぶん前に消滅してしまいました。スクリプトの再配布はおそらく権利的に難しいのでご容赦ください。)

ちなみに今回公開したサイトはこちらです。

早々に畳むと思いますので、魚拓を取っておきました。
早々に畳むと思いますので、魚拓を取っておきました
三国志NETのルートフォルダーの構成。jcode.plなど、懐かしさを感じます。
三国志NETのルートフォルダーの構成
(引用:三国志NETソースコード)コードはPerlで書かれています。データベースを使用せず、テキストファイルにデータを保持するという、現在では発想が及びにくい構成になっているのも歴史を感じさせます。
(引用:三国志NETソースコード)コードはPerlで書かれています

CGIってそもそもなんだっけ?という人へ簡単な解説

ブラウザゲームというと、今でこそ据え置き機やスマホアプリにも劣らないプラットフォームですが、ほんの10~15年前はフォームポストが主体の簡易ネトゲーといった雰囲気でした。

その多くは、サーバーサイドの処理とHTMLレンダリングまるっとPerlというインタプリタ言語などで記述するCGI(Common Gateway Interface)という仕組みが使われています。

CGIの用途はゲームはもちろんのこと、BBS(掲示板)やアクセスカウンタなどにも利用され、2000年代初頭以前のネット草創期の文化を下支えした技術と言えるでしょう。

レンタルサーバーは多くはLinuxベースでPerlやCGIが標準で利用できるようになっています。なので、既に30年近くの歴史があるCGIですが、スクリプトファイルをアップロードして設定すればきちんと稼働し、動的コンテンツサイトを作ることが可能なのです。

Perlスクリプトの内容(引用:三国志NETソースコード)。print関数出力を使用してHTMLを記述することで、動的なサイトを実現します。
Perlスクリプトの内容(引用:三国志NETソースコード)

実際に公開する手順

スクリプトは既に完成しているので、項目数は多いですが、手順としては極めてシンプルです。まず初めにまとめます。

既成CGIスクリプトの公開手順まとめ
  • 規約を確認の上、レンタルサーバーを契約する。
  • SSHを許可する設定をする(後でパーミッション設定を行うため)
  • サーバーのPerlパスを確認して、スクリプトに反映
  • スクリプトをFTPでアップロード
  • SSH接続してパーミッション設定
  • cgiファイルにブラウザーからアクセス

規約を確認の上、レンタルサーバーの契約

どこでもほとんど変わりはないと思いますが、今回はエックスサーバーを使用しました。

また、より安く済ませるならさくらのレンタルサーバなどもオススメですが、さくらでは最安のライトプランではSSH接続ができないので注意しましょう。(関連記事もご参考ください。)

関連記事:【Connection closed】さくらのレンタルサーバーにSSH接続したら、接続確立した瞬間に切断される件について、現象と解決を紹介

通常のWebサイトならライトでも問題ありませんが、CGIとなると恐らくほとんどのケースではSSH接続してパーミッションを設定することが必要になります。さくらであればスタンダードプランを利用しましょう。

尚、どこのサーバーを利用するにせよ、CGIの利用可否や設置物の性質・ジャンル上問題がないかなど、必ず利用規約を確認するようにしましょう。

SSHを許可する設定

デフォルトでONになっているサーバーもあるかもしれませんが、エックスサーバーであればサーバーパネルからSSH接続を許可する必要があります。

(引用:エックスサーバー サーバーパネルより)サーバーパネル→SSH設定からSSH接続をONにします。また、公開鍵認証用鍵ペアを生成して、keyファイルをダウンロードしておきましょう。keyファイルとパスワードは、外部に漏れると危険ですので、気を付けて取り扱ってください。
(引用:エックスサーバー サーバーパネルより)サーバーパネル→SSH設定からSSH接続をONにします

サーバーのPerlパスを確認して、スクリプトに反映

Perlは、各スクリプトの最初に次のようなおまじない的なコードを書く必要がありますが、これはサーバー内でのPerlパスを指定しています。

Perl
#!/usr/bin/perl

各サーバーでは、サポートページなどでPerlのパスを公開していますので、参照して各スクリプトに反映させましょう。

(引用:エックスサーバー サポートページより)例えばエックスサーバーであれば、「xserver perl path」などと検索すれば、パスを表示しているページが見つかります。
(引用:エックスサーバー サポートページより)例えばエックスサーバーであれば、「xserver perl path」などと検索すれば、パスを表示しているページが見つかります

スクリプトをFTPでアップロード

私はFTP通信にはFileZillaというソフトウェアを利用しています。CGIアプリフォルダーをまるっとアップロードしましょう。

アップロードが完了しました。
アップロードが完了しました

ここまでで、CGIが動く準備は整いました。しかし多くの場合、この状態で接続しても500エラーが返されるのではないでしょうか。

そこで必要になるのが、次のパーミッション設定です。cgiの実行権限を各ファイルに設定する必要があります。

このまま繋ぐと500エラーになります。エラーメッセージとして明記はされませんが、パーミッション設定が必要です。
このまま繋ぐと500エラーになります

SSH接続してパーミッション設定

SSHでサーバーに接続して、各ファイルのパーミッションを設定します。

WindowsのコマンドプロンプトやMacのターミナルから操作しましょう。(Windowsの場合、バージョンが古いと対応していない可能性があります。WSL2などの利用をご検討ください。)

ここではコマンドプロンプトから接続を行います。エックスサーバーではポートは10022と指定されているので、それに従います。-iオプションは先ほど保存した秘密鍵ファイルのパスを指定します。

コマンドプロンプト
ssh -p 10022 -i C:\Users\sakai\xs000000.key xs000000@xs000000.xsrv.jp

尚、ログインIDは、エックスサーバーの場合はFTPアカウントでも管理画面ログイン名でもなく、「サーバーID」です。管理画面トップに記載があり値を確認できます。

無事SSH接続できました。
無事SSH接続できました

接続後、各ファイルのその他ユーザーに対する実行権限を許可します。

今回は簡単のため、全て755の権限を付与することにします。

FTPでアップロードしたCGIアプリのディレクトリに移動して、下記のコマンドを実行します。-Rオプションで再帰的にchmodを反映できます。

コマンドプロンプト
$ chmod -R 755 .

※ここでは省略しますが、実行ファイル以外の画像等であれば644などの権限で良いかと思います。個別にご検討頂ければと思いますが、777権限だけは何かと問題があるので避けておきましょう。

※SSHは用事が済んだら、サーバーのコントロールパネルでオフにしておきましょう。

以上が終わったら、ページにアクセス。CGIが動くはず。

これら設定が正しくできたら、恐らく正常にCGIが動作するはずです。

httpでcgiファイルにアクセスしてみましょう。

簡単にトラブルシューティング

CGIを公開するうえで起こるエラーについて、簡単に解説しておきます。

アクセスすると404エラーになる

CGI動作以前にURLが間違っている可能性があります。

レンタルサーバーの公開ルートディレクトリを確認して、正しいURLにアクセスするよう試みてください。

アクセスすると500エラーになる

パーミッションの設定で実行できていない可能性があります。この記事の上部で説明しているので、ご確認ください。

あるいは、CGI内部でスクリプトがクラッシュ(エラーが発生)している可能性があります。

SSH接続中、ルート権限やsudoが利用できない

レンタルサーバーはほとんどがLinuxベースですが、共用サーバーゆえルート権限を公開していない場合が多いです。その場合、suやsudoコマンドが使用できません。

ルート権限が不要な方法で設定を行いましょう。

sudoコマンドを使用すると「あなたはシステム管理者から通常の講習を受けたはずです。」などと表示される

この場合も↑と同じです。ルート権限は開放されていないので、他の手を探しましょう。

尚、何からのパスワードを入れても実行できません。

sudoコマンドを使用すると、癖のあるメッセージが表示される場合があります。「大いなる力には大いなる責任が伴う」とのことです。
sudoコマンドを使用すると、癖のあるメッセージが表示される場合があります

三国志NETの派生は今でも元気に動いてるよ!

今回題材とした、まもなく20周年を迎える歴史あるブラゲー、三国志NET。その派生形は今でも元気に稼働しています。

私自身も長年参加させていただいているサイトも折角なのでリンクしておきます。ご興味があれば是非ご参加ください。

>>秘密三国志NETのトップページはこちら

今回は以上です。どうもありがとうございました。

記事筆者へのお問い合わせ、仕事のご依頼

当社では、IT活用をはじめ、業務効率化やM&A、管理会計など幅広い分野でコンサルティング事業・IT開発事業を行っております。

この記事をご覧になり、もし相談してみたい点などがあれば、ぜひ問い合わせフォームまでご連絡ください。

皆様のご投稿をお待ちしております。

記事筆者へ問い合わせする

※ご相談は無料でお受けいたします。
IT活用経営を実現する - 堺財経電算合同会社