zoukankan      html  css  js  c++  java
  • nginx+uwsgi+flask搭建python-web应用程序

    Flask本身就可以直接启动HTTP服务器,但是受限于管理、部署、性能等问题,在生产环境中,我们一般不会使用Flask自身所带的HTTP服务器。

    从现在已有的实践来看,对于Flask,比较好的部署方式是使用uWSGI做WSGI容器,Nginx做前端服务器。这样做的好处在于:

    1. uWSGI性能好,提供的功能也很多,运维方便。
    2. Nginx对于静态文件处理较好,而且默认支持uWSGI协议,在负载均衡和压力控制上都可以很方便的实现。

    现在说一下具体的部署步骤:

    因为本人比较喜欢Ubuntu Server做服务器操作系统,所以这些操作只适于Ubuntu系统。在Ubuntu中我们就应该安装Ubuntu的方式进行部署运维,而不是进行编译安装,通过ubuntu apt源安装部署,不仅在整体风格上符合系统风格,而且提供给配置和运维巨大方便。

    首先更新软件源:

    sudo apt-get update

    安装Nginx:

    sudo apt-get install nginx

    安装uWSGI以及uWSGI对于Python的支持:

    sudo apt-get install uwsgi uwsgi-plugin-python

    安装virtualenv:
    这里是一个个人选择问题,因为众多python包也可以通过apt源安装。
    我个人习惯是,一些python工具通过源安装,比如supervisor,管理和升级都比较方便,而python一些第三方库还是在virtualenv中通过pip安装,像是virtualenv这样的基础工具还是通过源安装。

    sudo apt-get install python-virtualenv

    建立Python环境:

    mkdir -p /var/virenvs
    cd /var/virenvs
    virtualenv myenv

    安装Flask:

    cd myenv
    . bin/activate
    pip install flask

    建议使用pip的freeze和install -r requirement_file进行环境部署。

    假设我们的项目路径在 /var/virenvs/myenv/myproject,这时我们可以通过git或者其他什么方式把程序部署上来。

    给项目目录配置权限,nginx和uwsgi默认是以www-data用户和组来运行:

    chown -R www-data:www-data /var/virenvs/myenv/myproject
    chmod -R 775 /var/virenvs/myenv/myproject

    对于nginx和uwsgi我们可以使用vhost方式进行部署,这样既能保证每个项目使用独立的virtualenv又可以,共用一个uWSGI池,这样在使用、部署和管理上都比较方便。

    vim /etc/nginx/site-available/myproject

    server {
    	listen 80;
    	server_name hostname;
        
    	location /static {
    		alias /var/virenvs/myenv/myproject/static;
    	}
        
    	location / {
    		include uwsgi_params;
    		uwsgi_pass 127.0.0.1:9001;
    		uwsgi_param UWSGI_PYHOME /var/virenvs/myenv;
    		uwsgi_param UWSGI_CHDIR /var/virenvs/myenv/myproject;
    		uwsgi_param UWSGI_MODULE mywebsite;
    		uwsgi_param UWSGI_CALLABLE app;
    	}
        
    	error_page 404 /404.html;
    }
    

    其中mywebsite为项目目录下的mywebsite.py文件,UWSGI_CALLABLE为其中的Flask实例名。

    建立软连接到enabled目录

    ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled/myproject

    uwsgi配置

    vim /etc/uwsgi/apps-available/myuwsgi.ini

    [uwsgi]
    plugins=python
    vhost=true
    socket=127.0.0.1:9001
    

    uwsgi还有很多其他配置项,生成环境中需要好好配置。

    建立软连接到enabled目录

    ln -s /etc/uwsgi/apps-available/myuwsgi.ini /etc/uwsgi/apps-enabled/myuwsgi.ini

    重启服务

    service nginx restart
    service uwsgi restart

    部署完成

     

    nginx有许多配置方式,他的加载过程如下:

    启动nginx服务,他会加载nginx.conf,这个文件会加载/etc/nginx/site-enabled中的配置,这个配置讲相关参数传给uwsgi,uwsgi来管理app 应用

    并将结果返回给nginx服务器,最后以html的形式显示。

    如果出现nginx中upstream错误,则是nginx与uwsgi通信出现问题,看看配置是否有问题 

    如果出现python .egg权限问题,则需要设置python-egg-cache路径:http://blog.csdn.net/watsy/article/details/9665339,这里需要注意的是,第三方包的cache存储地点权限问题

    调试

    应用app的调试主要是看log文件,这里有几个Log文件需要注意:

      nginx:access.log,error.log,主要记录的是web请求的记录以及相关错误

      uwsgi:myuwsgi.log,主要记录的是应用程序内部错误

  • 相关阅读:
    Scrapy 概览笔记
    Python 依赖版本控制 (requirements.txt 文件生成和使用)
    Python 虚拟空间的使用
    macOS 所有版本 JDK 安装指南 (with Homebrew)
    鉴权那些事
    Java 位运算符和 int 类型的实现
    ASP.NET Core 入门教程 5、ASP.NET Core MVC 视图传值入门
    如何做好一次知识或技术分享
    ASP.NET Core 入门教程 4、ASP.NET Core MVC控制器入门
    ASP.NET Core 入门教程 3、ASP.NET Core MVC路由入门
  • 原文地址:https://www.cnblogs.com/hitwhhw09/p/4599420.html
Copyright © 2011-2022 走看看