首页 > 代码库 > Ubuntu下nginx+uwsgi+flask的运行环境搭建

Ubuntu下nginx+uwsgi+flask的运行环境搭建

选择web framwork是个很艰难的事情, 主要分为轻量级和重量级框架. 由于没有搭建网站这种需要, 所以回避SSH, Django这种框架, 而选择一个轻量级框架. 自己也比较青睐python这门语言, 就选择了flask框架, nginx代理服务器享誉盛名, 所以拿来使用咯.

一. 开发环境搭建

采用离线安装方式, ubuntu开发环境(centos等环境类似)

nginx

安装

$ wget http://nginx.org/download/nginx-1.6.0.tar.gz    #仅784k
$ cd nginx-1.6.0.tar.gz
$ tar -zxvf nginx-1.6.0.tar.gz 
$ ./configure
$ make
$ sudo make install

常用命令

启动: sudo /usr/local/nginx/sbin/nginx [-c nginx.conf]
重启: sudo /usr/local/nginx/sbin/nginx -s reload
关闭: sudo /usr/local/nginx/sbin/nginx -s quit

验证安装启动成功

curl localhost显示welcome的话就OK了

常见问题

  1. 端口号被占用:
sudo netstat -tulpn | grep 80
sudo kill -s (PID)

uwsgi

安装

wget http://projects.unbit.it/downloads/uwsgi-2.0.5.1.tar.gz  #752k
sudo python setup.py install

验证成功

/usr/bin/uwsgi -h 出现帮助提示就行了.

flask

安装

wget https://pypi.python.org/packages/source/F/Flask/Flask-0.10.1.tar.gz
sudo python setup.py install

验证成功

flask.py

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

if __name__ == "__main__":
    app.run()

python flask.py, 访问curl 127.0.0.1:5000成功即可

mysql

sudo apt-get install mysql-server, 使用mysql -u root -p保证登陆成功即可.

python mysql组件: sudo apt-get install python-mysqldb

二. nginx和uwsgi配置

nginx本身只能调用静态文件, 它需要依赖网关协议文件来调用脚本. uwsgi是nginx的标准模块, 用于调用其它脚本.

修改nginx的配置文件conf/nginx.conf以指向uwsgi

location / {
    include uwsgi_params;
    uwsgi_pass 127.0.0.1:5000;
    root   html;
    index  index.html index.htm;
}

修改uwsgi文件, 配置脚本文件app_config.xml, 即运行的文件名以及应用名(nginx, uwsgi和app间需要通过socket进行交互)

<uwsgi>
     <pythonpath>/home/chenjiebin/web/flaskdemo</pythonpath>
     <module>flask</module>
     <callable>app</callable>
     <socket>127.0.0.1:5000</socket>
     <master/>
     <processes>4</processes>
     <memory-report/>
</uwsgi>
  • pythonpath表示项目目录
  • module表示项目启动模块,如上例为app.py,这里就为app
  • callable表示flask项目的实例名称,上例代码中app = Flask(name),所以这里为app
  • socket表示和nginx通信的地址和端口,和nginx配置里的uwsgi_pass一致。
  • processes表示开启多少个子进程处理请求。

三. 运行

启动nginx

sudo /usr/local/nginx/sbin/nginx 将默认调用conf/nginx.conf文件

启动uwsgi

前台程序 sudo /usr/local/bin/uwsgi -x $(WD)/app_config.xml

deamon程序: sudo /usr/local/bin/uwsgi -x $(WD)/app_config.xml -d /var/log/uwsgi/uwsgi.log

关闭应用与重部署

  • nginx.conf发生变化: nginx -s reload会重载配置文件
  • python脚本发生变化: 需要重启uwsgi
    • ps aux | grep uwsgisudo kill -s HUP $(PID)

参考资料

1. Centos 6.4下nginx+uwsgi+flask的运行环境搭建