nginx+uwsgi+flask搭建后怎么访问.py文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx+uwsgi+flask搭建后怎么访问.py文件相关的知识,希望对你有一定的参考价值。

参考技术A

一、介绍

最近开发要用一个测试环境,是这样的nginx+uwsgi+flask 的一个结构。下面是一些记录,在Centos 系统上使用Flask 架构部署一个简单的Python应用。然后使用Nginx作为前端反向代理,设置uWSGI应用网关处理web应用程序。

二、条件

1)         环境要求

    Server OS:最小化安装 Centos 6.8

    Nginx :反向代理

    Python2.6~2.7:开发语言

    Flask/uWSGI:框架

    Pip:python包管理工具

    iptables&selinux:开放用到的端口,关闭selinux。

    2)         安装必备的开发工具以及环境

    更新系统:

    [root@hcloud ~]# yum update -y
    [root@hcloud ~]# yum groupinstall "Development tools" -y

    更新完成后,记得重启系统,然后安装工具:

    [root@hcloud ~]# yum install wget vim telnet python-devel zlib-devel openssl-devel bzip-devel -y

    [root@hcloud ~]# yum install zlib-devel bzip2-devel pcre-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel python-devel libxml2  libxml2-devel  python-setuptools  zlib-devel wget openssl-devel pcre pcre-devel sudo gcc make autoconf automake -y

    3)         安装python 包管理工具-pip

    [root@hcloud ~]# wget strap.pypa.io/get-pip.py && python get-pip.py

    或者参考此网站

    4)         安装uWSGI与Flask

    下载软件

    [root@hcloud ~]# mkdir soft
    [root@hcloud ~]# cd soft
    [root@hcloud soft]# wget ackages/0c/1c/44849e293e367a157f1ad863cee02b4b865840543254d8fae3ecdebdbdb9/uwsgi-2.0.12.tar.gz[root@hcloud soft]# wget rg/packages/db/9c/149ba60c47d107f85fe52564133348458f093dd5e6b57a5b60ab9ac517bb/Flask-0.10.1.tar.gz

    如果下载该软件比较慢,可以在/etc/reslov.conf dns中添加一个8.8.8.8 ,很快的哦。

    安装软件(开发要求固定版本,如果不介意版本的话,可以直接使用pip install packge 即可安装,相当于linux中的yum)

    [root@hcloud soft]# tar -xf Flask-0.10.1.tar.gz
    [root@hcloud ~]# cd Flask-0.10.1[root@hcloud Flask-0.10.1]# python setup.py install[root@hcloud soft]# tar -xf uwsgi-2.0.12.tar.gz
    [root@hcloud soft]# cd uwsgi-2.0.12[root@hcloud uwsgi-2.0.12]# python setup.py install

    5)         创建一个测试应用

    创建一个Web应用程序存放的文件夹

    [root@hcloud ~]# mkdir -pv /usr/local/webtest
    [root@hcloud ~]# cd /usr/local/webtest

    创建一个python 脚本,内容如下:

    [root@hcloud webtest]# cat myproject.py
    from flask import Flask
    application = Flask(__name__)

    @application.route("/")
    def hello():
       return "<h1 style='color:blue'>Hello Flask!</h1>"if __name__ == "__main__":
       application.run(host='0.0.0.0')

    创建WSGI入口点文件,名字为:wsgi.py,内容如下

    [root@hcloud webtest]# cat wsgi.py
    from myproject import applicationif __name__ == "__main__":
       application.run()

    6)         配置uWSGI服务器网关服务运行方式,运行端口等。

    上述两个python脚本文件创建完成后,uwsgi命令启动,运行在8000端口上,指定协议http,运行时会出现一些警告,暂时可以忽略,是因为当前是root账户运行的uwsgi,后面从配置文件启动时会配置普通用户nginx即可。

    [root@hcloud webtest]# uwsgi --socket 0.0.0.0:8000 --protocol=http -w wsgi
    验证下,看下监听端口
    [root@hcloud webtest]# netstat -aultnp | grep 8000tcp        0      0 0.0.0.0:8000                0.0.0.0:*                   LISTEN      7181/uwsgi          
    tcp        0      0 192.168.30.58:8000          192.168.30.65:48164         TIME_WAIT   -          

    可以打开浏览器访问测试一下:http://192.168.30.58:8000

    7)         创建uWSGI配置文件

    以.ini格式为uwsgi启动配置文件(还有xml,json,等多种格式),这样就不用在命令行输入一大堆命令了,用uwsgi命令启动,后面可以创建uwsgi启动脚本,加入到系统服务

    在项目的目录中,创建uwsgi.ini:

    [root@hcloud webtest]# cat uwsgi.ini
    [uwsgi]
    uid = nginx
    gid = nginx
    socket = 127.0.0.1:8000  master = truevhost = trueworkers = 8reload-mercy = 10vacuum = truemax-requests = 10000limit-as = 1024buffer-sizi = 3000pidfile = /var/run/uwsgi.pid
    daemonize = /var/log/uwsgi/uwsgi.log  
    chdir = /usr/local/webtest
    module = wsgichmod-socket = 660enable-threads = true

    保存并退出。配置文件参考

    大致的解释下:

    uid 、gid :以哪个用户、组启动服务

    socket:监听的ip及端口

    master: 启动主进程

    workes:服务器启动的进程数

    reload-mercy:平滑的重启

    pidfile :启动时的pid 文件。

    daemonize :启动日志

    module :web应用的入口模块名称

    enable-threads : 启用线程模式

    8)         创建开机系统启动脚本文件,名字为uwsgid。

     uwsgid

    创建完成后,赋予执行权限,加入开机启动

    [root@hcloud ~]# chmod +x /etc/init.d/uwsgid
    [root@hcloud ~]# chkconfig --add uwsgid
    [root@hcloud ~]# chkconfig --level 2345 uwsgid on

    检查下

    [root@hcloud ~]# chkconfig --list uwsgid
    uwsgid             0:off    1:off    2:on    3:on    4:on    5:on    6:off

    启动uwsgid

    [root@hcloud ~]# service uwsgid start
    Starting uwsgi:
    [uWSGI] getting INI configuration from /usr/local/webtest/uwsgi.ini

    验证下监听端口(注:这里我们使用127.0.0.1 作监听,是为了后期在使用时,对外只有nginx可以访问web应用):

    [root@hcloud ~]# netstat -aultnp | grep :8000tcp        0      0 127.0.0.1:8000              0.0.0.0:*                   LISTEN      8945/uwsgi

    9)         安装Nginx配置代理

    先下载安装6.6的epel源

    [root@hcloud ~]# wget oject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm[root@hcloud ~]# rpm -ivh epel-release-6-8.noarch.rpm

    安装nginx

    [root@hcloud ~]# yum install nginx -y

    安装完成后,修改nginx默认配置文件default.conf,修改之前可以先备份下源文件噢。完整内容如下:

    [root@hcloud ~]# cat /etc/nginx/conf.d/default.conf
    server
           listen       80;
           server_name  192.168.30.58;
             
           location /
               include  uwsgi_params;
               uwsgi_pass  127.0.0.1:8000;
               uwsgi_param UWSGI_SCRIPT wsgi;
               uwsgi_param UWSGI_CHDIR /usr/local/webtest;
               index  index.html index.htm;
               client_max_body_size 35m;
           

    以上内容代理了uwsgi的端口,客户端通过访问nginx的80端口,然后nginx在将请求转发到后台flask应用的8000端口上。

    启动nginx

    [root@hcloud ~]# service nginx start
    Starting nginx:                                            [  OK  ]

    在浏览器内测试访问一下nginx:http://192.168.30.58

    每个人都应是守望者,守望我们的心智,我们的理想,以防它在生活中不知不觉地坠落、被操控和被自己遗忘。。。

