WSGI协议

Web框架致力于如何生成HTML代码,而Web服务器用于处理和响应HTTP请求。Web框架和Web服务器之间的通信,需要一套双方都遵守的接口协议。WSGI协议就是用来统一这两者的接口的。

WSGI容器——Gunicorn

常用的WSGI容器有Gunicorn和uWSGI,但Gunicorn直接用命令启动,不需要编写配置文件,相对uWSGI要容易很多,所以这里我也选择用Gunicorn作为容器。

Ubuntu 上的准备

假定你是在腾迅云或者阿里云购买了VPS,那么直接执行以下指令吧,其它的不多解释了,无非就是准备一下 python 环境。

$ sudo apt-get update
$ sudo apt-get install python-dev python-pip python-virtualenv

然后安装 nginx

$ sudo apt-get install nginx

在 /var/www 目录下建立一个 myflask 的文件夹(你的项目目录),然后用 chmod 改一下权限

$ sudo mkdir /var/www/myflask
$ sudo chmod 777 /var/www/myflask

注:当然你可以使用 nginx 的默认网站目录 /usr/share/nginx/html

然后用 scp 指令直接将本机上的 flask 项目传到服务器:

$ scp -r myflask root@www.mydomain.com:/var/www/myflask

域名就改成地址或者你的服务器正在使用的域名,我这里是用 root 用户进入的,你得按你的服务器的用户来修改。两大云的默认根用户是:

  • 腾迅 :ubuntu
  • 阿里 :root

Gunicorn

Gunicorn 绿色独角兽 是一个Python WSGI UNIX的HTTP服务器。这是一个pre-fork worker的模型,从Ruby的独角兽(Unicorn )项目移植。该Gunicorn服务器大致与各种Web框架兼容,只需非常简单的执行,轻量级的资源消耗,以及相当迅速。

我曾经Google 过 Gunicorn 与 uwsgi ,都说uwsgi 的性能要比 gunicorn 高,所以最终结果就杯具了。不过,现在回过头来看这只 “独角兽”还为时不晚吧。

安装 Gunicorn

Gunicorn 应该装在你的 virtualenv 环境下,关于 virtualenv 就不多说了,如果没用过那就赶快脑补吧。安装前记得激活 venv

(venv) $ pip install gunicorn

运行 Gunicorn

(venv) $ gunicorn -w 4 -b 127.0.0.1:8080 wsgi:application

That's all! 它的安装就这么简单。不过这里得作一个解释。就是最后的那个参数 wsgi:application 这个是程序入口,我得写个小小的范例来说明一下:

新建一个 wsgi.py 的文件, 注意,这里和 Flask 项目中常用的 manage.py 引导脚本是没有半点毛关系的。(这是我笨,以前一直没分清被uwsgi搞糊涂了)

# wsgi.pyfrom flask import Flaskdef create_app():# 这个工厂方法可以从你的原有的 `__init__.py` 或者其它地方引入。app = Flask(__name__)return appapplication = create_app()if __name__ == '__main__':application.run()

好了,这个 wsgi:application 参数就很好理解了, 分两部:wsgi 就是引导用的 python 文件名称(不包括后缀/模块名)application 就是 Flask 实例的名称。这样 gunicorn 就会找到具体要 host 哪一个 flask 实例了。

从这里开始就可以体现 gunicorn 的好了,我们根本不用配什么配置文件的,一个指令就可以将它起动。

Nginx 的配置

关于 Nginx 我也就不详细讲了,我们就直奔主题,杀入 Nginx 的默认配置文件

sudo nano /etc/nginx/site-avalidable/default

暴力修改成为以下的内容

建议先备份一下 default 文件
sudo cp /etc/nginx/site-avalidable/default /etc/nginx/site-avalidable/default.bak

server {listen 80;server_name example.org; # 这是HOST机器的外部域名,用地址也行location / {proxy_pass http://127.0.0.1:8080; # 这里是指向 gunicorn host 的服务地址proxy_set_header Host $host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}}

记得完成 nginx 需要重新起动 nginx 服务喔!

sudo service nginx restart

将 Gunicorn 作为服务运行

这就是最后一步了,我们在此将采用 UpStart 配置Flask程序作为服务程序在Linux起动时运行。首先建立起动配置文件:

sudo nano /etc/init/myflask.conf

然后加入如下配置

description "The myflask service"start on runlevel [2345]
stop on runlevel [!2345]respawn
setuid root
setgid www-dataenv PATH= /var/www/myflask/venv/bin
chdir /var/www/myflask/exec gunicorn -w 4 -b 127.0.0.1:8080 wsgi:application

OK 大功告成,启动 myflask 服务

sudo service myflask start

这里有一点必须补充的,请留意在 myflask.conf 中的

env PATH= /var/www/myflask/venv/bin
chdir /var/www/myflask/

这里所指向的地址就是你的项目路径和 virtualenv 的路径

小结

这个部署过程感觉比我之前所介绍的 uwsgi 那种简单很多吧。这里给一点小 Tips 如果你用 Fabric 来完成这个部署过程的话那么就是纯自动化部署了喔,值得尝试的。

python flask gunicorn nginx 部署相关推荐

  1. Flask 应用部署方式之 Flask+Gunicorn+Nginx

    1. Why Flask+Gunicorn+Nginx Flask+Gunicorn+Nginx是最常用的Flask部署方案,大家深究过为何用这样的搭配么? 1.1 Why? Flask 是一个web ...

  2. Flask+Gunicorn+Ngnix部署笔记

    1 前言 最近自己开发了一个基于Flask Web框架的小应用,用于对外服务.记录下将Web应用部署的步骤.采用比较常见的flask + gunicorn + nginx来部署. 其实我的环境很简单, ...

  3. 【新手向】阿里云上ubuntu+flask+gunicorn+nginx服务器部署(二)项目部署

    本项目实现的是类似于ins的图片分享网站.继续(一),当nginx的配置已修改好后,要在远程服务器上部署网站,只需要几个步骤: 1 前期准备 2 将运行网站的代码从github上下载过来 3 下载依赖 ...

  4. python web开发c6——阿里云上ubuntu+flask+gunicorn+nginx服务器部署(一)简单测试

    简述 Nginx在服务器部署中的作用 请求通过Nginx实现反向代理,将请求提交给代理服务器.本文中只用了一台服务器,所以是代理到本机. gunicorn的作用 作为服务器代码的容器.接收Nginx的 ...

  5. CentOS7部署Flask+Gunicorn+Nginx+Supervisor

    1. Git客户端 Win10安装git for windows 1.1 设置Git全局参数 打开Git Bash $ git config --global user.name "Alic ...

  6. python编程(webpy + gunicorn + nginx部署)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 之前虽然也用nginx + uwsgi + webpy的方法部署过网站,但是用了gunicorn ...

  7. flask uwsgi nginx 部署在 ubuntu 上

    flask 部署在 ubuntu 上 文章目录 flask 部署在 ubuntu 上 视频 创建部署目录 把项目放到部署目录中 安装虚拟环境 激活虚拟环境 安装python依赖库 安装uwsgi 创建 ...

  8. python flask 部署_如何进行Python Flask项目的部署?

    先把项目传到git上,然后clone到服务器,记得先把需要的库以及版本写到 requirements.txt中 Flask==0.10.1 Flask-Bootstrap==3.0.3.1 Flask ...

  9. Python 应用 uWSGI + Nginx 部署

    新建一个 Django 应用部署 •使用 py 文件启动 uWSGI def application(env, start_response): start_response('200 ok', [( ...

最新文章

  1. python将注释写入xml_python 注释xml的元素
  2. 无法访问http,会强制跳到https
  3. 【C++】 二叉树的基本知识及其遍历
  4. 京东商城-商城研发部 算法岗面试
  5. npm的插件如何直接在html中使用,webpack插件之htmlWebpackPlugin
  6. “重构”黑洞:26岁MIT研究生的新算法
  7. 17.默认值Default.rs
  8. Mybatis理解与入门步骤
  9. 【flink】Flink 1.12.2 源码浅析 : yarn-per-job模式解析 yarn 提交过程解析
  10. 进程间能否传递指针?
  11. 过滤CString字符串中各位是数字,大小写字母,符号,汉字
  12. 那些年我们清除过的浮动
  13. Office 365 On MacOS 系列——安装 O365 其他组件
  14. javascript 开发多种类型的应用(Electron 跨平台开发)
  15. 如何写好一篇议论文章
  16. C语言清屏函数和光标隐藏函数
  17. 全面分析游戏限制多开原理
  18. C++核心准则T.10:为所有的模板参数定义概念
  19. 【Metal2剖析(三):OIT顺序无关透明渲染[Imageblock]】
  20. 静态html无法进行post请求,静态页接收post请求

热门文章

  1. guestbook.php注入,TinyGuestBook 'sign.php'多个SQL注入漏洞
  2. qt 启动画面显示图片_用QT实现软件启动画面的效果,学习参考!
  3. C 语言编程 — 异常处理
  4. Altium Designer中如何仅显示顶层的元件和顶层布线
  5. docker学习系列7 容器化Node项目
  6. 【转】【Centos】Centos下用upstart管理自己的服务程序
  7. 某全球零售客户:上马容器云 驾驭线上业务
  8. rails 常用方法
  9. activiti实战系列 并行网关(parallelGateWay)
  10. linux下通过yum安装svn及配置