【レンタルサーバー】コアサーバーで Python CGI を動かしてみる(前編)

レンタルサーバー
記事内に自動で広告が表示されます

コアサーバーにログインできることがわかったので、Python CGI を試してみました。
最初は順調でしたが、ちょっと苦戦してなんとか動きました。

実施した手順やコマンドなどを記載しておきます。本記事ではエラーが発生したところまでを記載してます。

コアサーバーで Python CGI を動かしてみる

前回の記事でコアサーバーにログインまでできるようになりました。

【コアサーバーv1】コアサーバーv1にTeraTermで入ってWordPressを探索
レンタルサーバーのコアサーバーv1(CORE-A)にTeraTermでログインして仮想サーバの仕組みや、WordPressのディレクトリ構成などを調べてみました。Linux がわかる人向けで通常のブログ作成では不要ですが、知っておくと便利な時もあります。

今回はコアサーバー上で Python CGI を試してみます。

Python CGI とは

Python は最近は主流となってきてるプログラム言語のことで、ライブラリが多くて簡単に追加などできるので、難しいプログラムもライブラリを追加することで簡単に作れたりします。

CGI(Common Gateway Interface)とは、Webでアクセスした時にプログラムが動いて画面表示の内容を作って出力するもので、あらかじめ書いてる記事と違い動的に表示を変えたりできます。

例えば、予約できるHPで予約表を見たりすると、データベースから情報を取りだして予約表の画面を作って表示するとか。

先人の知恵を借りる

検索すると既に実施してる人たちがノウハウを公開しています。
最初はとにかく検索して真似をしてみるのが一番てっとり早いです。

今回はコアサーバーPython CGI を動かしてみたかったので、検索して以下のページを発見しました。まさにビンゴの内容!やってる内容もいい感じなので、まずはこれを試してみます!

CORESERVER で Python の CGI を動かす - Qiita
概要GMOデジロックのレンタルサーバー「コアサーバー」で Python の CGI を動作させる今回...続きを読む

Python の動作や Web 環境の確認

記事ではいきなり public_html 配下で CGI を作ってますが、今回の環境は WordPress が入ってるので、public_html のディレクトリ自体が違ってたりします。

そもそも Python がちゃんと動くかとかも試してみます。

自分はレンタルサーバーにコアサーバーを使ってますが、前回調べた結果、 /virtual/cuzuser/public_html/teqnobreaker.com 配下が Webのホームディレクトリとわかりました。

ただ、この直下でいろいろファイルを作ると面倒そうなので、作業用のディレクトリ(work)を作って、その中で作業をすることにします。

ls -l でファイルやディレクトリのアクセス権限を確認してみるとグループにはアクセス権限が無いという不思議な設定。

よくわからないですが、これに合わせて work ディレクトリも chmod 707 しておきました。

Bash
[cuzuser@xxxx teqnobreaker.com]$ pwd
/virtual/cuzuser/public_html/teqnobreaker.com
[cuzuser@xxxx teqnobreaker.com]$ ls -l
total 110
-rwx---rwx  1 cuzuser hpusers   405 Feb  6  2020 index.php
-rwxr--rwx  1 cuzuser hpusers 19915 Dec 13 04:27 license.txt
-rwxr--rwx  1 cuzuser hpusers 10089 Dec 13 04:27 readme.html
-rwx---rwx  1 cuzuser hpusers  7101 Jul 29 02:20 wp-activate.php
drwx---rwx  9 cuzuser hpusers    98 Dec 13 04:27 wp-admin
-rwx---rwx  1 cuzuser hpusers   351 Feb  6  2020 wp-blog-header.php
-rwxr--rwx  1 cuzuser hpusers  2328 Dec 13 04:27 wp-comments-post.php
-rwx---rwx  1 cuzuser hpusers  3931 Sep  2 13:00 wp-config-sample.php
-rw-rw-rw-  1 cuzuser hpusers  4229 Nov  9 22:31 wp-config.php
drwxr-xrwx 12 cuzuser hpusers    14 Jan 17 01:32 wp-content
-rwxr--rwx  1 cuzuser hpusers  3939 Dec 13 04:27 wp-cron.php
drwx---rwx 25 cuzuser hpusers   223 Dec 13 04:27 wp-includes
-rwx---rwx  1 cuzuser hpusers  2496 Feb  6  2020 wp-links-opml.php
-rwx---rwx  1 cuzuser hpusers  3300 Feb  6  2020 wp-load.php
-rwxr--rwx  1 cuzuser hpusers 49831 Dec 13 04:27 wp-login.php
-rwx---rwx  1 cuzuser hpusers  8509 Apr 14  2020 wp-mail.php
-rwxr--rwx  1 cuzuser hpusers 20975 Dec 13 04:27 wp-settings.php
-rwxr--rwx  1 cuzuser hpusers 31337 Dec 13 04:27 wp-signup.php
-rwxr--rwx  1 cuzuser hpusers  4747 Dec 13 04:27 wp-trackback.php
-rwx---rwx  1 cuzuser hpusers  3236 Jun  9  2020 xmlrpc.php
[cuzuser@xxxx teqnobreaker.com]$
[cuzuser@xxxx teqnobreaker.com]$ mkdir work
[cuzuser@xxxx teqnobreaker.com]$ chmod 707 work
[cuzuser@xxxx teqnobreaker.com]$ cd work/
[cuzuser@xxxx work]$ pwd
/home/cuz/domains/teqnobreaker.com/public_html/work

Python のバージョンを確認してみます。

通常の Python2.7.5Python3 を指定すると 3.6.8 が動くようです。
参考にしたページのソースでは /usr/local/bin/python3 を指定してるので大丈夫そうです。

Bash
[cuzuser@xxxx work]$ python --version
Python 2.7.5
[cuzuser@xxxx work]$ python3 --version
Python 3.6.8
[cuzuser@xxxx work]$ which python3
/usr/local/bin/python3

次に work 配下でちゃんと web が表示されるか確認してみます。
エディタ(vi)で定番の「Hello, World!」を作って表示されるか試してみます。

Bash
[cuzuser@xxxx work]$ vi hello.html
[cuzuser@xxxx work]$ ls -l
total 1
-rw-r--r-- 1 cuzuser hpusers 20 Jan 17 02:28 hello.html
[cuzuser@xxxx work]$ cat hello.html
<p>Hello,World!</p>

それでは、https://teqnobreaker.com/work/hello.html にアクセスしてみます。

出ました!
これで、work 配下でも大丈夫なことが確認できました。

Hello.cgi を試してみる

それでは、参考の記事にあった「hello.cgi」を試してみます。
同様にエディタで hello.cgi を編集します。

テキストでいいのですが、python スクリプトを実行させるのに実行権が必要となるので、chmod +x で実行権を付けてます。

Bash
[cuzuser@xxxx work]$ vi hello.cgi
[cuzuser@xxxx work]$ cat hello.cgi
#!/usr/local/bin/python
print('Content-Type:text/html')
print('')
print('Hello,World!')
[cuzuser@xxxx work]$ ls -l hello.cgi
total 1
-rw-r--r-- 1 cuzuser hpusers 89 Jan 17 02:32 hello.cgi
[cuzuser@xxxx work]$ chmod +x hello.cgi
[cuzuser@xxxx work]$ ls -l hello.cgi
total 1
-rwxr-xr-x 1 cuzuser hpusers 89 Jan 17 02:32 hello.cgi

それでは、https://teqnobreaker.com/work/hello.cgi にアクセスしてみます。

出ました!
あっさりと Python CGI が動くことが確認できました!

CGIの拡張子で .py が使えるように .htaccess の設定をする

次のサンプル message.py は Web 起動時にパラメータを渡して、そのパラメータを出力するというもののようです。

ファイル名が xxx.cgi では無く、xxx.pypython の拡張子になってます。
この場合、.py ファイルでも CGI として動くように Webサーバーに設定が必要です。
参考の記事の最初の方に、~/public_html/.htaccess に以下を追加するように記載があります。 

Bash
AddHandler cgi-script .py

実際に xxx.py だと動かないのか確認してみます。
先ほど作った hello.cgi hello.py にコピーして、https://teqnobreaker.com/work/hello.py にアクセスしてみます。

Bash
[cuzuser@xxxx work]$ pwd
/virtual/cuzuser/public_html/teqnobreaker.com/work
[cuzuser@xxxx work]$ cp hello.cgi hello.py

なるほど、ソースがそのまま表示されてしまいました。

