CentOS7のApacheにてPythonを動かす

前回はCentOS7にPython3のインストールと実行をしました。
この状態でPythonを書く事はできますが、実際にWebアプリを作成するとかとなるとApacheやnginxと連携が必要になってきます。

Pythonの機能にWebサーバーの機能もあるみたいですが、それは今回使いません。

Apache2.4系をインストール

今回はCentOS7の標準のApache2.4.6をインストールしたいと思います。
※作業はrootで行います

yum install httpd

インストールできたらOKです。設定ファイルを少し変えるのでまだ起動はしません

confファイルを編集

confファイル(設定ファイル)を編集したいと思います。今回設定するのは、ApacheはデフォルトでPythonを使う事ができないので、CGIとしてPythonを使う設定をします

設定内容
・今回用意するファイルはsample.py
・http://IPアドレス/cgi-bin/sample.pyで表示
・内容は「hellow world」

難しい話は抜きにして、実際にやってみたいと思います

vi /etc/httpd/conf/httpd.conf

<IfModule alias_module>
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" #コメントアウトされていたら外す。なければ追記
</IfModule>
<Directory "/var/www/cgi-bin">
    AllowOverride None
    Options ExecCGI
    Require all granted
    AddHandler cgi-script .py .pyc #追記する。.py拡張子をcgiとして動かすよって意味
</Dicrectory>

終わりました。

Apacheを起動

設定が終わったので以下のコマンドでApacheを起動します

[root@localhost /]# systemctl start httpd

これでOKです。起動しているか不安になったら以下のコマンドで確認します

[root@localhost /]# systemctl status httpd
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: active (running) since 金 2018-05-18 15:06:02 JST; 1s ago
     Docs: man:httpd.service(8)
 Main PID: 13844 (httpd)
   Status: "Processing requests..."
    Tasks: 47
   CGroup: /system.slice/httpd.service
           ├─13844 /usr/sbin/httpd -DFOREGROUND
           ├─13849 /usr/sbin/httpd -DFOREGROUND
           ├─13850 /usr/sbin/httpd -DFOREGROUND
           ├─13851 /usr/sbin/httpd -DFOREGROUND
           ├─13852 /usr/sbin/httpd -DFOREGROUND
           └─13857 /usr/sbin/httpd -DFOREGROUND

 518 15:06:02 localhost.localdomain systemd[1]: Starting The Apache HTTP Server...
 518 15:06:02 localhost.localdomain httpd[13844]: AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message
 518 15:06:02 localhost.localdomain systemd[1]: Started The Apache HTTP Server.
Hint: Some lines were ellipsized, use -l to show in full.

これで起動確認がとれました。

SELinuxの無効化

# getenforce
Disabledn

なのを確認してください。もし↑の状態でない場合は有効化されているので以下の事をして無効化してください。

vi /etc/selinux/config
SELINUX=disabled

その後rebootコマンドで再起動してください。ここより先はSELinuxが無効化された前提で書いております。

# vi /var/www/cgi-bin/sample.py

#!/usr/local/src/pyenv/shims/python

print("Content-Type text/html")
print("")
print("<!DOCTYPE html>")
print("<html>")
print("<head>")
print("    <metacharset='utf-8'>")
print("    <title>SAMPLE</title>")
print("</head>")
print("<body>")
print("    <h1>Hello, world!</h1>")
print("</body>")
print("</html>")

として保存します。配置したらパーミッションを変えます

# chmod 755 /var/www/cgi-bin/sample.py

これで完了です。http://IPアドレス/cgi-bin/sample.pyでアクセスしてみてください

もし500番エラーがでたら

tail /var/log/httpd/error_logでエラーログを見ます。

500エラーがでたら確認する点

もし500エラーがでたら、confファイルを見て確認も大事です。ちなみに、僕がエラー出たときは以下の様な書き方をしていました

#coding:utf-8
#!/usr/local/src/pyenv/shims/python

print("Content-Type text/html")
print("")
print("<!DOCTYPE html>")
print("<html>")
print("<head>")
print("    <metacharset='utf-8'>")
print("    <title>SAMPLE</title>")
print("</head>")
print("<body>")
print("    <h1>Hello, world!</h1>")
print("</body>")
print("</html>")

違いは1番上の#coding:utf-8になります。コマンドでPython実行するときに、この文字コードがないと日本語表示できないため入力していました。これをいれた状態でブラウザで表示するとエラーとなりました。
もし僕と同じような書き方をしていた場合は、phthonファイルを見直してみるのも大事です。

実際に表示してみた

というわけでlogwにサンプルファイルを載せておきました
https://www.logw.jp/cgi-bin/sample.py

アクセスできると思います。

お役に立ちましたか?

投げ銭をいただけるともっと頑張れます!
・note
・仮想通貨(bitflyer)
のどちらでも構いません
ビットコインアドレスは以下になります
3LHnADwZwUbic2L45EnVJEykiG6KfbqrwS

この記事が気に入ったらサポートをしてみませんか?