Personal tools
You are here: Home KtJ's Blog
« November 2018 »
Su Mo Tu We Th Fr Sa
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30  
Recent comments
Кухни в Нижнем Новгороде Kuhnimix 2018-12-13
dEUTTnyrxjkBofJ Young 2018-12-11
WQNqLGtbRFlIdDqKnhp Micah 2018-12-11
Спальни в Нижнем Новгороде Bedroommix 2018-12-11
VLkesgUJUXQtW Donny 2018-12-09
 
Document Actions

FreeBSD11+python3.6+Bottleで作り直すメモ(11)-nginxとuWSGIで公開してみる

by ktj posted at 2018-11-14 19:21 last modified 2018-11-17 11:07

FreeBSDのポリシーが変わって2018年10月いっぱいでFreeBSD 10-Releaseは終了したとのことなのでタイトル変更。

これまではBottleが内蔵していたWebサーバで動作確認を行っていたが性能がいまいちなので実運用するなら適当なWSGIサーバを使ってね、とマニュアルにも書かれているので検討してみる。基本的にはh_kabocha氏によるBottle + uWSGI+ Nginx Quick Tutorialのやり方をそのまま使わせて頂いた。ここではFreeBSD環境特有の箇所のみ記載する。

nginx、uwsgi共にpkgでインストール可能。python3.6の場合はuwsgi-py36というパッケージをインストールすればよいようだ。(uwsgiというパッケージもある)。また、FreeBSDの場合は(他のサーバ系パッケージと同様)必要に応じてサーバを動作させるユーザとグループを作ってくれる(nginxについてはもとから用意されていたwww:wwwを利用、uwsgiについてはuwsgi:uwsgiを作成してくれる)。

uwsgiの設定ファイルのデフォルトは/usr/local/etc/rc.d/uwsgiを見る限り/usr/local/etc/uwsgi/uwsgi.iniなのでそこを編集。socketも特にしていてなければ/tmp/uwsgi.sockになるようだ。

まず、Bottleで動かすサイトのソースコードを開き、先頭に下記のコードを追加する。

from bottle import default_app

そして、末尾の

run(host='IPアドレス', port=ポート番号, debug=True, reloader=True)

を、以下のように変更する。

if __name__ == '__main__':
  run(host='IPアドレス', port=ポート番号, debug=True, reloader=True)
else:
  application = default_app()

(2018/11/17追記)正式公開まではバグフィックスの為にソースの先頭にfrom bottle import debugを追加し、application = default_app()の前にdebug(mode=True)を入れてデバッグモードにしておいた方がよさそう。これが無いとpythonコードのエラーがすべて"Internal Server Error"になってしまって原因が特定できない。(追記終わり)

次に、/usr/local/etc/uwsgi/uwsgi.iniを作成する。単純に下記のようにした。

[uwsgi]
chdir = アプリのコードが保存されているディレクトリ
file = アプリのファイル名

続いて、/usr/local/etc/nginx/nginx.confを編集。まず、httpセクションの中に下記を追加する。

upstream _bottle {
    server unix:/tmp/uwsgi.sock;
}

そして、http→server→location / セクションを以下のように変更する。

location / {
    include uwsgi_params;
    uwsgi_pass _bottle;
}

最後に、/etc/rc.confnginx_enable="YES"uwsgi_enable="YES"を追加してuwsgiとnginxを起動すれば完了。

複数のBottleアプリを使いたい場合(例えばコンテンツ表示用のものとコンテンツ編集用のものを別のポートで動かしたい時)は、uWSGIのエンペラーモードを利用する。FreeBSDの場合は/etc/rc.confuwsgi_emperor="YES"を追加する。各アプリのiniファイルは/usr/local/etc/uwsgi/vassals/に移し、socket=/tmp/ソケット名.sockという行を追加する。ソケット名はアプリ毎に違うものを用意する。で、/usr/local/etc/uwsgi/uwsgi.iniは、wapa5pow氏のApacheにかわるwebサーバ: uWSGIパフォーマンスチューニングという記事を参考に以下のようにしてみた(なお、uwsgi自体は、エンペラーモードならuwsgi.iniが無くてもFreeBSDが適当なパラメータを設定してくれる)。また、環境変数LANGを正しく設定していないとSimpleTemplateの起動でこけるのでこれも設定。

[uwsgi]
max-requests = 6000
max-requests-delta = 300
env = LANG=ja_JP.UTF-8

さらに/usr/local/etc/nginx/nginx.confの方はupstreamセクションとserverセクションをソケット毎に用意する。

The URL to Trackback this entry is:
http://www.ktjdragon.com/ktj/ktjs-blog/freebsd11-python3-6-bottle4f5c308a76f4305930e130e2-11-nginx3068uwsgi516c958b30573066307f308b/tbping

Кухни в Нижнем Новгороде

Posted by Kuhnimix at 2018-12-13 02:26
Кухни на заказ Нижний Новгород - http://xn----ttbhac9ao5f.xn--p1ai - нн-кухня.рф

http://xn----ttbhac9ao5f.xn--p1ai - заказать кухню

Powered by Plone CMS, the Open Source Content Management System

This site conforms to the following standards: