🌸
Apache CGI/Pythonを動かしたときの備忘録
Apache CGI/Pythonを動かしたときの備忘録です。
きっかけ
レンタルサーバー上にCGI/perlでWebサイトを構築してあり、そろそろperlを卒業し(PHPはすっ飛ばして)pythonに置き換えたいなと思ったのがきっかけです。
対象サーバー
レンタルサーバーは、GMOのVALUEDOMAINで採用可能なCORESERVERを使っています。CORESERVERのマニュアルには、断片的な情報しかありませんので、ここで備忘録を書いた次第です。サーバーはv1です。(v2は仕様が違うみたいですが、試していません。)v1のプランは、CORE-mini、CORE-Aなどがありますが、v1であればpython動作環境は同じです。他社のレンタルサーバーでも似たようなものかもしれません。
前提
通常の静的HTML表示ができていること。具体的には、
- CORESERVERの設定画面で、”サイト”を作成済みであること。
- FTPによって、ファイルやフォルダをアップロードできること。
- サーバー側ファイルのパーミッションを変更できること。
- ブラウザで表示できること。
ゴール(pythonソースによるHTML表示)
用意するもの
ファイル2つ。
- .htaccess(パーミッションは644にする)
- test.cgi(パーミッションは705または755にする)644では500エラーとなります。
.htaccess
Options +ExecCGI
AddHandler cgi-script .py
test.cgi
#!/usr/bin/env python3
import cgitb
import datetime
# エラーをブラウザに表示するための設定
cgitb.enable()
todate = datetime.date.today()
def print_abc():
print("<br>this is ABC.<br>")
# HTTPヘッダーの出力
print("Content-Type: text/html; charset=utf-8")
print() # ヘッダーと本文の間に空行が必要
# HTML本文の出力・・・1
print(f"""
<!DOCTYPE html>
<html>
<head>
<title>Hello World</title>
</head>
<body>
""")
# HTML本文の出力・・・2
print_abc()
# HTML本文の出力・・・3
print(f"""
<h1>Hello World!</h1>
{todate}
</body>
</html>
""")
pythonバージョン
CORESERVERのマニュアルには、python3に対応のようなことが書いてありますが、ちゃんと確認したら、3.6.8がインストールされていました(2025/2/11時点)。
sshでログイン時のコマンド
Last login: Mon Feb 10 19:41:53 2025 from xxx.xxx.xxx.xxx
[ravememy@m1001 ~]$ python --version
Python 3.6.8
[ravememy@m1001 ~]$
関連リンク
Discussion