python服务器环境搭建Flask,uwsgi和nginx

python服务器环境搭建Flask,uwsgi和nginx

【部署系统环境Ubuntu

使用python的Flask框架搭建好网页后台后,便要开始将网站部署到服务器平台了。为了部署python服务器,我选择使用uwsgi和nginx。

使用Nginx和uWSGI来运行Python应用

Nginx

Nginx是高效的Web服务器和反向代理服务器,同时并发高,部署简单,内存消耗小,最重要的是,支持uWSGI的uwsgi协议,可以直接使用,一个简单的uwsgi_pass就可以将动态内容交给uWSGI处理。

uWSGI

至于为什么不直接使用Flask运行程序而是uWSGI,那是因为,Flask都说明了,不要使用它来作为生产环境,那是因为,它说了,不要使用⊙﹏⊙‖∣°
技术分享图片

安装uwsgi和nginx

安装uwsgi

安装uwsgi使用简单的pip命令即可安装

pip install uwsgi

查看uwsgi版本

uwsgi --version

安装Nginx

安装Nginx使用apt-get即可

apt-get install nginx
#如果是使用本机安装测试,由于默认不是最高权限使用以下命令即可:
sudo apt-get install nginx 

配置文件

配置uwsgi

现在服务器环境也搭建好了,那么就要开始配置运行文件。假如此时我将python文件放在/var/www/myapp文件夹中。
配置uwsgi有很多种方式,例如直接使用命令行运行,不过我觉得将参数写在一个文件中,再运行是最好不过的了。【其他的配置方法可以百度或则google】

首先在myapp文件夹中创建一个配置文件"myapp.ini":

[uwsgi]
socket = 127.0.0.1:6001 
;将Flask应用运行在这个端口
master = true  
wsgi-file = app.py 
;后端文件名称
callable = app
;设置在收到请求时,uWSGI加载的模块中哪个变量将被调用,默认是名字为“application”的变量。即是: app = Flask(__name__) 
processes = 4   
threads = 2
daemonize = server.log 
;日志保存文件名称 【位置默认在app.ini 目录下】

配置nginx

/etc/nginx目录下新建文件夹app_nginx,进入app_nginx文件,新建myapp_nginx.conf文件

server {
    listen 80;  #监听服务器的80端口
    server_name xxx.xx; #你的域名,前提是你要将你的域名解析到你的服务器的ip地址
    charset utf-8;
    location / {
        include uwsgi_params;   #添加uwsgi参数
        uwsgi_pass 127.0.0.1:6001; #你的Flask应用运行端口,和上面的对应
    }
}

然后配置修改/etc/nginx/nginx.conf文件
在如图所示位置【图片中倒数第4行】添加

include /etc/nginx/app_nginx/*.conf; #将app_nginx所有配置文件导入

技术分享图片

ps:如果我们要搭建多个Flask应用,只需要再写一个confini就行了

启动

启动uwsgi

/var/www/myapp目录下启动uwsgi:

uwsgi myapp.ini

启动nginx

service nginx start #启动nginx
#或则 service nginx restart 重启nginx

完成

这时候,你在浏览器中输入你的域名,就可以看到一个漂漂亮亮的网页了

技术分享图片







以上是关于nginx+uwsgi+flask搭建后怎么访问.py文件的主要内容,如果未能解决你的问题,请参考以下文章

flask使用工厂函数后怎么用uwsgi启动?

centos 7 nginx+uwsgi+flask 环境搭建

nginx+uwsgi+python+flask环境搭建

centos6.8 搭建nginx+uwsgi+Flask

NGINX+UWSGI+PYTHON+FLASK环境搭建——————学习笔记

centos+python2+flask+nginx+uwsgi环境搭建