以前、「配牌からアガれるかアガれないか予測する」を公開しました、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ユーザーで進めました。
このあたりはちゃんと調査しないと。
CentOS 7にはPython 2.7がデフォルトで入っているようですが、ローカルでは3系なので、3.6をインストールします。
こちらの記事を参考にさせていただきました。
Python 3 を CentOS 7 に yum でインストールする手順
IUS Community Project という、最新のRPMパッケージを提供してくれる団体があるようなので、そちらからPython 3.6のyumリポジトリを追加させていただきます。
$ yum install -y https://centos7.iuscommunity.org/ius-release.rpm
Python 3.6を検索すると、ちゃんと見つかることが分かります。
$ yum search python36
$ yum install -y python36u python36u-libs python36u-devel python36u-pip
これで、Pythonがインストールされたので、バージョン確認しておきます。
ちなみに、オプションの`-V`は大文字です。
$ python3.6 -V Python 3.6.1
このままでも良いのですが、デフォルトのpython
コマンドには2系のシンボリックリンクが貼られているので、こちらを3系に切り替えます。
$ ln -s /bin/python3.6 /bin/python3 $ unlink /bin/python $ ln -s /bin/python3 /bin/python
これでpython
コマンドに3系が紐付きました。
$ python -V Python 3.6.1
同様にして、pip
コマンドのリンクも変えておきます。
$ ln -s /bin/pip3.6 /bin/pip $ pip -V pip 9.0.1 from /usr/lib/python3.6/site-packages (python 3.6)
どうやらyum
関連のファイルはPython2系で動いているようです。
そして、先ほどpython
コマンドを3系に紐付けたので、`yum`でコケるようになります。
これを回避するために、下記のファイルを修正しておきます。
/bin/yum
/usr/libexec/urlgrabber-ext-down
どこを修正するかというと、1行目の`#! /usr/bin/python`です。
こちらを下記のように2系で修正します。
お使いの環境によってはマイナーナンバーが違うかもしれません。
(こちらのサイトを参考にさせていただきました。)
#! /usr/bin/python2.7
$ yum -y install httpd
Apacheを起動させて、表示確認をしておきます。
$ systemctl start httpd
自動起動設定もしておきます。
$ systemctl enable httpd
WSGI(Web Server Gateway Interface)はWebアプリケーションからPythonを動かすインターフェースのことです。
What is WSGI?
こちらとApacheを連携させます。
こちらのサイトを参考にさせていただきました。
ApacheでPythonを動かしてみた(bottle利用)
`mod_wsgi`がApacheでPythonを動かすために必要なモジュールです。
$ 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
`/etc/httpd/conf/httpd.conf`に下記を追記し、Apacheを再起動します。
WSGIScriptAlias / /var/www/html/adapter.wsgi
$ systemctl restart httpd
テスト用に「Hello World!」を出力するwsgiファイルを作成します。
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!」が出力されれば成功です。
軽量FWで有名なbottleを使用したいと思います。
bottleはファイル1つのみですので、`wget`で取得してしまいます。
$ cd /var/www/html $ wget http://bottlepy.org/bottle.py
先ほど作成した`adapter.wsgi`を以下に変更します。
# -*- 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()
テスト用のPythonスクリプトを作成します。
# -*- 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
周辺でかなり詰まりました。
今回は、テスト表示のみでしたが、実際にファイルを作成した場合にまた記事を書くことになりそうです。
本日はこのあたりで!