開発環境
- OS:CentOS release 6.8
- Apache:2.2.15 (Unix)
- Python 3.5.2
- mod_wsgi 4.5.6
環境構築(10分)
ここからはサーバー上で作業していきます。
はじめに、CentOSで必要なパッケージをインストールします。
$ sudo yum groupinstall "development tools"
$ sudo yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel
$ sudo yum install httpd-devel python-devel
そして、python3.5系ととパッケージ管理ツールのpipをインストールします。
$ sudo su # rootで操作していきます
$ cd /usr/local/src
$ wget https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz
$ tar zxvf Python-3.5.2.tgz
$ cd Python-3.5.2
$ ./configure --enable-shared
$ make && make altinstall
$ ln -s /usr/local/bin/python3.5 /usr/bin/python3
$ ln -s /usr/local/lib/libpython3.5m.so.1.0 /lib64/
$ python3.5 --version # 最後にバージョンの確認ができればpythonのインストール完了
Python 3.5.2
# 同時にpip3.5もインストールされるので、シンボリックリンクを貼る
$ ln -s /usr/local/bin/pip3.5 /usr/bin/pip3.5
$ pip3.5 --version
pip 8.1.1 from /usr/local/lib/python3.5/site-packages (python 3.5)
本番環境にて、Apacheと連携させるために必要な mod_wsgi もインストールします。
$ cd /usr/local/src
$ wget https://github.com/GrahamDumpleton/mod_wsgi/archive/4.5.6.tar.gz
$ tar zxvf 4.5.6.tar.gz
$ cd mod_wsgi-4.5.6
$ ./configure --with-apxs=/usr/sbin/apxs --with-python=/usr/local/bin/python3
$ make && make install
$ chmod 755 /etc/httpd/modules/mod_wsgi.so
開発環境で試してみる(5分)
Bottleがいかに速く開発環境を立ち上げられるかお見せします。
まず、Bottleのインストールです。
これはたった一行で完了します。
pip3.5 install bottle
index.py
に以下を書き込み、サーバーを立ち上げるだけです。
$ mkdir api
$ cd api
$ vim index.py
from bottle import route, run, template
@route('/<name>')
def index(name):
return template('<b>Hello {{name}}</b>!', name=name)
run(host='example.com', port=8000)
example.com の部分はお持ちのドメインもしくは、IPアドレスをお使い下さい。
※ 8000番ポートが空いている必要があります。
pythonのファイルを実行することで、サーバーが起動できます。
$ python3.5 index.py
Bottle v0.12.10 server starting up (using WSGIRefServer())...
Listening on http://example.com:8000/
Hit Ctrl-C to quit.
ここで、「http://example.com:8000/ryosuke」にアクセスしてみます。
とても簡単に、サーバー構築までできました。
Bottle恐るべしです。
本番環境の構築
先ほどは、開発環境でしたが、Apacheを使って本番環境まで一気に構築していきます。
Apacheの設定を変更後、Pythonとの疎通確認(5分)
Apacheの設定ファイルに追記
$ sudo vim /etc/httpd/conf/httpd.conf
WSGIScriptAlias / /var/www/html/adapter.wsgi
$ sudo service httpd restart
疎通確認用の adapter.wsgi
を作成します。
def application(environ,start_response):
status = '200 OK'
output = b'Hello World!'
response_header = [('Content-type','text/plain'),
('Content-Length',str(len(output)))]
start_response(status,response_header)
return [output]
ApacheのWebサーバーが読めるように、権限を変更していきます。
$ chmod 755 adapter.wsgi
これで、IPアドレスにアクセスし、確認してみます。
うまく行きました(ちょっと感動)。
ApacheとBottleの連携(10分)
本番環境用に adapter.wsgi
と index.py
を書き換えましょう。
# coding: utf-8
import sys, os
import bottle
dirpath = os.path.dirname(os.path.abspath(__file__))
sys.path.append(dirpath)
os.chdir(dirpath)
import index
application = bottle.default_app()
# coding: utf-8
from bottle import route, run, template
from bottle import TEMPLATE_PATH
@route('/')
def index():
return "Hello World! Bottle and Apache!"
run(host='example.com', port=80)
アクセスするディレクトリごと権限を変更しておきます。
$ chmod -R 755 /var/www/html
これで、http://example.com にアクセスすると、以下のように動作していれば完成です。
Bottleは非常に簡単に扱うことができ、オススメできるフレームワークだなと思いました。
Djangoはデプロイで非常に苦しむので、小規模のAPIであればBottleがオススメです。
おまけ
フォローお待ちしています!
- Qiita: Carat 吉崎
- twitter:@carat_yoshizaki
- はてなブログ:Carat COOのブログ
- ホームページ:Carat
サービス紹介
「数学→プログラミング→Webアプリケーション」まで一気に学べる機械学習のマンツーマン家庭教師サービス「キカガク」に興味のある方はお気軽にご連絡ください。