【Python】CGIを作ってConoHa WINGサーバーで動かす実験

プログラミング

どうもです、タドスケです。

このブログはConoHa WINGサーバーをレンタルして置かせてもらっているわけですが、ふと

ブログ以外にも自作のWebプログラム作って置いたら動くんじゃない?

と思いつきました。

そして試しに検索してみたところ、以下の記事を見つけました。

Pythonで書いた自前のCGIをConoHa WINGで動かしてみる

この記事によれば、PythonでCGIプログラムを作ってConoHa WINGのサーバーで実行できるとのこと!

ってなわけで、早速作ってみました。

昔懐かしのお名前入力画面です。

ほぼ記事の通りの手順ですが、以下にまとめておきます。




pythonコードを拡張子「.cgi」で用意する

以下のpythonコードを作成しました。

#!/opt/alt/python36/bin/python3.6
import cgi

# 文字コードをUTF-8にする
import sys
import io
sys.stdout = io.TextIOWrapper(
    sys.stdout.buffer, encoding='utf-8')

# HTTPヘッダーの出力
print("Content-Type: text/html")
print()
# ---- ここまで ----

form = cgi.FieldStorage()
print(f'ようこそ{form["text"].value}さん!')
print('<button type="button" onclick="history.back()">戻る</button>')

1行目でサーバー上にあるpythonのパスを指定しています。
ConoHa WINGサーバーの場合はこうなるらしいです。

次にprintで出力される文字コードをUTF-8にしています。
これをやらないと画面に文字が表示されませんでした。

HTTPヘッダーの部分は、CGIプログラムを作る上でのお決まり処理だそうです。

そしてプログラム本体部分。

cgi.FieldStorage() でフォームの入力データ全体を、form[“text”].value の部分で指定部分の値を取得しています。

htmlを用意する

html側のコードは以下です。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form method="POST" action="cgi-bin/test.cgi">
    あなたのお名前は?<br/>
    <input name="text" cols="20" rows="5"/>
    <input type="submit" />
</form>
</body>
</html>

input name=”text” の部分でcgiに渡すフィールド名を、
formの action=”cgi-bin/test.cgi” の部分で送信先のcgiファイルを指定しています。

あとは送信ボタンを押せばcgi側に入力した名前が送られるという寸法です。

ファイルをアップロードする

ConoHaWINGからファイルマネージャーを開き、適当な場所にhtml, cgiファイルをアップロードします。

一般的にはcgi-bin/ 以下に置くようですが、ConoHaWING的には特に制限は無いそうです。
(その代わりに拡張子を.cgiにする必要があります)

アップ後、cgiファイルを右クリック→Change modeを開き、Permissionを755に変更します。
(他の人が実行できるようにする)

まとめ

以上、ConoHaWINGサーバー上でPython製のCGIプログラムを実行する方法について解説しました。

ファイルの入出力とかも組み合わせたら、昔あったCGIゲームとかも作れるかもですね。

CGI以外にもサーバー上で色々できそうなことがわかったので、他にも試してみたいと思います。

コメント

  1. […] […]

タイトルとURLをコピーしました