🌸

Apache CGI/Pythonを動かしたときの備忘録

2025/02/11に公開

Apache CGI/Pythonを動かしたときの備忘録です。

きっかけ

レンタルサーバー上にCGI/perlでWebサイトを構築してあり、そろそろperlを卒業し(PHPはすっ飛ばして)pythonに置き換えたいなと思ったのがきっかけです。

対象サーバー

レンタルサーバーは、GMOのVALUEDOMAINで採用可能なCORESERVERを使っています。CORESERVERのマニュアルには、断片的な情報しかありませんので、ここで備忘録を書いた次第です。サーバーはv1です。(v2は仕様が違うみたいですが、試していません。)v1のプランは、CORE-mini、CORE-Aなどがありますが、v1であればpython動作環境は同じです。他社のレンタルサーバーでも似たようなものかもしれません。

前提

通常の静的HTML表示ができていること。具体的には、

  1. CORESERVERの設定画面で、”サイト”を作成済みであること。
  2. FTPによって、ファイルやフォルダをアップロードできること。
  3. サーバー側ファイルのパーミッションを変更できること。
  4. ブラウザで表示できること。

ゴール(pythonソースによるHTML表示)

用意するもの

ファイル2つ。

  1. .htaccess(パーミッションは644にする)
  2. 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 ~]$

関連リンク

https://www.value-domain.com/
https://www.coreserver.jp/

Discussion