5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

FUJITSU その2Advent Calendar 2018

Day 19

AWS EC2で懐かしのcgiゲームを動かす

Last updated at Posted at 2018-12-18

FUJITSU Advent Calendar 2018 その2 の19日目の記事です。
(注意)この記事は個人の見解であり、所属する会社、組織を代表するものではありません。

#はじめに
昔やっていたcgiゲーム(箱庭諸島、Fated Labylinth、etc...)を久しぶりに遊びたくなったので、EC2上に設置してみました。

#AWSアカウントの作成
公式にガイドがあるのでこちらをご覧ください。
EC2はアカウント取得から1年間、月750時間まで無料枠が存在します。(2018/12/19現在)
一ヶ月は24*31=744時間なので、インスタンスを複数生成しなければ無料枠を超えることはないと思います。

#EC2インスタンスの取得
###新規インスタンスの作成
EC2マネジメントコンソールにログインしてください。
左ペインの「インスタンス」から、インスタンスの生成をクリックします。
FireShot Capture 1 - EC2 Management Con_ - https___ap-northeast-1.console.aws.amazon.com_ec2_v2_home.png

無料枠の範囲内でいくつかマシンイメージが選べますが、今回はperlを使いたいので
「Amazon Linux AMI 2018.03.0 (HVM), SSD Volume Type」を選択します。
他のやつを選んでも大丈夫だと思います。
2.png

インスタンスタイプは無料枠の範囲だとt2.microしか選べないのでそれを選択します。

###セキュリティグループの設定
EC2ではインスタンスにセキュリティグループというファイアウォールのようなものを設定できます。
今回は公式が提供しているWebサーバーのリファレンスに従って設定します。
httpsは使わないと思いますが、この設定で作っておけば今後webサーバ-を作るときに流用できます。
分かりやすい名前を付けておきましょう。
3.png

設定が終わったら右下の「確認と作成」を押してください。

###キーペアの生成
SSH接続に使うキーペアを生成します。
適当な名前をつけてどこか安全な場所に保存してください。
4.png

#インスタンスへの接続
適当なSSHクライアントから先ほど作ったインスタンスへアクセスします。
今回はteratermを使用しました。
EC2のマネジメントコンソールからインスタンスのIPv4パブリックIPを確認して、SSHクライアントから接続してください。
5.png

ユーザー名の入力を求められるので、「ec2-user」
パスワードは空欄で大丈夫です。
「RSA/DSA/ECDSA/ED25519鍵を使う」を選んで、さきほど生成した.pemファイルを選択します。
ファイルタイプを「すべてのファイル」にしないと.pemファイルが表示されないので注意してください。
5.png

この画面が表示されたらログイン成功です。
とりあえずsudo yum updateでパッケージを最新にしておきましょう。
6.png

#Apacheの導入
以下のコマンドを入力してください。
逐一sudoをつけるのが面倒なので、sudo suでrootに入ります。

sudo su
yum -y install httpd
service httpd start
chkconfig httpd on

chkconfig httpd onしておくと、インスタンス起動時に自動でapacheが起動します。
ブラウザでインスタンスのパブリックIPかパブリックDNSにアクセスすれば、apacheのテストページが表示されるはずです。
6.png

#cgiゲームの設置
###cgiゲームの取得・設置
今回は「箱庭諸島2」を設置してみます。
箱庭諸島の保管庫から「箱庭諸島2スクリプト」と「jcode.pl」をDLし、適当なフォルダに保存します。
拡張子が.txtになっているので、hako-readme.txt以外は.cgiに変更してください。

DLが終わったらフォルダをzipに圧縮してEC2上に転送します。
scpコマンドを使うのが一般的ですが、teratermなら「ファイル」→「SSH SCP」で転送できます。
Fromを圧縮ファイルのパス、Toを今回は/home/ec2-user/に設定してsendします。
7.png

転送したファイルをapacheのcgi-binディレクトリにコピーして解凍します。


cd /var/www/cgi-bin
cp /home/ec2-user/ファイル名.zip .
unzip ファイル名.zip
cd ファイル名

###perlパスの変更
cgiファイル内のperlのパスを正しく設定する必要があります。
perlのパスはwhich perlで確認できます。
おそらく/usr/bin/perlになってると思うので、必要ならcgiファイルの先頭行を書き換えます。
文字化けしている場合は:e ++enc=euc-jpで文字コードをeuc-jpにすると直る場合が多いです。
7.png

###パーミッションの変更
基本的に全部777にすれば動くユーザーが表示だけできればいいものは644に、実行する必要があるものは755に設定します。
今回はhako-readme.txtに基づいて以下のように設定しました。

 cgi実行可能なディレクトリ(755)/
     |
     |-- hako-main.cgi   (755)
     |-- hako-mente.cgi  (755)
     |-- hako-top.cgi    (644)
     |-- hako-turn.cgi   (644)
     |-- hako-map.cgi    (644)
     |-- jcode.pl        (644) ※必要な場合のみ
     |-- data         (生成される)
     |-- data.bak0~3 (生成される)

#httpd.confの設定
最後にこのゲームにアクセスするためのURLを設定します。
apacheの設定ファイルは/etc/httpd/conf/httpd.confです。
お好きなエディタで開いて以下のように設定してください。

httpd.conf
ScriptAlias /ゲームの名前/ "/var/www/cgi-bin/ディレクトリ名"
<Directory "/var/www/cgi-bin">
    AllowOverride None
    Options ExecCGI
    Order allow,deny
    Allow from all
</Directory>

これでhttp://パブリックIP/ゲームの名前/○○○.cgiにアクセスすればcgiが実行されるはずです。
8.png

#おわりに
うまく動きましたでしょうか?
パーミッションの設定やフォルダ構造は設置するゲームによって異なるので、いろいろと調べてみてください。

何か間違っている点などありましたらコメント欄で教えていただけると幸いです。

#参考
AWS EC2でWebサーバーを構築してみる
Apache:CGIの利用設定をする

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?