您的位置:首页 > 运维架构 > Nginx

flask项目部署到阿里云ubuntu服务器 uwsgi+nginx

2019-05-09 16:30 976 查看

Web服务器都会使用一种叫做Web服务网关接口(Web Server Gateway Interface, WSGI)的协议,这是一种标准化的设计,它让Python应用跟Web服务器能够轻松地通信。在用flask开发web项目的时候,程序员一般使用的是flask提供的测试环境,即development环境;而像java EE等并没有提供一个测试服务器,因此需要在一开始时就需要tomcat等服务器。

而flask在真正部署的时候,最好不要使用flask提供的测试环境,而是使用uWSGI来代替测试环境。

uWSGI是一个支持包括WSGI在内的多种不同接口的Web服务器。uWSGI可以作为应用的服务器使用,也可以处理在不同进程和线程之间进行负载均衡之类的任务。

1.登陆到远程服务器

首先,需要登陆到远程服务器。

这里推荐使用ssh,ssh的端口是22;如果ssh失败,则可能是这个端口未开启。这里使用的ssh是linux带的命令,若对此不熟悉可以使用xshell。

[code]ssh root@IP地址

root表示以root用户登陆,IP地址改为阿里云所提供的公网IP地址,然后就会让你输入云服务器的root用户密码,若登陆成功则输出:

注意:此时是以root登陆的,操作请小心谨慎。 

2.安装Nginx

其次,需要安装nginx。

对于ubuntu来说,安装软件倒显得简单得多了:

[code]sudo apt install nginx

 Nginx在安装成功后会默认开启服务器,此时稍微修改/etc/nginx/sites-available/default文件就可以访问Nginx所提供的网页了。

初始的server_name的值为 下划线_,把它的值改为阿里云公网的IP地址即可。

接着就可以在浏览器输入IP地址来测试Nginx所提供的默认网页了。如果无法访问,则可能是阿里云没有开启端口。

开启端口操作如下:

1.点击更多

2.选择安全组配置

3.点击配置规则

4.点击添加安全组规则

5.接着输入要开放的端口和允许的IP地址规则即可。

授权对象牵涉到IP地址和掩码的相关知识。 

3.uWSGI代替测试环境

Nginx和uWSGI算是相辅相成,如下图:

 使用Web服务器Nginx作为前端,为WSGI服务器uWSGI提供反向代理服务。反向代理服务器是这样的程序:他们接受客户端的请求,并从真正的服务器那里取得响应内容,再返回客户端,就好像数据是由代理服务器提供给客户端的一样。

总得来说,Nginx负责监听端口(默认为80)发来的请求,并把该请求转到对应端口的WSGI应用,之后在处理之后又经由Nginx返回给客户端。也就是说,uWSGI还需要和Nginx进行通信。

创建配置文件uwsgi.ini保存配置环境:

[code][uwsgi]
#uwsgi启动时所使用的地址与端口,端口可以使用其他端口
socket=127.0.0.1:8080

# 指向网站的项目根目录
chdir=/home/ren/ScholarDiscovery/SchoolSearch/MicroFlask

#python启动程序文件
wsgi-file=app.py

#python程序内用以启动application变量名,app = Flask(__name__)
callable=app
master=true

#处理器数目
processes=4

#线程数
threads=2

接着运行即可:

[code]uwsgi uwsgi.ini

运行成功时输出如下:

 

此时如果提示端口已经被占用,则可以尝试换个端口或者使用kill命令杀死占用该端口的进程。

[code]ps -aux | grep uwsgi

会列出和uwsgi相关的进程,然后使用:

[code]kill -9 [PID]

 来杀死进程。

先使用Ctrl+c停止uWSGI的运行。

接着是nginx配置文件的修改,修改/etc/nginx/sites-available/default:

Nginx监听80端口,root为项目根目录;location则保存着uWSGI的相关配置,用以方便Nginx和uWSGI的通信。

location中用到了UWSGI_PYHOME来表示虚拟环境的路径,如果没有用到虚拟环境则可以注释掉这一句。

另外就是uwsgi_pass中的IP:port和uwsgi.ini的socket的IP:port是相同的。

然后重新启动Nginx服务:

[code]service nginx restart

 接着需要运行uWSGI:

[code]uwsgi uwsgi.ini

 如果需要后台运行的话,则可以使用:

[code]uwsgi -d --ini uwsgi.ini

 

 项目部署完成。

参考书目:《深入理解Flask》

参考链接:https://blog.csdn.net/weixin_39212776/article/details/81318553

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: