python部署-Flask+uwsgi+Nginx
一、Flask部分(app.py)
flask即Python代码:部分参考代码如下,相信很多人如果看到这篇文章一定有flask的代码能力。
from app import create_app
from singtec_Config import * app = create_app(DEV_MODEL) @app.route('/')
def hello_world():
return 'Hello World!!!' if __name__ == '__main__':
app.run(host='0.0.0.0',port=8000)
二、uwsgi部分(uwsgi.ini)
简单介绍一下uwsgi:在python web开发中,我们经常使用uwsgi配合nginx部署一个web框架,如Django
或flask
。同时我们又会说,框架和web服务器之间要符合WSGI协议。那就来厘清一下这几个概念。
1、web服务器和web框架
web服务器即用来接受客户端请求,建立连接,转发响应的程序。至于转发的内容是什么,交由web框架来处理,即处理这些业务逻辑。如查询数据库、生成实时信息等。Nginx就是一个web服务器,Django
或flask
就是web框架。
2、WSGI和uwsgi
WSGI是一种通信协议。WSGI 不是框架,也不是一个模块,而是介于 Web应用程序(Web框架)与 Web Server 之间交互的一种规范。
uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。
uwsgi是一种通信协议,不过跟WSGI分属两种东西,该协议下速度比较快。
[uwsgi]
# 如果使用nginx就用socket
socket=0.0.0.0:8000 # 如果不使用socket,直接用uwsgi启动程序,就是用http
#http=0.0.0.0:8000 # 如果程序中有文件下载,图片、视频等就需要就上这个配置
sgi-disable-file-wrapper=true # flask程序在你服务器上的目录
chdir=/opt/www/singtec/www/singtecProject # flask项目的启动文件
wsgi-file=manage.py
# 启动文件中的flask app(即第一部分中的app)
callable=app # 启动的进程数
processes=4 #启动的线程数
threads=2 # 是否启动多线程
enable-threads=True # 是否将uwsgi的运行线程设置为主线程,如果设置为主进程,在开启的其他的子进程会随着主进程关闭而关闭
master=True # 设置用来记录uwsgi进程号的文件
pidfile=uwsgi.pid # 设置uwsgi运行的日志文件(可以记录程序运行的)
daemonize=uwsgi.log #在每个worker而不是master中加载应用
lazy-apps=true # 设置编码(不是必须)
env LANG="en_US.UTF-8"
env LANGUAGE="en_US.UTF-8"
三、nginx部分
简单介绍一下nginx:Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;Nginx可以作为一个HTTP服务器进行网站的发布处理,另外Nginx可以作为反向代理进行负载均衡的实现。
常用功能:反向代理、正向代理、负载均衡、服务器的动静分离、高可用等,这里就不一一介绍了,主要介绍一下关于uwsgi的配置。
# 设置用户
user root;
# 设置worker及可以理解为进程或者线程数
worker_processes 4;
# 日志设置
error_log logs/error.log;
error_log logs/error.log notice;
error_log logs/error.log info;
# 每个worker的最大连接数
events {
worker_connections 1024;
} # http全局设置
http { # 设置mine.type类型
include mime.types;
default_type application/octet-stream;
# 日志格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
# 运行日志
access_log logs/access.log main; # 如果有上传文件,例如视频或者图片,限制文件传输大小的
client_max_body_size 100M;
# 服务器级别的设置
server { # 设置监听端口
listen 80;
# 设置访问的域名
server_name localhost;
# 请求级别的设置
# /便是监听什么参数都没有的根目录请求
location / {
# 设置请求的根目录
root /opt/www/singtec;
# 设置根目录的请求静态index.html
index index.html index.htm;
# 一下两行是设置请求的时候解析真实地址的
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
# 设置监听请求以api开头的接口
location /api{
# 设置导入uwsgi_params文件(通常在nginx安装的时候,默认和nginx.cong文件在同一个目录下)
include /usr/local/nginx/conf/uwsgi_params;
# 设置nginx的反向代理路由,只要请求api开头的都去访问0.0.0.0:8000程序,及我们的flask程序的接口,实现uwsgi的反向代理
uwsgi_pass 0.0.0.0:8000;
}
}
python部署-Flask+uwsgi+Nginx的更多相关文章
- python Linux flask uwsgi nginx 在centos7.3部署
0.直接上uwsgi和nginx安装命令 linux 安装uwsgi yum groupinstall "Development tools" yum install zlib-d ...
- 阿里云部署 Flask + uWSGI + Nginx
一.引言 今天入手了一台阿里云服务器,是centeros 7.5版本.本文解决的是 Flask 的部署问题.假设你的Flask的应用已经完成,现在只是部署的问题,本文以部署我的二次开发微信订阅号的项目 ...
- 写给新手看的Flask+uwsgi+Nginx+Ubuntu部署教程
学习 Flask,写完一个 Flask 应用需要部署的时候,就想着折腾自己的服务器.根据搜索的教程照做,对于原理一知半解,磕磕碰碰,只要运行起来了,谢天谢地然后不再折腾了,到下一次还需要部署时,这样的 ...
- Flask+uwsgi+Nginx+Ubuntu部署
学了一段时间flask,可是一直没有做过部署, 于是想着怎么部署呢, 想想,先吧服务给搞通吧,于是呢 就先想着去吧服务给搞起来,这里选择的是Flask+uwsgi+Nginx+Ubuntu, Pyth ...
- Flask+uwsgi+Nginx+Ubuntu部署教程
学习 Flask,写完一个 Flask 应用需要部署的时候,就想着折腾自己的服务器.根据搜索的教程照做,对于原理一知半解,磕磕碰碰,只要运行起来了,谢天谢地然后不再折腾了,到下一次还需要部署时,这样的 ...
- 阿里云部署 Flask + WSGI + Nginx 详解
抵不住朋友的诱惑,今天终于入手了一台阿里云服务器,是Ubuntu 1.4 32位版本,最初考虑是用来尝尝鲜只是买了个最低配的,价格算起来与在国外买个空间的价格相当吧(可能一年才贵100多),但用起来感 ...
- windows下apache + mod_wsgi + python部署flask接口服务
windows下apache + mod_wsgi + python部署flask接口服务 用python3安装虚拟环境 为啥要装虚拟环境? 原因1:安装虚拟环境是为了使项目的环境和全局环境隔离开,在 ...
- Python 部署 flask 用uwsgi和nginx
安装uwsgi nginx 具体方法请百度 1.在项目目录下建立.ini文件 xad_uwsgi.ini [uwsgi] master=true #项目目录 chdir=/root/zhaoyingj ...
- 使用Flask+uwsgi+Nginx部署Flask正式环境
环境准备 在开始正式讲解之前,我们将首先进行环境准备. Step1:安装Python,pip以及nginx: sudo apt-get update sudo apt-get install pyth ...
随机推荐
- js 完美运动框架
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Spark入门(七)--Spark的intersection、subtract、union和distinc
Spark的intersection intersection顾名思义,他是指交叉的.当两个RDD进行intersection后,将保留两者共有的.因此对于RDD1.intersection(RDD2 ...
- 升级cocoapods到指定版本
把cocoapods升级到1.7.4 sudo gem install -n /usr/local/bin cocoapods -v 1.7.4
- 初学嵌入式Linux
初学嵌入式Linux,感觉需要学习的东西太多了.把学习过程中的收获和问题记录在这里,算是一份经验吧. 前面利用开发板带的现成的东西step by step让Linux 2.4.19在开发板上跑 ...
- 浅谈ASP.NET Core中的DI
DI的一些事 传送门马丁大叔的文章 什么是依赖注入(DI: Dependency Injection)? 依赖注入(DI)是一种面向对象的软件设计模式,主要是帮助开发人员开发出松耦合的应用程序 ...
- MySQL设置外键报错 #1452 - Cannot add or update a child row: a foreign key constraint fails 解决方法
MySQL数据库,当我尝试在A表中设置B表的主键为外键时,报出错误:#1452 - Cannot add or update a child row: a foreign key constraint ...
- 用java分组查elasticsearch
哎,编程路漫漫,一坑又一坑,爬完还会掉,何时是尽头! 今朝有酒今朝醉,程序不对不敢睡! 还是接口昂,今天还是接口有问题,我是很菜,很笨,但是我还是要努力!! 正文: 接口需求是这样的,根据车型查询在线 ...
- 文献名:Repeat-Preserving Decoy Database for False Discovery Rate Estimation in Peptide Identication (用于肽段鉴定中错误发生率估计的能体现重复性的诱饵数据库)
文献名:Repeat-Preserving Decoy Database for False Discovery Rate Estimation in Peptide Identication (用于 ...
- 5L-链表导论心法
链表是比数组稍微复杂一点的数据结构,也是两个非常重要与基本的数据结构.如果说数组是纪律严明排列整齐的「正规军」那么链表就是灵活多变的「地下党」. 关注公众号 MageByte,有你想要的精彩内容. 链 ...
- 移动端H5调试
背景:开发PC页面的时候使用chrome浏览器的开发者工具,可以很容易的捕获到页面的dom元素,并且可以修改样式,方便调试:但是手机上却很麻烦,因为手机上没有办法直接打开开发者工具查看元素.其实可以通 ...