前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >centos服务器uWSGI 和 Nginx 部署 Flask 项目

centos服务器uWSGI 和 Nginx 部署 Flask 项目

作者头像
静默加载
发布2020-05-29 10:54:16
3.5K0
发布2020-05-29 10:54:16
举报

前言

前段时间手贱买了几个月的腾讯云服务器。我一个做移动端的买国内服务器干啥。最后想用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:

代码语言:javascript
复制
pip install uwsgi flask

创建应用

/root/PythonWorkSpace/myproject/myproject.py

代码语言:javascript
复制
# -*- 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,然后运行:

代码语言:javascript
复制
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

代码语言:javascript
复制
[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

配置完成后运行:

代码语言:javascript
复制
uwsgi --ini myproject.ini

Nginx

代码语言:javascript
复制
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添加为系统服务

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 概念
  • 部署
    • python
      • Flask 和 uwsgi:
        • 创建应用
          • uwsgi
            • Nginx
              • nginx的一些命令
            • 结果
            相关产品与服务
            云服务器
            云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档