はじめに
以前、「配牌からアガれるかアガれないか予測する」を公開しました、tonnyです。
最近はもう少しスケールダウンさせて、何切る問題でディープラーニングを利用してみようと思っています。
データを収集するために、Webで公開してみようと思い、今回ブログ記事にまとめさせていただきます。
(以前はherokuで公開していたのですが、無料だと制約が大きかったので。。。)
環境
・CentOS | 7.3.1611 |
・Python | 3.6.1 |
・Apache | 2.4.6 |
・bottle | 0.13-dev |
サーバーの立ち上げ
私のお試しサーバーであるConohaちゃんで構築しようと思います。
ユーザー作成などは以前の記事でまとめましたので、そちらをご参考ください。
Conohaのサーバーを借りて、CentOS+MySQL+nginxの環境を作ってみた。
[追記]
rootユーザーでPythonなどをインストールしないと、
mod_wsgi
絡みでエラーが起こるようなので、rootユーザーで進めました。
このあたりはちゃんと調査しないと。
Pythonのインストール
CentOS 7にはPython 2.7がデフォルトで入っているようですが、ローカルでは3系なので、3.6をインストールします。
こちらの記事を参考にさせていただきました。
Python 3 を CentOS 7 に yum でインストールする手順
IUS Community Project の yum リポジトリ
IUS Community Project という、最新のRPMパッケージを提供してくれる団体があるようなので、そちらからPython 3.6のyumリポジトリを追加させていただきます。
1 | $ yum install -y https://centos7.iuscommunity.org/ius-release.rpm |
Python 3.6を検索すると、ちゃんと見つかることが分かります。
1 | $ yum search python36 |
インストール
1 | $ yum install -y python36u python36u-libs python36u-devel python36u-pip |
これで、Pythonがインストールされたので、バージョン確認しておきます。
ちなみに、オプションの
-V
は大文字です。
1 2 | $ python3.6 -V Python 3.6.1 |
このままでも良いのですが、デフォルトの
python
コマンドには2系のシンボリックリンクが貼られているので、こちらを3系に切り替えます。
1 2 3 | $ ln -s /bin/python3.6 /bin/python3 $ unlink /bin/python $ ln -s /bin/python3 /bin/python |
これで
python
コマンドに3系が紐付きました。
1 2 | $ python -V Python 3.6.1 |
同様にして、
pip
コマンドのリンクも変えておきます。
1 2 3 | $ ln -s /bin/pip3.6 /bin/pip $ pip -V pip 9.0.1 from /usr/lib/python3.6/site-packages (python 3.6) |
Apacheのインストール
yumの修正
どうやら
yum
関連のファイルはPython2系で動いているようです。
そして、先ほど
python
コマンドを3系に紐付けたので、
yum
でコケるようになります。
これを回避するために、下記のファイルを修正しておきます。
-
/bin/yum
-
/usr/libexec/urlgrabber-ext-down
どこを修正するかというと、1行目の
#! /usr/bin/python
です。
こちらを下記のように2系で修正します。
お使いの環境によってはマイナーナンバーが違うかもしれません。
(こちらのサイトを参考にさせていただきました。)
1 | #! /usr/bin/python2.7 |
Apacheのインストール
1 | $ yum -y install httpd |
Apacheを起動させて、表示確認をしておきます。
1 | $ systemctl start httpd |
自動起動設定もしておきます。
1 | $ systemctl enable httpd |
WSGIを使用してPythonを動かす
WSGI(Web Server Gateway Interface)はWebアプリケーションからPythonを動かすインターフェースのことです。
What is WSGI?
こちらとApacheを連携させます。
こちらのサイトを参考にさせていただきました。
ApacheでPythonを動かしてみた(bottle利用)
各種インストール
mod_wsgi
がApacheでPythonを動かすために必要なモジュールです。
1 2 3 | $ yum install -y zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel $ yum install -y httpd-devel python-devel gcc $ yum install -y mod_wsgi |
httpd.conf に追記
/etc/httpd/conf/httpd.conf
に下記を追記し、Apacheを再起動します。
1 | WSGIScriptAlias / /var/www/html/adapter.wsgi |
1 | $ systemctl restart httpd |
adapter.wsgi を作成
テスト用に「Hello World!」を出力するwsgiファイルを作成します。
1 2 3 4 5 6 7 | def application(environ,start_response): status = '200 OK' output = 'Hello World!' response_header = [('Content-type','text/plain'), ('Content-Length',str(len(output)))] start_response(status,response_header) return [output] |
これで、ブラウザに再度アクセスして「Hello World!」が出力されれば成功です。
bottleとApacheの連携
軽量FWで有名なbottleを使用したいと思います。
bottleのソースファイルを取得
bottleはファイル1つのみですので、
wget
で取得してしまいます。
1 2 | $ cd /var/www/html $ wget http://bottlepy.org/bottle.py |
adapter.wsgiの修正
先ほど作成した
adapter.wsgi
を以下に変更します。
1 2 3 4 5 6 7 8 | # -*- coding:utf-8 -*- import sys, os dirpath = os.path.dirname(os.path.abspath(__file__)) sys.path.append(dirpath) os.chdir(dirpath) import bottle import index application = bottle.default_app() |
index.pyの作成
テスト用のPythonスクリプトを作成します。
1 2 3 4 5 6 7 8 9 10 | # -*- coding:utf-8 -*- from bottle import route, run, template from bottle import TEMPLATE_PATH @route('/') def index(): return "Hello from bottle" if __name__ == '__main__': run(host='<ドメイン>', port=8080, debug=True, reloader=True) |
これで、「Hello from bottle」が表示されれば、
index.py
が実行されていることが分かります。
さいごに
mod_wsgi
周辺でかなり詰まりました。
今回は、テスト表示のみでしたが、実際にファイルを作成した場合にまた記事を書くことになりそうです。
本日はこのあたりで!