コアサーバーの環境では .htaccess /virtual/cuzuser/public_html/teqnobreaker.com 配下にあるので、このファイルを編集します。

しかし .htaccess を見ると WordPress の設定が入ってるようで、"BEGIN WordPress" から "END WordPress" までには記載をしないようにコメントがありました。

今回は "END WordPress" の後ろに追加しようと思いますが、問題が起きた時に元に戻せるように、.htaccess ファイルのバックアップを取っておきます。

自分のホームディレクトリは /virtual/cuzuser ですが、Linux では ~ と略すことが可能です。
まずはホームディレクトリ配下に bkup ディレクトリを作成して、.htaccess をコピーします。

その後、/virtual/cuzuser/public_html/teqnobreaker.com 配下の .htaccess をエディタで編集しました。

Bash
[cuzuser@xxxx teqnobreaker.com]$ pwd
/virtual/cuzuser/public_html/teqnobreaker.com
[cuzuser@xxxx teqnobreaker.com]$ mkdir ~/bkup
[cuzuser@xxxx teqnobreaker.com]$ cp -p .htaccess ~/bkup
[cuzuser@xxxx teqnobreaker.com]$ vi .htaccess
[cuzuser@xxxx teqnobreaker.com]$ cat .htaccess
# BEGIN WordPress
# "BEGIN WordPress" から "END WordPress" までのディレクティブ (行) は
# 動的に生成され、WordPress フィルターによってのみ修正が可能です。
# これらのマーカー間にあるディレクティブへのいかなる変更も上書きされてしまいます。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
AddHandler cgi-script .py

では、もう一度、https://teqnobreaker.com/work/hello.py にアクセスしてみましょう。

行けました!これで xxx.py でも CGI として動くようになりました。

message.py を試してみる

では、参考にしているページの「message.py」をエディタで作ってみます。

この時、注意が必要なのは日本語が使える設定がされてない「vi」なので日本語が文字化けします。
でも、文字化けしても気にせずコピペで貼り付けて保存すると大丈夫だったりします。
保存した後、cat で中身を確認してちゃんと日本語が表示されれば ok です。

ただ、ソースの編集をしたい場合、文字化けした状態では画面表示がずれてるので正しく編集できません。

ソース編集が必要な場合は、あらかじめ windows 上で日本語のコメント部分を削ったソースを作ってコピペするか、windows 上でファイルを編集して、winscp などのファイル転送ソフトで編集するたびにアップロードするのが良いと思います。

参照ページにある message.py の日本語コメントを抜いたものを載せておきます。
編集したい場合はこちらをコピペして使ってみてください。

これまでのように、vi message.py で以下を貼り付けます。
また、実行権が無いと動かせないので、chmod +x message.py もしておきます。

Python
#!/usr/local/bin/python3
import cgi
import html
import io
import sys
# set encoding
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
# get message parameter
form = cgi.FieldStorage()
message = form.getfirst('message', 'Hello, world.')
# HTTP header
print('Content-Type: text/html; charset=utf-8')
print() # blank line, end of headers
# HTML body
print('<html><body>')
print(f'message: {html.escape(message)}')
print('</body></html>')

パラメータを付けて起動してみて、付けたパラメータが表示されることを確認します。
https://teqnobreaker.com/work/message.py?message=テスト

外部ライブラリ利用サンプル(draw.py)を試してみる

外部ライブラリは難しい処理を簡単にできるように Python に追加できるもので、使いたいライブラリを追加することで様々な関数を追加することができます。

ここでは NumPy という多次元配列の計算ができるようになるライブラリと、多次元配列からグラフ描画ができる Matplotlib というライブラリを追加しています。

まずは、参考にしてるページの通りに numpymatplotlib を入れて、参考のソースを作成して起動してみました。

すると、ついにここで問題が発生しました!

ここから、原因がなかなかわからず苦戦しました。。

最終的にはなんとかなったのですが、ちょっと長くなるので本記事はここまでにして、続きは後編にしようと思います。

【レンタルサーバー】コアサーバで Python CGI を動かしてみる(後編)
前回の記事でコアサーバで Python CGI は簡単に動くことがわかりましたが、外部ライブラリを使用したところ「Internal Server Error」が出るようになりました。 ちょっと苦戦しましたが、なんとか動いたので原因と対策を書いておきます。

コメント

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