美文网首页
centos服务器uWSGI 和 Nginx 部署 Flask

centos服务器uWSGI 和 Nginx 部署 Flask

作者: 静默加载 | 来源:发表于2018-08-10 17:30 被阅读139次

    前言

    前段时间手贱买了几个月的腾讯云服务器。我一个做移动端的买国内服务器干啥,又不能搭梯子。最后想用python爬写数据写几个接口用app玩玩试试看看。

    可惜自己只用过servelet,python的web框架完全不了解。网上找了找说Flask做这种移动端的服务框架挺简单的,本地写个Demo跑了一下感觉的确很方便。

    网上有很多关于【Ubuntu上uWSGI 和 Nginx 部署 Flask】的文章,有很多都讲的很错,但是为什么在我服务器上相同的部署就不能成功呢?

    于是乎载膝盖中了很多箭的情况下,就有了这一次用uWSGI和Nginx部署Flask的爬坑之旅。

    概念

    WSGIWeb Server Gateway Interface)是一个 Python 协议,定义了应用程序(我们写的软件)如何与 Web 服务器(如 Nginx)通信,WSGI 只是一个接口。而 uWSGI 是一个支持多种语言的服务器容器,使用 WSGI 定义的标准实现与多种 Web 服务器的通信,并将 Web 服务器发来的请求“翻译”成应用程序所能理解形式。

    Nginx(发音同engine x)是一个异步框架的 Web服务器,也可以用作反向代理负载平衡器HTTP缓存

    没有Nginx其实也能在centos上部署Flask项目,因为我自己的Flask项目并没有多少调用量。只不过,我就想用Nginx。。。

    部署

    python

    Centos的python2和3,pip2和3安装

    Flask 和 uwsgi:

    pip install uwsgi flask
    

    创建应用

    /root/PythonWorkSpace/myproject/myproject.py

    # -*- coding: utf-8 -*-
    from flask import Flask
    
    app = Flask(__name__)
    
    
    @app.route('/')
    def hello_world():
        return 'Hello World!'
    
    
    @app.route('/index')
    def hello_world2():
        return '你好世界!'
    
    
    if __name__ == '__main__':
        app.run(host='0.0.0.0')
    

    myproject.py 同时也可以作为启动文件

    运行python myproject.py,访问http://server_domain_or_IP:5000将会看到"Hello World!"

    uwsgi

    首先确保你安装了 uwsgi,然后运行:

    uwsgi --socket 0.0.0.0:5000 --protocol=http -w myproject:app
    

    protocol说明使用http协议,-w指明了要启动的模块,myproject就是项目启动文件 myproject.py去掉扩展名,appmyproject.py 文件中的变量 app,即 Falsk 实例。然后访问 http://server_domain_or_IP:5000,同样会看到上图。说明 uwsgi可以正常运行。

    但是这样的话每次都从命令行启动太麻烦,可以在 ~/myproject/目录下创建一个配置文件 myproject.ini

    [uwsgi]
    # web应用的入口模块名称
    module = myproject:app
    # 启动主进程
    master = true
    # 说明要启动5个子进程处理请求
    processes = 3
    # 程序内启用的application变量名
    callable = app
    # flask程序的启动文件,通常在本地是通过运行
    wsgi-file = myproject.py
    # 项目目录
    chdir = /root/PythonWorkSpace/myproject
    # 启动程序时所使用的ip和端口号
    socket = 127.0.0.1:8001
    # uwsgi日志路径
    logto = /home/to/log/gushici.log
    chmod-socket = 660
    vacuum = true
    # 获取uwsgi统计信息的服务地址
    stats = 127.0.0.1:9191
    # uwsgi进程的pid,用于以后的stop和reload
    pidfile = uwsgi.pid
    

    配置完成后运行:

    uwsgi --ini myproject.ini
    

    Nginx

    server {
        listen       80;
        server_name  118.25.228.94;
        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;
        location / {
            include uwsgi_params;
            uwsgi_pass 127.0.0.1:8001;  #监听的ip和端口号
            uwsgi_param UWSGI_PYHOME /root/PythonWorkSpace/myproject/Flask;   #pyathon环境
            uwsgi_param UWSGI_CHDIR /root/PythonWorkSpace/myproject;  #项目地址
            uwsgi_param UWSGI_SCRIPT myproject:app;   #web应用的入口模块名称
        }
    }
    

    nginx的一些命令

    • 启动: nginx
    • 停止: nginx -s stop
    • 强制停止: pkill -9 nginx
    • 查看nginx是否应用配置文件: nginx -t
    • 查看版本: nginx -v

    通过netstat -ntlp 查看端口占用情况,看看是不是你的nginx占用的80端口。如果发现有其他程序占用了nginx的默认的80端口,可以杀掉这些进程,再启动nginx。

    结果

    • 键入 nginx 来启动nginx
    • 键入uwsgi myproject.ini启动uwsgi

    我们运行 uwsgi --ini myproject.ini之后,按 ctrl+c 或者关闭 ssh 连接窗口,都会导致 uwsgi 进程关闭。所以我们可以将uwsgi设置为系统服务,参考centos将uwsgi添加为系统服务

    文章到这里就全部讲述完啦,若有其他需要交流的可以留言哦

    想阅读作者的更多文章,可以查看我 个人博客 和公共号:

    振兴书城

    相关文章

      网友评论

          本文标题:centos服务器uWSGI 和 Nginx 部署 Flask

          本文链接:https://www.haomeiwen.com/subject/txwkbftx.html