ApacheのCGIでSCL版のPythonを利用する方法。
既存で色々入ってるお名前.com VPSのお遊び環境でPython3のCGIを動かすためにちょいちょいいじってみた。
まず基本のCGI設定 httpd.conf
1 2 3 4 5 |
LoadModule cgi_module modules/mod_cgi.so <Directory "cgi directory"> Options ExecCGI FollowSymLinks AddHandler cgi-script .cgi </Directory> |
次にApacheをSCL環境で動かす。
1 |
echo "source scl_source enable rh-python35" >> /etc/sysconfig/httpd |
で、追加のおまじない。
1 2 |
echo "/opt/rh/rh-python35/root/usr/lib64/" >> /etc/ld.so.conf.d/rh-python35.conf ldconfig |
SCLは、環境変数とかをいじって違うバージョンを動かす仕組み。
Apacheが立ち上がる時に、環境変数を書き換えてやるように/etc/sysconfig/httpdに書き足している。 これで立ち上げたApacheはpythonコマンドの向かう先がpython35になっている。
コマンドラインで実行する場合は、scl_sourceすればそのまま使えるけど、Apache上ではLD_LIBRARYとかの動きが違うようで、そのままだとライブラリ不足でエラー表示になるので、ldconfigしてやってライブラリ自体はグローバルに登録。
これでシステムバージョンと異なるscl版PythonでCGIが出来る。
CGI自体はごく普通でOK、Python3系を動かすときの日本語版のまじないはこんな感じ。
1 2 3 4 5 6 7 |
#! /usr/bin/env python # -*- coding: utf-8 -*- import sys import io #python3 sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') print("Content-Type: text/html; charset=UTF-8\n") |
(526)