Flask+uwsgi+Nginx+Ubuntu部署

    学了一段时间flask,但是一直没有作过部署, 因而想着怎么部署呢, 想一想,先吧服务给搞通吧,因而呢 就先想着去吧服务给搞起来,这里选择的是Flask+uwsgi+Nginx+Ubuntu, Python选择的是2.7.2这个是Ubuntu系统自带的学起来感受仍是简单的 不用去软连,目前本身的flask是python3写的 ,慢慢去过渡,先吧这个给搞通了,那么在优化也是很顺手的。其实对于不少的原理本身也是只知其一;不知其二,先吧这个给搭起来,慢慢去了解里面的逻辑什么的。html

Nginx

Nginx 是高效的 Web 服务器和反向代理服务器,能够用做负载均衡(当有 n 个用户访问服务器时,能够实现分流,分担服务器的压力),与 Apache 相比,Nginx 支持高并发,能够支持百万级的 TCP 链接,十万级别的并发链接,部署简单,内存消耗少,成本低,但 Nginx 的模块没有 Apache 丰富。Nginx 支持 uWSGI 的 uwsgi 协议,所以咱们能够将 Nginx 与 uWSGI 结合起来,Nginx 经过 uwsgi_pass 将动态内容交给 uWSGI 处理。python

官方文档在nginx

最好的 Nginx 教程在web

uwsgiflask

uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的做用是与uWSGI服务器进行交换。浏览器

要注意 WSGI / uwsgi / uWSGI 这三个概念的区分。bash

  • WSGI看过前面小节的同窗很清楚了,是一种通讯协议。服务器

  • uwsgi是一种线路协议而不是通讯协议,在此经常使用于在uWSGI服务器与其余网络服务器的数据通讯。网络

  • 而uWSGI是实现了uwsgi和WSGI两种协议的Web服务器。并发

uwsgi协议是一个uWSGI服务器自有的协议,它用于定义传输信息的类型(type of information),每个uwsgi packet前4byte为传输信息类型描述,它与WSGI相比是两样东西。

 

  准备工做,首先呢,咱们先去安装咱们须要的包,首先呢  我这里是我新装的系统,因此没有pip,因此我先来去安装pip

sudo apt-get install python-pip

使用 下面命令去安装flask

pip install flask

安装后呢,咱们能够去测试下,

import flask

没有报错证实咱们的flask 是安装成功的。那么接下来咱们要作的就是安装ngnix和uwsgi。

sudo apt-get install nginx

安装好之后,咱们能够先启动下, nginx start 直接命令行启动,简单粗暴

这样咱们的nginx就启动成功了,接下来,咱们就是利用pip 去安装uwsgi

咱们安装好后,那么接下来就开始开干吧,

首先我在hellowflak下建立一个app的python的包,

#app/__init__.pyfrom flask import Flask
app = Flask(__name__)from app import view

接下来咱们去建立view.py

from app import app
@app.route('/')def index():    return 'hellow'

那么咱们去在app同级目录建立hello.py

from app import appif __name__ == "__main__":
    app.run()

,那么咱们能够在本地利用Python去调试咱们的程序,

那么咱们能够在浏览器去看看,输入地址,能够获得这个,这么来看咱们flask程序是没有问题的。

那么咱们接下来要作的就是让nginx去承担web服务。

我这里作的是简单粗暴直接删除nginx的配置文件

$ sudo rm /etc/nginx/sites-enabled/default

接下来,我在hellowflask下建立的一个配置文件

复制代码

server {
listen 3389;
server_name 60.205.187.178 www.lileilei.online;
charset utf-8;
client_max_body_size 75M;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:9160;
uwsgi_param UWSGI_PYTHON /usr/bin/python;
uwsgi_param UWSGI_CHDIR /home/flask_blog-python3;
uwsgi_param UWSGI_SCRIPT hello:application;

}

复制代码

稍做解释:server_name 能够是域名,也能够写 ip 地址,uwsgi_pass 是代表 Nginx 与 uwsgi 的交流方式。我这里选择的是制定的端口号。

那么咱们接下来去软连咱们的这个配置到nginx中去。

sudo ln -s /home/liwanlei/Desktop/hellowflask/helloflask_nginx.conf /etc/nginx/conf.d/
这样咱们再去启动咱们的nginx,
sudo /etc/init.d/nginx restart

这里的不是welcome了,而是502错误呢,由于咱们如今的uwsgi文件尚未配置,也没有去启动uwsgi,那么咱们接下来就是要去出来这个uwsgi,下面的例子是个人配置。

复制代码

[uwsgi]
base = /home/flask_blog-python3
pidfile = /var/run/uwsgi.pid
master = true
wsgi-file = hello.py
chdir = /home/flask_blog-python3
socket = 127.0.0.1:9160
callable = application
logto = %n.log
processes = 10
master = true 
workers=10
enable-threads = true

py-autoreload = 1

复制代码

这时候咱们的uwsgi已经配置号,那么咱们去启动,

sudo /usr/bin/uwsgi --ini/home/liwanlei/Desktop/hellowflask/helloflask_uwsgi.ini

咱们去从新启动咱们的nginx,

sudo nginx reload
平滑重启能够用用,从新加载配置文件,用新的工做进程代替旧的工做进程。
sudo nginx -s reload

启动后,我这里修改了地址,这里就能够直接访问了,那么咱们的部署这样就算能够了,简单的。
 

完工以后,感受仍是很简单的 有问题那么就去看log,只要log配置得当,那么排除错误是很快的。

我已经成功的把我写的部署到了阿里云上面。 

增长supervisor管理,当chrash了,能够自动重启

安装后/etc/supervisor/conf.d/ 配置一个文件,以下 简单配置

command=uwsgi /home/flask/flask_blog-python3/helloflask_uwsgi.ini
autostart=ture
autorestart=true
stdout_logfile=/home/flask/flask_blog-python3/uwsgi_supervisor.log
user=root
配置后启动

service supervisor start

终止服务

service supervisor stop

wKiom1l3RJmhhKWuAACePwunRzA478.jpg-wh_50

相关文章
相关标签/搜索