用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:;
}
}

大功告成。

参考:uwsgi、wsgi和nginx的区别和关系

通过Nginx部署flask项目和静态站点

官方中文文档

        写给新手看的Flask+uwsgi+Nginx+Ubuntu部署教程

flask 部署

Nginx的启动、停止与重启

uwsgi服务启动(start)停止(stop)重新装载(reload)

uwsgi生产环境部署flask项目

    Flask 应用如何部署

通过Nginx部署flask项目的更多相关文章

  1. centOS+uwsgi+nginx 部署flask项目,问题记录

    用flask做的项目想要部署到centOS系统上,填了一些坑,终于成功了,记录一下遇到的问题: 此次部署主要是按照这个博客进行的 https://www.cnblogs.com/Ray-liang/p ...

  2. CentOS 下部署Nginx+Gunicorn+Supervisor部署Flask项目

    原本之前有一部分东西是在Windows Server,但是由于Gunicorn不支持Windows部署起来颇为麻烦.最近转战CentOS,折腾一段时间,终于简单部署成功.CentOS新手,作为一个总结 ...

  3. 使用Nginx和uwsgi部署Flask项目

    前言   之前用Flask框架开发了一个Python的Web项目,使用Nginx和uWSGI部署起来感觉挺麻烦,过程中还因为对Flask框架的不熟悉,花了好长时间才把应用完全部署起来.下面分享部署成功 ...

  4. 使用Flask+uwsgi+Nginx部署Flask正式环境

    环境准备 在开始正式讲解之前,我们将首先进行环境准备. Step1:安装Python,pip以及nginx: sudo apt-get update sudo apt-get install pyth ...

  5. 使用uWSGI+nginx部署Django项目

    最近使用django写了一些项目,不过部署到服务器上碰到一些问题,还有静态文件什么的一堆问题,这里总结一下碰到的问题和解决方案,总体思路是按照官方文档走的. 原文地址:http://uwsgi-doc ...

  6. 部署Flask项目到腾讯云服务器CentOS7

    部署Flask项目到腾讯云服务器CentOS7 安装git yum install git 安装依赖包 支持SSL传输协议 解压功能 C语言解析XML文档的 安装gdbm数据库 实现自动补全功能 sq ...

  7. nginx部署h5项目

    1. nginx部署h5项目 此为windows部署,liunx也类似的 1.1. 前言 部署h5项目还是很简单的,不过对小白来讲一开始可能也是一脸懵逼,这个简单教程针对的是从未部署过前后端分离前端项 ...

  8. nginx部署vue项目

    nginx是一个高性能的HTTP和反向代理服务器.因此常用来做静态资源服务器和后端的反向代理服务器.本文主要记录使用nginx去部署使用vue搭建的前端项目,项目基于vue官方的脚手架vue-cli构 ...

  9. 服务器nginx部署PHP项目样式不出来要注意的小问题

    服务器使用nginx部署PHP项目的时候如果样式没有 出来,那么很可能 location 块里出问题了. 比如 location / { root /home/wwwroot/default/php_ ...

随机推荐

  1. 冒泡(bubblesort)、选择排序、插入排序、快速排序

    冒泡排序(bubblesort) 特点:通过换位置的方式,一直向上冒泡 package main import "fmt" func bubbleSortAsc(arrayA [] ...

  2. Centos7 配置 svn服务端

    转载至:Linux(阿里云Centos7)环境下搭建svn服务器以及权限配置详细步骤 本篇文章主要介绍在CentOS7中采用yum安装方式.优点:简单,一键安装,不用手动配置环境变量等.缺点:安装位置 ...

  3. MySql Host is blocked because of many connection errors 问题的解决方法

    错误日志: message from server: "Host '10.250.112.141' is blocked because of many connection errors; ...

  4. 卷积神经网络(CNN)的训练过程

    卷积神经网络的训练过程 卷积神经网络的训练过程分为两个阶段.第一个阶段是数据由低层次向高层次传播的阶段,即前向传播阶段.另外一个阶段是,当前向传播得出的结果与预期不相符时,将误差从高层次向底层次进行传 ...

  5. Linux高级网络设置——将多个网卡设置成一个网卡

    Linux下可以设置网卡模式 模式0:负载均衡 模式1:主备模式,不提高网络带宽 模式3:多网卡同时发送相同的数据 准备实验环境: Redhat 6.4 企业版64位,最小化安装. 给虚拟机添加网卡 ...

  6. Go语言——概念

    静态类型.动态类型.潜在类型 静态类型:指在变量声明中示出的那个类型.绝大多数类型都只有静态类型.唯独接口类型的变量例外,他除了拥有静态类型之外,还拥有动态类型. 动态类型:指在运行时与该变量绑定在一 ...

  7. 【数据库】通过触发器实现审计日志记录-demo篇

      触发器实现审计日志记录(记录增.删.改) #创建测试表 CREATE TABLE COMPANY( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, ...

  8. ACM-ICPC 2018 徐州赛区网络预赛 G. Trace (思维,贪心)

    ACM-ICPC 2018 徐州赛区网络预赛 G. Trace (思维,贪心) Trace 问答问题反馈 只看题面 35.78% 1000ms 262144K There's a beach in t ...

  9. 2BIT

    bit是比特,是英文 binary digit的缩写.而Byte是字节又叫bait. bit是表示信息的最小单位,是二进制数的一位包含的信息或2个选项中特别指定1个的需要信息量.一般来说,n比特的信息 ...

  10. 你不知道的JavaScript LHS 和 RHS 查找

    今天在学习JavaScript的相关知识时接触到了 LHS(Left Hand Side)和 RHS(Right Hand Side)两种对变量查找的方法,之所以JavaScript要查找变量,那就先 ...