通过Nginx部署flask项目
用Flask开发之后,很多人,喜欢用nohup python manage.py & 这样的形式,放到后台运行,其实这样只是个发开模式,很简陋,无法支持并发,进程监控等功能。所以采用nginx+uwsgi+flask的方式进行部署。
系统:Ubuntu 16.04 LTS
1.安装python3虚拟环境
安装虚拟环境还是很有必要的,例如刚开始我没有装,直接用系统的python3,到uwsgi启动时,遇到很多问题。Ubuntu 16.04 上有预装了2.7,3.5两个python版本。
sudo pip install virtualenv #安装virtualenv
mkdir flask_uwsgi #创建部署flask的文件夹
cd flask_uwsgi
virtualenv -p /usr/bin/python3 env #创建虚拟环境
source env/bin/activate #激活虚拟环境
deactivate #退出虚拟环境
注意:在创建虚拟环境时,virtualenv -p /usr/bin/python3 env 这种创建方式,虚拟环境的python版本为3.5。若直接 virtualenv env,虚拟出来的python环境为2.7。
2.安装Flask
安装Flask,使网站能够运行。
(env) ubuntu@0705:~/flask_uwsgi$ pip install flask
之后编辑myapp.py
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
@app.route("/moco")
def moco():
return "Hello moco!"
if __name__ == "__main__":
app.run(host='0.0.0.0', port=)
运行 python myapp.py,出现如下,即成功,可以curl 127.0.0.0.1:5000访问。

2.安装uwsgi(官方中文文档)
uwsgi使一个web服务器,flask是一个web框架。他们之间通过wsgi协议进行通讯。详情看uwsgi、wsgi和nginx的区别和关系。
(env) ubuntu@:~/flask_uwsgi$pip install uwsgi
如果报下如下错误,先装依赖,如果再执行完成之后,还是失败,重新建立虚拟环境。
sudo apt-get install aptitude
sudo apt-get install build-essential python-dev
sudo apt-get install python3-dev

安装uwsgi成功后,创建一个文件测试下。
test.py
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
#return ["Hello World"] # python2
return [b"Hello World"] # python3
然后,运行uWSGI:
uwsgi --http :8000 --wsgi-file uwsgi_test.py
参数含义:
http :8000:使用http协议,8000端口
wsgi-file uwsgi_test.py:加载指定文件uwsgi_test.py

上图出现表示,成功,curl 127.0.0.1:8000 进行访问。
3.uwsgi部署Flask
这里简化下,就用uwsgi部署1中的myapp.py。新建一个config.ini文件,内容如下。
[uwsgi]
http=127.0.0.1:
#虚拟环境中的目录,这里env后边不要/bin
home = /home/ubuntu/flask_uwsgi/env
#启动的文件
wsgi-file = /home/ubuntu/flask_uwsgi/myapp.py
# python 程序内用以启动的 application 变量名,不加callable=app,访问时报服务器错误Internal Server Error callable=app
# 处理器数
processes =
# 线程数
threads =
buffer-size =
master = true
stats=/home/ubuntu/flask_uwsgi/uwsgi.status
pidfile=/home/ubuntu/flask_uwsgi/uwsgi.pid
执行 uwsgi config.ini ,项目启动成功后,curl 127.0.0.1:5000/moco , curl 127.0.0.1:5000 进行验证。
4.nginx通过uwsgi部署Flask
修改config.ini 配置,socket一项有变化,
启动uwsgi, uwsgi config.ini
[uwsgi]
socket = 127.0.0.1:
home = /home/ubuntu/flask_uwsgi/env
wsgi-file = /home/ubuntu/flask_uwsgi/myapp.py
callable=app
processes =
threads =
buffer-size =
master = true
stats=/home/ubuntu/flask_uwsgi/uwsgi.status
pidfile=/home/ubuntu/flask_uwsgi/uwsgi.pid
修改nginx配置,
重新加载nginx,sudo nginx -s reload
server {
listen ;
server_name a.ozflhnb.top;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:;
}
}
大功告成。


