LoginSignup
30

More than 5 years have passed since last update.

PythonのBottleを初めて触ってから30分で本番環境にデプロイ

Last updated at Posted at 2016-11-13

開発環境

  • 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をインストールします。

python3.5とpip3.5のインストール
$ 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 もインストールします。

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のインストールです。
これはたった一行で完了します。

bottleのインストール
pip3.5 install bottle

index.py に以下を書き込み、サーバーを立ち上げるだけです。

作業ディレクトリへ移動
$ mkdir api
$ cd api
$ vim index.py
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」にアクセスしてみます。

スクリーンショット 2016-11-13 22.56.23.png

とても簡単に、サーバー構築までできました。
Bottle恐るべしです。

本番環境の構築

先ほどは、開発環境でしたが、Apacheを使って本番環境まで一気に構築していきます。

Apacheの設定を変更後、Pythonとの疎通確認(5分)

Apacheの設定ファイルに追記

$ sudo vim /etc/httpd/conf/httpd.conf
/etc/httpd/conf/httpd.conf
WSGIScriptAlias / /var/www/html/adapter.wsgi
Apacheを再起動させて変更を反映
$ sudo service httpd restart

疎通確認用の adapter.wsgi を作成します。

/var/www/html/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アドレスにアクセスし、確認してみます。

スクリーンショット 2016-11-13 23.29.47.png

うまく行きました(ちょっと感動)。

ApacheとBottleの連携(10分)

本番環境用に adapter.wsgiindex.py を書き換えましょう。

/var/www/html/adapter.wsgi
# 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()
/var/www/html/index.py
# 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 にアクセスすると、以下のように動作していれば完成です。

スクリーンショット 2016-11-13 23.38.42.png

Bottleは非常に簡単に扱うことができ、オススメできるフレームワークだなと思いました。
Djangoはデプロイで非常に苦しむので、小規模のAPIであればBottleがオススメです。

おまけ

フォローお待ちしています!

サービス紹介
「数学→プログラミング→Webアプリケーション」まで一気に学べる機械学習のマンツーマン家庭教師サービス「キカガク」に興味のある方はお気軽にご連絡ください。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
30