Symfoware

Symfowareについての考察blog

Python Bottleフレームワークをサブディレクトリで動かす

Bottleフレームワークとbjoernを触ってみてます。

高速軽量なPython WSGI Server「bjoern」でBottleフレームワークを動かす
Python WSGI Server「bjoern」とNginxの連携


Nginxでアプリケーションを公開してみましたが、他のアプリケーションも同居したいので、
ルートディレクトリじゃなくてサブディレクトリで公開する方法を調べてみました。

FreeBSD 10.0で試してみてます。



bottleのmount



チュートリアルの「PLUGINS AND SUB-APPLICATIONS」を見てみます。
http://bottlepy.org/docs/dev/tutorial.html

mountでサブディレクトリの指定ができる模様。
sample.pyを編集してみました。
「subdir」で動作する想定です。


  1. # -*- coding:utf-8 -*-
  2. import bottle
  3. @bottle.route('/hello/:name')
  4. def index(name='World'):
  5.     return bottle.template('<b>Hello {{name}}</b>!', name=name)
  6. if __name__ == '__main__':
  7.     #ここを追加
  8.     root = bottle.Bottle()
  9.     root.mount('/subdir', bottle.default_app())
  10.     root.run(host='0.0.0.0', port=8080)
  11. else:
  12.     application = bottle.default_app()




# python sample.py

で起動。
ブラウザでhttp://192.168.1.101:8080/hello/testを表示してみるとエラーになります。

388_01.png


http://192.168.1.101:8080/subdir/hello/testで表示されました。
想定通りです。

388_02.png




Nginxの設定



adapter.wsgiを編集します。


  1. # -*- coding:utf-8 -*-
  2. import sys, os
  3. dirpath = os.path.dirname(os.path.abspath(__file__))
  4. sys.path.append(dirpath)
  5. os.chdir(dirpath)
  6. import bjoern
  7. import sample
  8. import pwd
  9. import bottle
  10. # Unixソケットを使ってみる
  11. user_name = 'www'
  12. socket_name = '/tmp/bjoern.sock'
  13. # ユーザーを変更
  14. user = pwd.getpwnam(user_name)
  15. os.seteuid(user.pw_uid)
  16. root = bottle.Bottle()
  17. root.mount('/subdir', sample.application)
  18. # サーバー起動
  19. bjoern.run(root, 'unix:' + socket_name)




bjoernを起動しておきます。


# python adapter.wsgi & echo $! > bjoern.pid




Nginxの設定ファイルを編集。


# vi /usr/local/etc/nginx/nginx.conf




抜粋はこんな感じ。


    upstream backend {
        server unix:/tmp/bjoern.sock;
    }

    server {
        listen     80;
        server_name localhost;

        #charset koi8-r;

        #access_log logs/host.access.log main;
        location / {
            root /usr/local/www/nginx;
            index index.html index.htm;
        }

        location /subdir {
            proxy_pass http://backend;
        }





設定ファイルを再読み込み。


# /usr/local/etc/rc.d/nginx reload




テスト用にrootディレクトリにおいたhtmlファイルを表示。

388_03.png


http://[サーバーIP]/subdir/hello/testを表示すると、
想定通りBottleのアプリケーションが実行されました。

388_04.png


関連記事

テーマ:サーバ - ジャンル:コンピュータ

  1. 2014/03/25(火) 23:26:02|
  2. Python
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<Python + Mercurialのwikiエンジン「Hatta」をFreeBSDで動かす | ホーム | Python WSGI Server「bjoern」とNginxの連携>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1370-93113e65
この記事にトラックバックする(FC2ブログユーザー)