写给新手看的Flask+uwsgi+Nginx+Ubuntu部署教程
uwsgi服务启动(start)停止(stop)重新装载(reload)
通过Nginx部署flask项目的更多相关文章
- centOS+uwsgi+nginx 部署flask项目,问题记录
用flask做的项目想要部署到centOS系统上,填了一些坑,终于成功了,记录一下遇到的问题: 此次部署主要是按照这个博客进行的 https://www.cnblogs.com/Ray-liang/p ...
- CentOS 下部署Nginx+Gunicorn+Supervisor部署Flask项目
原本之前有一部分东西是在Windows Server,但是由于Gunicorn不支持Windows部署起来颇为麻烦.最近转战CentOS,折腾一段时间,终于简单部署成功.CentOS新手,作为一个总结 ...
- 使用Nginx和uwsgi部署Flask项目
前言 之前用Flask框架开发了一个Python的Web项目,使用Nginx和uWSGI部署起来感觉挺麻烦,过程中还因为对Flask框架的不熟悉,花了好长时间才把应用完全部署起来.下面分享部署成功 ...
- 使用Flask+uwsgi+Nginx部署Flask正式环境
环境准备 在开始正式讲解之前,我们将首先进行环境准备. Step1:安装Python,pip以及nginx: sudo apt-get update sudo apt-get install pyth ...
- 使用uWSGI+nginx部署Django项目
最近使用django写了一些项目,不过部署到服务器上碰到一些问题,还有静态文件什么的一堆问题,这里总结一下碰到的问题和解决方案,总体思路是按照官方文档走的. 原文地址:http://uwsgi-doc ...
- 部署Flask项目到腾讯云服务器CentOS7
部署Flask项目到腾讯云服务器CentOS7 安装git yum install git 安装依赖包 支持SSL传输协议 解压功能 C语言解析XML文档的 安装gdbm数据库 实现自动补全功能 sq ...
- nginx部署h5项目
1. nginx部署h5项目 此为windows部署,liunx也类似的 1.1. 前言 部署h5项目还是很简单的,不过对小白来讲一开始可能也是一脸懵逼,这个简单教程针对的是从未部署过前后端分离前端项 ...
- nginx部署vue项目
nginx是一个高性能的HTTP和反向代理服务器.因此常用来做静态资源服务器和后端的反向代理服务器.本文主要记录使用nginx去部署使用vue搭建的前端项目,项目基于vue官方的脚手架vue-cli构 ...
- 服务器nginx部署PHP项目样式不出来要注意的小问题
服务器使用nginx部署PHP项目的时候如果样式没有 出来,那么很可能 location 块里出问题了. 比如 location / { root /home/wwwroot/default/php_ ...
随机推荐
- Seaborn(一)之风格管理
Seaborn简介 seaborn同matplotlib一样,也是Python进行数据可视化分析的重要第三方包.但seaborn是在 matplotlib的基础上进行了更高级的API封装,使得作图更加 ...
- 关于MQ的几件小事(四)如何保证消息不丢失
1.mq原则 数据不能多,也不能少,不能多是说消息不能重复消费,这个我们上一节已解决:不能少,就是说不能丢失数据.如果mq传递的是非常核心的消息,支撑核心的业务,那么这种场景是一定不能丢失数据的. 2 ...
- 记一次Git提交报错的问题
通常代码版本控制的步骤是: 在代码版本控制平台新建一个仓库 clone远程仓库到本地 开始编码,然后是一系列add,commit,push 我的步骤是: 在远程代码版本管理平台新建一个仓库 在本地新建 ...
- MySQL数据库的启动与停止
有时候我们在任务管理器中无意识的结束了数据库的程序,再用可视化工具连接 时就会显示NO CONNECTION的情况,这样就需要重启数据库服务. 1. 我的电脑右键->管理->服务和应用程序 ...
- zookeeper:1
分布式环境的特点 分布性:多台机器位置不同,但是相互协同做某一件事情. 并发性:程序运行过程中,并发性操作是很长见的.比如:同一个分布式系统中的多个节点,同时访问一个共享资源.(数据库,分布式存储) ...
- python实现pow函数(求n次幂,求n次方)
目录 类型一:求n次幂 类型二:求n开方 类型一:求n次幂 实现 pow(x, n),即计算 x 的 n 次幂函数.其中n为整数.pow函数的实现--leetcode 解法1:暴力法 不是常规意义上的 ...
- 从c到c++<三>
引用是给一个变量起别名回顾下变量,它有这两个属性:名称和空间.而引用不是变量,它仅仅只是变量的别名,没有自己的独立空间,需要与它所引用的变量共享空间,所以对于引用所做的改变实际上是对它所引用的变量的改 ...
- Java abstract类的基本使用 和 [abstract类实现]打印1000以内的所有素数并输出时间
笔记: /** 关键字abstract ,实现抽象类,相当于给出类的大纲,子类只管继承,但抽象类不可被实例化! * 1.抽象方法只保留方法的功能,而具体的执行,交给继承抽象类的子类,由子类重写所有的抽 ...
- python2.7 psycopg2
psycopg2 安装 sql='''INSERT INTO "CNYB"."PRE_DQ_PLANT"("ID", "ORG_I ...
- Ubuntu 搭建 Ftp 服务器
1.在 ubuntu 中 下载 vsftpd 要是你安装了 vsftpd 输入:vsftpd -v ,会有版本提示 如果没有,则进行安装 vsftpd 输入 apt-get install vs ...