Flask 部署(uwsgi,nginx)

flask部署

1. 基本环境

  1. 操作系统:centerOS 8.0
  2. python 3.6.8
  3. flask 1.1.2
  4. uwsgi 2.0.19.1
  5. nginx 1.14.1

2. 创建虚拟环境

项目路径为:/root/usr/local/pywkplace/helloFlask03,进入项目根目录中,创建虚拟环境:

[root@bill helloFlask03]# virtualenv flask

激活虚拟环境:

[root@bill helloFlask03]# source flask/bin/activate
(flask) [root@bill helloFlask03]# 
...
如何需要退出虚拟环境:执行deactivate即可

下载flask:

pip3 install flask

pip3 freeze可以查看所有下载的Python库
安装好uwsgi和nginx,未安装的请执行

pip3 install uwsgi
yum install nginx

查看版本:

uwsgi --version
nginx -V

3. 编写Flask helloWorld

创建helloWorld.py文件:

(flask) [root@bill helloFlask03]# touch helloWorld.py

编辑helloWorld.py文件:

(flask) [root@bill helloFlask03]# vim helloWorld.py
vim基本操作:i编辑模式,ggVG全选,y复制,p粘贴,d删除,0行首,$行尾。
编辑得到以下代码:
from flask import Flask

app = Flask(__name__)

@app.route("/")
def helloWorld():
    return "<h1 style='color:blue'>Hello World!</h1>"

if __name__ == '__main__':
	app.run(host='0.0.0.0', port=443, debug=True)

运行helloWorld.py文件:

(flask) [root@bill helloFlask03]# python3 helloWorld.py

在浏览器中打开你的公网ip地址:
在这里插入图片描述

4. 配置uwsgi和nginx

  可以发现上面直接在程序中给他ip和端口就能直接在web中访问,这是因为flask自带了一个简单的web服务器,但是在生产环境中,这个测试版的服务器是满足不了性能的需求的。

  • uWSGI是一个基于自有的uwsgi协议、WSGI协议和http服务协议的web网关。那么在python中,uWSGI实现了uwsgi和WSGI两种协议的Web服务器,负责响应python的web请求。
  • nginx是常用的代理服务器,加上安全性和其他限制,可以达到保护程序的作用。而uWSGI本身时内网接口,开启多个work和precesses可能也不够用,而nginx可以代理多态uWSGI完成负载均衡。

配置uwsgi.ini文件:

(flask) [root@bill helloFlask03]# touch uwsgi.ini
(flask) [root@bill helloFlask03]# vim uwsgi.ini
内容:
[uwsgi]
socket=0.0.0.0:443
# 项目根目录
base=/root/usr/local/pywkplace/helloFlask03
# flask 启动app的名字
app=helloWorld
chdir=%(base)
module=%(app)
# 虚拟环境
home=%(base)/flask
pythonpath=%(base)

master=true
processes=2
workers=2
chmod-socket=644
# helloWorld app.run()返回
callable=app
# 运行log文件
logto=%(base)/uwsgi443.log

创建log文件:

(flask) [root@bill helloFlask03]# touch uwsgi443.log

配置nginx.conf:
首先需要找到nginx.conf,使用命令:whereis nginx,然后ls文件夹里面的内容,即可找到conf文件。
在这里插入图片描述
进入nginx.conf编写一下内容:

(flask) [root@bill helloFlask03]# vim /etc/nginx/nginx.conf

修改server

server {
        listen       80  default_server;
        server_name  0.0.0.0;

        location / {
                include  uwsgi_params;
                uwsgi_pass  0.0.0.0:443;
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

修改helloWorld.py,即把app.run里面的host和port配置全部删掉即可。之后,因为前面运行过python3 helloWorld.py,虽然终止了进程,但是还是存在僵尸进程,就会一直占用443端口,因此还需要强制杀死进程,精准的杀死:首先lsof -i:443,找到进程ip,然后kill -9 进程ip;懒人的做法:killall -9 python3。
执行运行命令:

(flask) [root@bill helloFlask03]# uwsgi --ini uwsgi.ini & /usr/sbin/nginx

输入公网ip,注意不用加端口(默认80端口)运行成功:
在这里插入图片描述
与前面相对比,发现这里不用加端口,也就是80端口,前一次运行指定了443端口,而这里不用,说明nginx起到了作用,在server配置中,明确指出了代理端口是80端口,所以直接80端口即可访问web。

5. 参考文献

uwsgi+nginx项目部署
Pyblog software
关于nginx配置出现错误 [emerg] open() “/usr/local/var/run/nginx.pid” failed (13: Permission denied)]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值