Nginx+uWSGI+Python環境構築

提供: 電脳機巧技師団wiki
移動先: 案内検索

uWSGI(Web Server Gateway Interface)をnginxと一緒に使うかもしれないので、まず仮想マシン上で実際に動かしてみることにした。

  1. python3.4.3のインストール
  2. uwsgiのインストール
  3. uWSGIが実際に動くかどうかテストする

環境構成

  • Vagrant 1.7.4
  • VirtualBox 4.3.34
  • CentOS 6.5
  • Python 3.4.3
  • pip 7.1.2
  • uWSGI2.0.11.2(64bit)

python3.4.3のインストール

インストールする前にyum groupinstall 'Development tools'を実行すること
以下のインストール方法を参考にした

Python 3.4.3のインストール
http://qiita.com/moiwasaki/items/57f0f3382ca580c3b6d5

しかしインストールした後、sudo時にPathが反映されない。で、調べてたら次のような方法で解決した。

CentOS で sudo 時に実行ユーザーのPATHを引き継ぐ
http://qiita.com/ogwmtnr/items/3ec2fab50d069a3cf335

uWSGIのインストール

以下のコマンドを実行
(ここでpcre-develをインストールする理由は以下の余談を参照)

pip install pcre-devel
pip install uwsgi

pipを使わない別の方法をあるが、こっちの方が簡単だったのでこれで行う。
この時、libxml2 headers unavailable.と表示されたら

yum install libxml2-devel

を実行してからyum install uwsgiをすると上手くいくはず(ソース: http://stackoverflow.com/questions/6618575/uwsgi-libxml2-headers-unavailable )
終わったらリンクを張る

ln -s /usr/local/python/bin/uwsgi /usr/local/bin/uwsgi

以下のコマンドを実行してバージョンが表示されたら成功

[[email protected] /]$ uwsgi --version
2.0.11.2

余談

余談だけど、pcre-develをインストールしないとuwsgiを実行したとき、「!!! no internal routing support, rebuild with pcre support !!!」と表示される。まぁ、アクセスする方法はあるんだろうけど、よく分からなかったんで、この警告文でggったらこのページ http://stackoverflow.com/questions/21669354/rebuild-uwsgi-with-pcre-support にたどり着いた。ここではdebian系のLinuxの話になってるけど、Redhat系ではpcre-develをインストールすればいいみたい。

nginxインストールメモ
http://qiita.com/oinume/items/02119ef76b5ca2f04d92

ここでDebian or Ubuntuで必要なものとCentOSで必要なものを比べてみただけなんだけど
で、実際に起動してみたら警告文が消えたから良いんじゃないかなぁ。

uwsgiが実際に動くかどうかテストする

公式サイト: http://uwsgi-docs.readthedocs.org/en/latest/WSGIquickstart.html にあるように以下のコードをコピペして保存する。(ここではhello.pyという名前にした)

def application(env, start_response):
  start_response('200 OK', [('Content-Type','text/html')])
  return [b"Hello World"]

で、実行する。実行方法は以下のページを参考にした。

便利で超強力なWSGIサーバー uWSGI を使ってみよう
http://d.hatena.ne.jp/m-hiyama/20120312/1331513519

uwsgi --http :9090 --wsgi-file hello.pyを実行する。以下ターミナル画面

[[email protected] project]$ uwsgi --http :9090 --wsgi-file hello.py
*** Starting uWSGI 2.0.11.2 (64bit) on [Thu Dec 24 06:09:47 2015] ***
compiled with version: 4.4.7 20120313 (Red Hat 4.4.7-16) on 24 December 2015 03:13:49
os: Linux-2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013
nodename: localhost.localdomain
machine: x86_64
clock source: unix
pcre jit disabled
detected number of CPU cores: 1
current working directory: /usr/src/project
detected binary path: /usr/local/python/bin/uwsgi
*** WARNING: you are running uWSGI without its master process manager ***
your processes number limit is 1024
your memory page size is 4096 bytes
detected max file descriptor number: 1024
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
uWSGI http bound on :9090 fd 4
spawned uWSGI http 1 (pid: 32242)
uwsgi socket 0 bound to TCP address 127.0.0.1:41416 (port auto-assigned) fd 3
Python version: 3.4.3 (default, Dec 23 2015, 09:30:26)  [GCC 4.4.7 20120313 (Red Hat 4.4.7-16)]
*** Python threads support is disabled. You can enable it with --enable-threads ***
Python main interpreter initialized at 0x11a0510
your server socket listen backlog is limited to 100 connections
your mercy for graceful operations on workers is 60 seconds
mapped 72768 bytes (71 KB) for 1 cores
*** Operational MODE: single process ***
WSGI app 0 (mountpoint=) ready in 0 seconds on interpreter 0x11a0510 pid: 32241 (default app)
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI worker 1 (and the only) (pid: 32241, cores: 1)

この後、chromeとかからVagrantfileで設定したipにポート9090を指定してアクセスしたらHello Worldと表示される

資料


スポンサーリンク