uWSGI+Nginx部署Flask项目

前言

内部需要每天出一版数据,而每天都需要我手动打包压缩,然后上传到公司内部的文件共享服务器上,然后我再把共享文件的地址分发出去,贼TM的烦,而且作为一个IT人员感觉这种做法也贼TM的傻逼,所以就花了几天时间学习了一下flask,并完成了一个非常非常简单的系统,用来分发数据,下面主要写一下flask项目的部署问题。

环境

  • 服务器环境:Centos
  • Python:2.7

具体安装过程

  • Flask

    Flask是一个使用 Python 编写的轻量级 Web 应用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 。

    先安装virtualenv,这个软件可以将Python环境虚拟出来,在多个工程中使用不同的Python环境,可以很好的隔离各种环境问题
    pip install virtualenv
    安装完成之后,在所需要部署的工程的根目录下(即manage.py所在目录),执行virtualenv venv,即可在当前目录下发现一个venv/目录
    使用source venv/bin/activate命令来启用虚拟环境,启用后你当前的路径名的前面会有一个(venv)
    然后我们就可以在这里安装本项目相关的Python模块了
    安装Flaskpip install flask
    然后就是pip install -r flaskrelated.txt,通过这个清单文件来统一安装所需的依赖

  • uWSGI

    uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。

    执行pip install uwsgi进行安装
    在待部署的工程的根目录下新建一个uwsgi的配置文件uwsgiconfig.ini(uwsgi支持多种配置文件格式,xml,ini,json等)
    配置文件的内容如下:

    [uwsgi]
    
    
    # uwsgi 启动时所使用的地址与端口
    
    socket = 127.0.0.1:8001 
    
    
    # 指向网站目录
    
    chdir = /data/python_web_project/sfa_data_distribution/
    
    
    # python 启动程序文件
    
    wsgi-file = manage.py 
    
    
    # python 程序内用以启动的 application 变量名
    
    callable = app 
    
    
    # 处理器数
    
    processes = 4
    
    
    # 线程数
    
    threads = 2
    
    
    #状态检测地址
    
    stats = 127.0.0.1:9191
    
    
    # 当目标文件夹中有文件内容发生变动,自动重启uwsgi
    
    touch-reload = /data/python_web_project/sfa_data_distribution/app/

    chdir是指向你的工程的根目录的,被网上一个教程坑了(也可能是我自己眼瞎,尴尬尴尬),把这里填写成工程文件所在的目录了(即:/data/python_web_project/),然后执行uwsgi的时候一直报”打开manage.py文件失败”的错。最骚的是touch-reload这个配置,配置这个选项后,当这个选项指向的目录文件有变动时,就会自动重启uwsgi以更新你的flask项目,类似热更。
    最后执行uwsgi uwsgiconfig.ini来启动uwsgi

  • Nginx

    Nginx (“engine x”) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。

    由于我是在centos下部署,所以安装Nginx就直接执行yum install nginx就可以了
    配置Nginx,在centos下使用yum安装的,直接到/etc/nginx/目录下,然后有一个 nginx.conf文件,这个就是当前的配 置文件,修改部分如下:

    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  192.168.14.62;    #此处是你的公网IP,我这里是内部局域网的IP地址
        root         /usr/share/nginx/html;
    
        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;
    
        location / {
                include        uwsgi_params;
    
                uwsgi_pass     127.0.0.1:8001;    #这里要和你的uwsgiconfig.ini配置文件中的socket字段配置一致
    
                uwsgi_param UWSGI_PYHOME /data/python_web_project/sfa_data_distribution/venv;    #工程的虚拟环境目录
    
                uwsgi_param UWSGI_CHDIR  /data/python_web_project/sfa_data_distribution;    #工程的根目录
    
                uwsgi_param UWSGI_SCRIPT manage:app;
        }
    
        error_page 404 /404.html;
            location = /40x.html {
        }
    
        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

    需要我们配置的几个地方,我已经注释出来了,大家可以根据自己的需要,进行修改配置。
    最后启动nginx就可以啦:nginx

    在浏览器里访问以下远程主机试试:
    这里写图片描述

猜你喜欢

转载自blog.csdn.net/u014021893/article/details/72042146